Feed aggregator

Russ Allbery: AFS::PAG 1.02

Planet Debian - 3 hours 50 min ago

This is primarily a testing exercise. I moved my software release process and web page generation to a different host, and wanted to run through a release of a package to make sure that I got all the details right.

It's still a bit clunky, and I need to tweak the process, but it's close enough.

That said, there are a few minor changes in this module (which provides the minimum C glue required to do AFS operations from Perl — only the pieces that can't be duplicated by calling command-line programs). I'm improving the standardization of my Perl distributions, so I've moved NEWS to Changes and switched to the Lancaster Consensus environment variables for controlling testing. I also added some more pieces to the package metadata.

You can get the latest version from the AFS::PAG distribution page.

Categories: Elsewhere

orkjerns blogg: Now running Drupal 8, in the most hipster way imagined.

Planet Drupal - Sun, 27/07/2014 - 22:48
Now running Drupal 8, in the most hipster way imagined.

It has been a weekend in the spirit of headless Drupal, front-end optimizations and server side hacks. The result is I updated my blog to Drupal 8. Since you are reading this, it must mean it is live.

First let's start with the cold facts (almost chronologically ordered by request lifetime):

Other front-end technologies used that does not directly relate to the request itself:

So, HHVM, huh?

Yeah, that's mostly just a novelty act. There is no real gain there. Quite the opposite, I have added some hacks to get around some limitations.

HHVM does not work very well with logged in users right now, but works alright for serving anonymous content.

When I reload and look at the source code, there is no css loading. WAT?

Yeah, I am just assuming you remember the styles from last page load. Also, I have made it an image to have a 1 HTTP request CMS, right?

No, really. How does that work?

The real magic is happening by checking if you as a user already have downloaded my page earlier. If you have, I don't need to serve you css, as far as I am concerned. You should have saved that last time, so I just take care of that.

OK, so you use a cookie and save css in localstorage. Does that not screw with the varnish cache

Good question. I have some logic to internally rewrite the cached pages with a key to the same varnish hash. This way, all users trying to look at a css-less page with the css stored in localstorage will be served the same page, and php will not get touched.

What a great idea!

Really? Are you really sure you have thought of all the limitations? Because they are many. But seeing as this is my personal tech blog, and I like to experiment, it went live anyway.

Give us the code!

Sure. The theme is at github. The stupid cache module is at github. Please be aware that it is a very bad idea to use it if you have not read the code and understand what it does.

And since I am feeling pretty bad ass right now, let's end with Clint Eastwood as an animated gif.

Tags:
Categories: Elsewhere

Christian Perrier: [life] Running update July 26th 2014

Planet Debian - Sun, 27/07/2014 - 13:10
Dog, long time since I blogged about my running activities. Apparently, I didn't since......

So, well, that will be a long update as many things happened during the first half of 2014 when it comes at running, for me.

January: I was recovering from a fatigue fracture injury inherited from last races in 2013. As a consequence, I resumed running only on Jan 7th. Therefore I cancelled my participation to the "Semi Raid 28", an night orienteering raid of about 50-60km in southern neighbourhood of Paris. Instead, I actually offerred my help to organizers in collecting orienteering signs after the race (the longest one : 120km). So, I ended up spending over 24 hours running in woods and hunting down hidden signs with the same information than runners. My only advantage was that I was able to use my car to go from one point to another. Still, I ended up running over 70km in many small parts, often alone in the dark woods with my headlamp, on very muddy areas...and collecting nearly 80 huge signs.

February: Everything was going well and I for instance ran a great half-marathon in Bullion (south of Paris) in 1h3821" (great for a quite hilly race)....until I twisted my left ankle while running back from work. A quite severe twist, though no bone damage, thankfully. I had to stop running, again, for 3 years. Biking to/from work was the replacement activity....

March: I resumed running on March 10th, one week before a quite difficult trail race in my neighbourhood (30km "only" but up to 800 meters positive climb). That race was a preparation (and a test after the injury) for my 3rd participation to "Paris Ecotrail", a 80km trail race in woods of the South-West area of Paris, ending in the Eiffel Tower area. Indeed, both went very well, though I was very careful with my ankle. I finally broke my record at Ecotrail, finishing the race in 9h08 (to be compared to 9h36 last year and 11h15 the year before).

April: Paris marathon was scheduled one week after Ecotrail. Everybody will tell you that running a marathon one week after a 80km race is kinda crazy.....which is why I made it..:-). That was my 3rd Paris marathon and my 12th marathon overall. However, this year, no record in sight. The challenge was running the marathon....dressed as SpongeBob (you know me, right?). I actually had great fun doing that and was happy to get zillions of cheering all over the race, from the crowd. I finally completed the race in 4h30, which is, after all, not that far from the time of my very first marathon (4h12). The only drawback was that the succession of quite very long distance runs made my left knee suffer as it never happened before. As a consequence, I (again) had to stop running for nearly one month before we found that I was quite sensitive to pronation, which the succession of long and slow races made worse.

May: so finally afterthese (very) long weeks, I could gradually resume running, which finally culminated in mid-May with the 50km race "trail des Cerfs", in the Rambouillet Forest, closed to our place. This quite long but not too difficult trail race ("only" 800 meters positive climb overall) was completed in 5h16, which was completely unexpected, given the low training during the previous weeks.

June: no race during that month. The entire month was focused on preparing the Montagn'hard race of July 5th: so several training sessions with a lot of climbing either by running or by fast walking (nordic style) as well as downhill run training (always important for moutain trail).

July: the second "big peak" of my 2014 season was scheduled for July 5th: "La Montagn'hard", a moutain trail race close to Les Contamines in the neighbourhood of Chamonix, the french moutaineering Mekkah. "Only" 60 kilometers....but close to 5000 meters positive climb. Montagn'hard is among the thoughest moutain trail races in France and therefore a "must do" for trail runners. This race week-end includes also a 105km ultra-race, which is often said to be as hard, even maybe harder, than the very famous "Ultra Trail du Mont-Blanc" trail in Chamonix. Still, for my second only season in moutain trail running, I decided to be "wise" and stick with the "medium" version (after all, my experience, as of now with moutain trails were only two quite "short" ones). Needless to say, it has indeed been a GREAT race. The environment is wonderful ("Miage" side of the Mont-Blanc range), the race goes through great place (Col de Tricot, noticeably) and I made a great result by finishing80th out of 3250+ runners, in 12h18, while my target time was around 13 hours.

This is where I am now. Nearly one month after Montagn'hard, I'm deeply training for my next Big Goal: The "Sur la Trace des Ducs de Savoie" or "TDS", one of the 4 races of the Ultra Trail du Mont-Blanc week, in end August (during DebConf): 120km, nearly 7500m positive climp, between Courmayeur and Chamonix, through several passes, up to 2600m height. Yet another challenge: my first "over 24h" race, with a full night out in the moutains.

You'll certainly hear again from me about that...:-)

Categories: Elsewhere

Christian Perrier: Developers per country (July 2014)

Planet Debian - Sun, 27/07/2014 - 09:37
This is time again for my annual report about the number of developers per country.

This is now the sixth edition of this report. Former editions:

So, here we are with the July 2014 version, sorted by the ratio of *active* developers per million population for each country.

Act: number of active developers Dev: total number of developers A/M: number of active devels per million pop. D/M: number of devels per million pop. 2009: rank in 2009 2010: rank in 2010 2011: rank in 2011 (June) 2012: rank in 2012 (June) 2013: rank in 2012 (July) 2014: rank now Code Name Population Act Dev Dev Act/Million Dev/Million 2009 2010 June 2011 June 2012 July 2013 July 2014
fi Finland 5259250 19 31 3,61 5,89 1 1 1 1 1 1
ie Ireland 4670976 13 17 2,78 3,64 13 9 6 2 2 2
nz New Zealand 4331600 11 15 2,54 3,46 4 3 5 7 7 3 * mq Martinique 396404 1 1 2,52 2,52

3 4 4 4
se Sweden 9088728 22 37 2,42 4,07 3 6 7 5 5 5
ch Switzerland 7870134 19 29 2,41 3,68 2 2 2 3 3 6 * no Norway 4973029 11 14 2,21 2,82 5 4 4 6 6 7 * at Austria 8217280 18 29 2,19 3,53 6 8 10 10 10 8 * de Germany 81471834 164 235 2,01 2,88 7 7 9 9 8 9 * lu Luxemburg 503302 1 1 1,99 1,99 8 5 8 8 9 10 * fr France 65350000 101 131 1,55 2 12 12 11 11 11 11
au Australia 22607571 32 60 1,42 2,65 9 10 12 12 12 12
be Belgium 11071483 14 17 1,26 1,54 10 11 13 13 13 13
uk United-Kingdom 62698362 77 118 1,23 1,88 14 14 14 14 14 14
nl Netherlands 16728091 18 40 1,08 2,39 11 13 15 15 15 15
ca Canada 33476688 34 63 1,02 1,88 15 15 17 16 16 16
dk Denmark 5529888 5 10 0,9 1,81 17 17 16 17 17 17
es Spain 46754784 34 56 0,73 1,2 16 16 19 18 18 18
it Italy 59464644 36 52 0,61 0,87 23 22 22 19 19 19
hu Hungary 10076062 6 12 0,6 1,19 18 25 26 20 24 20 * cz Czech Rep 10190213 6 6 0,59 0,59 21 20 21 21 20 21 * us USA 313232044 175 382 0,56 1,22 19 21 25 24 22 22
il Israel 7740900 4 6 0,52 0,78 24 24 24 25 23 23
hr Croatia 4290612 2 2 0,47 0,47 20 18 18 26 25 24 * lv Latvia 2204708 1 1 0,45 0,45 26 26 27 27 26 25 * bg Bulgaria 7364570 3 3 0,41 0,41 25 23 23 23 27 26 * sg Singapore 5183700 2 2 0,39 0,39


33 33 27 * uy Uruguay 3477778 1 2 0,29 0,58 22 27 28 28 28 28
pl Poland 38441588 11 15 0,29 0,39 29 29 30 30 30 29 * jp Japan 127078679 36 52 0,28 0,41 30 28 29 29 29 30 * lt Lithuania 3535547 1 1 0,28 0,28 28 19 20 22 21 31 * gr Greece 10787690 3 4 0,28 0,37 33 38 34 35 35 32 * cr Costa Rica 4301712 1 1 0,23 0,23 31 30 31 31 31 33 * by Belarus 9577552 2 2 0,21 0,21 35 36 39 39 32 34 * ar Argentina 40677348 8 10 0,2 0,25 34 33 35 32 37 35 * pt Portugal 10561614 2 4 0,19 0,38 27 32 32 34 34 36 * sk Slovakia 5477038 1 1 0,18 0,18 32 31 33 36 36 37 * rs Serbia 7186862 1 1 0,14 0,14



38 38
tw Taiwan 23040040 3 3 0,13 0,13 37 34 37 37 39 39
br Brazil 192376496 18 21 0,09 0,11 36 35 38 38 40 40
cu Cuba 11241161 1 1 0,09 0,09
38 41 41 41 41
co Colombia 45566856 4 5 0,09 0,11 41 44 46 47 46 42 * kr South Korea 48754657 4 6 0,08 0,12 39 39 42 42 42 43 * gt Guatemala 13824463 1 1 0,07 0,07



43 44 * ec Ecuador 15007343 1 1 0,07 0,07
40 43 43 45 45
cl Chile 16746491 1 2 0,06 0,12 42 41 44 44 47 46 * za South Africa 50590000 3 10 0,06 0,2 38 48 48 48 48 47 * ru Russia 143030106 8 9 0,06 0,06 43 42 47 45 49 48 * mg Madagascar 21281844 1 1 0,05 0,05 44 37 40 40 50 49 * ro Romania 21904551 1 2 0,05 0,09 45 43 45 46 51 50 * ve Venezuela 28047938 1 1 0,04 0,04 40 45 50 49 44 51 * my Malaysia 28250000 1 1 0,04 0,04

49 50 52 52
pe Peru 29907003 1 1 0,03 0,03 46 46 51 51 53 53
tr Turkey 74724269 2 2 0,03 0,03 47 47 52 52 54 54
ua Ukraine 45134707 1 1 0,02 0,02 48 53 58 59 55 55
th Thailand 66720153 1 2 0,01 0,03 50 50 54 54 56 56
eg Egypt 80081093 1 3 0,01 0,04 51 51 55 55 57 57
mx Mexico 112336538 1 1 0,01 0,01 49 49 53 53 58 58
cn China 1344413526 10 14 0,01 0,01 53 53 57 56 59 59
in India 1210193422 8 9 0,01 0,01 52 52 56 57 60 60
sv El Salvador 7066403 0 1 0 0,14

36 58 61 61































969 1561 62,08%







A few interesting facts:
  • New Zealand bumps from rank 7 to rank 3, thanks to one new active developer
  • Switzerland loses one developer and goes donw to rank 6
  • Norway also slightly goes down by losing one developer
  • With two more developers, Austria climbs up to rank 8 and overtakes Germany...;-)
  • Hungary climbs a little bit by gaining one developer
  • Singapore doubles its number of developers from 1 to 2 and bumps from 33 to 27
  • One rank up too for Poland that gained one developer
  • Down to rank 31 for Lithuania by losing one developer
  • Up to rank 32 for Greece with 4 developers instead of 3
  • Argentina goes up by havign two more developers (it lost 2 last year)
  • Up from 46 to 42 for Colombia by winning one more developer
  • One more developer and Russia climps from 49 to 48
  • One less for Venezuela that has only one developer left...:-(
  • No new country this year. Less movement towards "the universal OS"?
  • We have 12 more active Debian developers and 26 more developers overall. Less progression than last year
  • The ratio of active developers increases is nearly stable though slightly decreasing
Categories: Elsewhere

Berliners blog: Showcase: Art market

Planet Drupal - Sat, 26/07/2014 - 20:56

The last months I was busy with a friends art project. Today I'm very happy to announce that it went public on july 15th and is doing good so far.

Jule, the founder of Port of Art, approached me last summer, asking if I could help her building an online market place for artworks. Working primarily as a freelance Drupal developer, knowing that her budget is tight and that she is certainly not the first one with this idea, I hesitated. But I gave it a thought and after several meetings I agreed. I liked the idea and I liked Jules approach, that is very trusting and positive without being naive. I like good people ;) She also gave me the impression of being able to value constructive input, even if it means to change previous ideas. That is a good feature in clients!

Basic ideas with a special flavor

The basic requirements were pretty simple:

  • Content management for static content pages as well as for special content like the artworks that are sold on the site
  • Search artworks by different filters
  • Legal compliant checkout process
  • Integration of external payment providers (limited to paypal for the moment being)
  • Contact forms
  • Multilingual content and communication
  • Integration of social media
  • Some map views for geo visualization
  • SEO, customizability, ...

So far that was relatively straight forward and we all love Drupal for that.
But there were some special requirements too, that had a huge impact on my choice of modules to realize this with.

  • Artworks don't integrate with a basic warehouse approach. Each one should be unique and can be bought only once. Therefor there was no need for a shopping cart either.
  • Artworks can be bought for a fixed price or as an auction.
  • Artworks under a certain price are not sold via the site, but instead the customer and the artist are put in touch directly and have to figure out the details independently of the platform.
  • Artists should be able to upload their artworks, pay a fee to get them published and than manage the selling and delivery on their own.
  • Artworks expire after a certain time that depends on the publishing fee that the artist is willing to pay.
  • Once an artwork has been sold on the site, an additional fee has to be paid.
  • Fully customizable e-mails

The main content is obviously the artwork. This is a node type with additional fields to represent attributes of an artwork. Then there are static pages, artschools, faqs and webforms. On the user side we have two frontend user roles for customers and artists that get enhanced using the Profile 2 module.

Additional considerations

The situation that our development team was faced with: Small budget, tiny team (only 2 people), the project's concept still a little in the flux. The founder had no technical background or previous experience using Drupal but needed a customized shop system that she could actually manage after we finished the project and went on to other things. So one of the goals during development has always been to make things configurable. Special text at a certain page? Build a setting for that. A special criterion that controls logic during checkout? Don't hardcode it somewhere! Build a setting for that as it might change later and you don't want to change code for simple things. I love drupal for it's easy variable management and quick form building capabilities. Building an admin form to control certain behaviors takes rarely more then 10 minutes. Obviously there are things that you can't build that way, but when you can, do it. I feel much butter with it and the client loves it too because it gives him control.

Conception and development process

One of the things I knew before, but that got confirmed again: Communication is the key. The client has never did a web project before. That meant that certain good practices and workflow, concerning the development process as well as the final product, were not clear to her. So we (the designer and me) spend a good amount of time helping her figure out what was realistic and which compromises needed to be done in order to deliver the product without cost explosion or an exagerated time frame. Being honest and communicating potential problems early on, as well as the clients openness towards constructive input, was something that attributed a lot to the perceived quality of the development process. Including the client in the development and design decisions also allowed us to educate her on the technical aspects of the product and raise awarness about technical implications, making her see advantages and restrictions in different areas that she didn't consider in the beginning.
We didn't formalize the process, but we ended up with some kind of agile development with three distinct roles: Conception and design by the client, frontend by the designer and backend logic and architecural design by me. That worked very good for us.

Obvious modules that we still didn't use

First, there is Rules. A crazy wonderland for workflow configuration that amazes me every time I look at it. But I've almost never used it. Call me old fashioned, but when business logic or complex relations must be build, I prefer to build them on my own. I want as much logic as possible in the code, not in the database. So for all the power Rules provide, I still prefer not to use it.

Then there is Commerce. We have never build a real-world website with it, so our experience was very limited. We thought about it. Very seriously. Then we decided against it. From todays perspective that was probably an error. But given the special requirements we were afraid of having to spent too much time customizing and altering the workflow that commerce proposes. This was more of a gut feeling. And at the end I'm not sure it was the right decision. We ended up with conceiving and building a full fledged product management incuding the purchase logic and payment. The obvious advantage when you write something like this on your own, is that you have a lot of fine grained control about flow and design. But the price is pretty high considering the amount of time necessary. At the end we have a considerable code base that needs to be maintained. So next time, I hope I'll remember this an give commerce a more in depth examination regarding the potential for the problem at hand.

Crucial contrib modules / add ons

It's hardly necessary to mention, but we couldn't have build the site so easily without the usual candidates: Views, Webform, Better Exposed Filters, Address Field, CTools, i18n, References, Profile 2, Geofield, Global Redirect, Libraries, ...

The fantastic wookmark jquery plugin is responsible for the display of the central search component of the site. Our designer loves it!

Some modules that got born or advanced

I build MEFIBS for this site. I had a need for that functionality before, but never quite as strong as this time, so I decided to solve it as a self contained module instead of hacking things together. Though there are some problems currently with a few new features that I added recently, it is already in production and doing pretty well. Have a look at the filter and sorting blocks on the artwork search page: . Two independant blocks without duplicating a views display or intensive custom form altering. That's pretty neat.

Hopefully the jQuery Update module will also profit. During development I ran into issues with the admin version feature introduced here: https://www.drupal.org/node/1524944. I wrote about it in jQuery version per theme. This resulted in a feature patch that is currently on a good way to get committed soon.

I also found a bug in the PayPal for Payment module: https://www.drupal.org/node/2052361 that will hopefully get fixed soon.

Another module I find myself using often is my sandbox module Mailer API. It's a bit cumbersome to use as a developer, but for the client it's perfect. She can customize practically every mail that will be send by the system. It's all on a single configuration page and supports multilingual setups. A test mail feature is also included to see what mails will look like. And a batch mailer that the client often uses to address a bunch of people. It's like very easy home made promotional mails in a consistent look and feel. Made the client happy.

For frontend eye candy we have build a jQuery plugin that is responsible for the collapsible checkbox filter elements in the left side bar.

Some module discoveries

During the work on www.port-of-art.com I found some modules that I didn't know before.

The Form API Validation module allows you to simplify validation rules in custom forms, using predefined validation rules. And you can also add your own rules which we used for the price entry validation needed when artists publish their artworks.

The Physical Fields module provides fields for physical dimensions and for weight attributes. That was exactly what we needed for physical goods. It saved us the time to configure fields in field collections.

Conclusion

At the end of the project I can say, that everyone involved has had a good and productive time and enjoyed the process and the result. The client is happy for all the things she can do with the site. Now she can concentrate on managing business and extending marketing. The designer was happy. Even if some of the design decisions might not have been the best ones looking at the requirements profile from today. I feel positive though that the system fully matches the clients expectations and that it'll be a valuable tool for developing her business. If the site manages to establish itself, it's more than probable that we would rebuild the system, at least some substantial pieces like the shop component.

We as the site builders are happy too. We feel that we have done a good job and that we managed to keep resources and expectations in balance. I would do it again, which always feels like a good measure.

Category: Drupal Planet7.x
Categories: Elsewhere

Code Drop: Drupal 7 WYSIWYG Editors Done Right

Planet Drupal - Sat, 26/07/2014 - 16:36

It's fair to say, on a fresh install the content authoring experience in Drupal needs improvement. WYSIWYG editors are often criticised for various reason such as the ugly HTML they are known to generate or the power they give users to mess up typography. While these are valid criticisms, there is definitely a right and wrong way configure these editors. Doing things the right way will empower users while keeping them safe from nasty pitfalls. Note: this guide assumes you're already familiar with a typical Drupal WYSIWYG setup.

Provide a true WYSIWYG experience

It's important that a WYSWIYG editor represents exactly what appears on the front-end of your website. While it seems obvious, it's easy to ignore and has a big impact on a user's experience.

Our WYSWIYG stack is:

Categories: Elsewhere

Holger Levsen: 20140726-the-future-is-now

Planet Debian - Sat, 26/07/2014 - 14:08
Do you remember the future?

Unless you are over 60, you weren't promised flying cars. You were promised an oppressive cyberpunk dystopia. Here you go.

(Source: found in the soup)

Luckily the future today is still unwritten. Shape it well.

Categories: Elsewhere

Drupal.org Featured Case Studies: Concern Worldwide - Mobilisation & Usability

Planet Drupal - Fri, 25/07/2014 - 23:58
Completed Drupal site or project URL: https://www.concern.net

Concern Worldwide is a leading international humanitarian organization dedicated to tackling poverty and suffering in the world’s poorest countries. Their main website, www.concern.net, plays an important role in their fundraising process. It enables people from around the world to donate towards specific campaigns and ensure that their money is distributed to where it’s needed most.

SystemSeed has the wonderful opportunity of partnering with Concern in leveraging Drupal to power the Concern Worldwide platform for a number of years spanning all the way back to the days of Drupal 5. This particular site was upgraded to Drupal 7 in 2012 as part of a large platform refactor which aimed to consolidate all of Concern’s Drupal websites under a single common platform. We wrote about the transition from standalone sites in this case study.

Since then, we have been leading a large project to bring full responsiveness and optimisations across a wide spectrum of devices to all sites on that platform. Today (July 3, 2014) sees the completion of this project with the rollout of a fully responsive and adaptive theme layer, catering for its widest audience ever. In this case study, we’ll look at some of the components of this project, the processes, the challenges, the successes, and lessons learned along the way.

Key modules/theme/distribution used: OmegaBreakpointsBreakpoint PanelsPictureInline Form ErrorsOrganizations involved: SystemSeedTeam members: mrfeltonrahulbileroblavfastangeljucallme
Categories: Elsewhere

Richard Hartmann: Release Critical Bug report for Week 30

Planet Debian - Fri, 25/07/2014 - 23:58

I have been asked to publish bug stats from time to time. Not exactly sure about the schedule yet, but I will try and stick to Fridays, as in the past; this is for the obvious reason that it makes historical data easier to compare. "Last Friday of each month" may or may not be too much. Time will tell.

The UDD bugs interface currently knows about the following release critical bugs:

  • In Total: 1511
    • Affecting Jessie: 431 That's the number we need to get down to zero before the release. They can be split in two big categories:
      • Affecting Jessie and unstable: 383 Those need someone to find a fix, or to finish the work to upload a fix to unstable:
        • 44 bugs are tagged 'patch'. Please help by reviewing the patches, and (if you are a DD) by uploading them.
        • 20 bugs are marked as done, but still affect unstable. This can happen due to missing builds on some architectures, for example. Help investigate!
        • 319 bugs are neither tagged patch, nor marked done. Help make a first step towards resolution!
      • Affecting Jessie only: 48 Those are already fixed in unstable, but the fix still needs to migrate to Jessie. You can help by submitting unblock requests for fixed packages, by investigating why packages do not migrate, or by reviewing submitted unblock requests.
        • 0 bugs are in packages that are unblocked by the release team.
        • 48 bugs are in packages that are not unblocked.

Graphical overview of bug stats thanks to azhag:

Categories: Elsewhere

LightSky: NavBar - The Next Step in Drupal Navigation

Planet Drupal - Fri, 25/07/2014 - 21:17

So I am not kidding NavBar is literally the next step in Drupal navigation, it is being used in core for Drupal 8.  This is great news because not only does it mean that the Drupal 8 core will contain some much needed improvements to the administration navigation scheme.  Back end user improvements like this are perhaps the thing that makes me most excited about what Drupal 8 is bringing to the table.  Lets look a little bit at NavBar.

What You Get

Pretty simply put NavBar gets you a responsive administration toolbar for your Drupal users.  It really isn’t going to do anything for what your visitors see, but your content creators, site administrators, and even site builders will see this as a much welcomed change.  NavBar is first and foremost completely responsive, and for those of you who use the traditional Drupal administration toolbar on your mobile phone oh boy are you excited.  The standard Drupal 7 install, not to mention Drupal 6, doesn’t offer the most mobile friendly administrative experience.  NavBar helps resolve this.  NavBar also offers a more flexible navigation option.  You are able to use NavBar at the top of your site above the header, or as a sidebar on the left hand side.  The customization of the tool, really helps set it apart.

Not only is the mobile experience improved, but there is a much cleaner and professional looking image presented than the Drupal 7 administration menu.  Though this might not seem like much, for those of us who build Drupal sites for clients this is a big deal.  Image is everything, and it is tough to sell Drupal’s out of the box usability against WordPresses out of the box usability.  We have a lot of admin usability improvements in our standard Drupal installation to help combat this, but now NavBar is another one.  Users almost expect clean and friendly design, and now they can get it. 

Installation

I am not going to lie, NavBar in its current state is a bit of installation work, but most people should be able to figure it out if they have a little understanding for how Drupal is structured. 

The first step for me is downloading and installing the project.  I think that drush is the best tool for installing and enabling projects like this, but particularly for NavBar I suggest installing the project before moving to some of the other steps.  The reason is that once the project is installed and enabled it will put some indicators on your /admin/reports/status page that can really help you troubleshoot in the next steps.

Once the NavBar module is enabled, you can visit the site’s status report using the path above and notice that there are a three statuses now associated with NavBar, and this is where the fun comes in.  NavBar requires the installation of three libraries (Modernizr, Backbone, and Underscore), and you may have them already installed, or at least some of them.  Using the status page at this point will help you find out if you have them already installed and ready to run, or whether you need to install them.
If you find that you need to install them, the process isn’t all that complicated, there are some helpful guides on the project page that will point you in the right direction.  Or give us a shout we would be happy to help.  Essentially it is a matter of downloading the libraries, or cloning their respective repositories, and moving them to your libraries folder in the Drupal installation.  The Modernizr library requires you to follow a link and download a specific minimized version of the library but there are specific instructions to follow on the project page to help guide you here, so I won’t reinvent the wheel here.  The instructions are pretty thorough, and relatively simple. 

Once you have the libraries installed you can disable your regular administration toolbar and you are off and running.  If you follow those steps and still aren’t having any luck, the site status report is the best place to look.  Most likely it is an error with the libraries that were installed, and that report will point you to which library is causing trouble, and maybe even what the problem is.

We have fallen in love with NavBar, and it has started making a huge impact on our clients and how well they like using Drupal.  We highly suggest you use it.

For more tips like these, follow us on social media or subscribe for free to our RSS feed and newsletter. You can also contact us directly or request a consultation
Categories: Elsewhere

Clemens Tolboom: It's alive in space

Planet Drupal - Fri, 25/07/2014 - 18:03
Experimenting with the index file of https://github.com/clemens-tolboom/uml-generator-php lead to a nice animation. Click the image below using Chrome to see Drupal 8 in it's full glory (only if you have the power to consume a hefty animation).
Categories: Elsewhere

Four Kitchens: Design, Prototype, and Style in Browser

Planet Drupal - Fri, 25/07/2014 - 18:00

As Brad Frost aptly points out, the core pieces of responsive web design (fluid grid, flexible media, and media queries) are only the tip of the iceberg. In our latest training session at DrupalCon Amsterdam, the Web Chefs will show you how to level up your responsive design skills to create amazing experiences across the web.

Training Drupal
Categories: Elsewhere

Juliana Louback: Extending an XTuple Business Object

Planet Debian - Fri, 25/07/2014 - 17:06

xTuple is in my opinion incredibly well designed; the code is clean and the architecture ahderent to a standardized structure. All this makes working with xTuple software quite a breeze.

I wanted to integrate JSCommunicator into the web-based xTuple version. JSCommunicator is a SIP communication tool, so my first step was to create an extension for the SIP account data. Luckily for me, the xTuple development team published an awesome tutorial for writing an xTuple extension.

xTuple cleverly uses model based business objects for the various features available. This makes customizing xTuple very straightforward. I used the tutorial mentioned above for writing my extension, but soon noticed my goals were a little different. A SIP account has 3 data fields, these being the SIP URI, the account password and an optional display name. xTuple currently has a business object in the core code for a User Account and it would make a lot more sense to simply add my 3 fields to this existing business object rather than create another business object. The tutorial very clearly shows how to extend a business object with another business object, but not how to extend a business object with only new fields (not a whole new object).

Now maybe I’m just a whole lot slower than most people, but I had a ridiculously had time figuring this out. Mind you, this is because I’m slow, because the xTuple documentation and code is understandable and as self-explanatory as it gets. I think it just takes a bit to get used to. Either way, I thought this just might be useful to others so here is how I went about it.

Setup

First you’ll have to set up your xTuple development environment and fork the xtuple and xtuple-extesions repositories as shown in this handy tutorial. A footnote I’d like to add is please verify that your version of Vagrant (and anything else you install) is the one listed in the tutorial. I think I spent like two entire days or more on a wild goose (bug) chase trying to set up my environment when the cause of all the errors was that I somehow installed an older version of Vagrant - 1.5.4 instead of 1.6.3. Please don’t make the same mistake I did. Actually if for some reason you get the following error when you try using node:

<<ERROR 2014-07-10T23:52:46.948Z>> Unrecoverable exception. Cannot call method 'extend' of undefinedTypeError: Cannot call method 'extend' of undefined at /home/vagrant/dev/xtuple/lib/backbone-x/source/model.js:37:39 at Object.<anonymous> (/home/vagrant/dev/xtuple/lib/backbone-x/source/model.js:1364:3) ... at /home/vagrant/dev/xtuple/lib/backbone-x/source/model.js:37:39 at Object.<anonymous> (/home/vagrant/dev/xtuple/lib/backbone-x/source/model.js:1364:3) ...

chances are, you have the wrong version. That’s what happened to me. The Vagrant Virtual Development Environment automatically installs and configures everything you need, it’s ready to go. So if you find yourself installing and updating and apt-gets and etc, you probably did something wrong.

Coding So by now we should have the Vagrant Virtual Development Environment set up and the web app up and running and accessible at localhost:8443. So far so good.

Disclaimer: You will note that much of this is similar to xTuple’s tutorial but there are some small but important differences. Other Disclaimer: I’m describing how I did it, which may or may not be ‘up to snuff’. Works for me though.

Schema First let’s make a schema for the table we will create with the new custom fields. Be sure to create the correct directory stucture, aka
<div class="highlight"><pre>/path/to/xtuple-extensions/source/<YOUR EXTENSION NAME>/database/source </pre></div> , in my case <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/database/source </pre></div> , and create the file <div class="highlight"><pre>create_sa_schema.sql </pre></div> , ‘sa’ is the name of my schema. This file will contain the following lines:

do $$ /* Only create the schema if it hasn't been created already */ var res, sql = "select schema_name from information_schema.schemata where schema_name = 'sa'", res = plv8.execute(sql); if (!res.length) { sql = "create schema sa; grant all on schema sa to group xtrole;" plv8.execute(sql); } $$ language plv8;

Of course, feel free to replace ‘sa’ with your schema name of choice. All the code described here can be found in my xtuple-extensions fork, on the sip_ext branch.

Table We’ll create a table containing your custom fields and a link to an existing table - the table for the existing business object you want to extend. If you’re wondering why, here’s a good explanation, the case in question is adding fields to the Contact business object.

You need to first figure out what table you want to link to. This might not be uber easy. I think the best way to go about it is to look at the ORMs. The xTuple ORMs are a JSON mapping between the SQL tables and the object-oriented world above the database, they’re .json files found at path/to/xtuple/node_modules/xtuple/enyo-client/database/orm/models for the core business objects and at path/to/xtuplenyo-client/extensions/source//database/orm/models for exension business objects. I'll give two examples. If you look at [contact.json](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/orm/models/contact.json#L6) you will see that the Contact business object refers to the table "cntct". Look for the "type": "Contact" on the [line above](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/orm/models/contact.json#L5), so we know it's the "Contact" business object. In my case, I wanted to extend the UserAccount and UserAccountRelation business objects, so check out [user_account.json](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/orm/models/user_account.json). The table listed for [UserAccount is xt.usrinfo](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/orm/models/user_account.json#L314) and the table listed for [UserAccountRelation is xt.usrlite](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/orm/models/user_account.json#L448). A closer look at these files ([usrinfo.sql](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/source/xt/views/usrinfo.sql) and [usrlite.sql](https://github.com/xtuple/xtuple/blob/master/enyo-client/database/source/xt/tables/usrlite.sql)) revealed that usrinfo is in fact a view and usrlite is 'A light weight table of user information used to avoid punishingly heavy queries on the public usr view'. I chose to refer to xt.usrlite - that or I received error messages when trying the other names, will confirm later.

Now I’ll make the file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/database/source/usrlitesip.sql </pre></div> , to create a table with my custom fields plus the link to the urslite table. Don’t quote me on this, but I’m under the impression that this is the norm for names for joining tables, the name of the table you are referring to (‘usrlite’ in this case) and your extension name. Content of usrlitesip.sql:

select xt.create_table('usrlitesip', 'sa'); select xt.add_column('usrlitesip','usrlitesip_id', 'serial', 'primary key', 'sa'); select xt.add_column('usrlitesip','usrlitesip_usr_username', 'text', 'references xt.usrlite (usr_username)', 'sa'); select xt.add_column('usrlitesip','usrlitesip_uri', 'text', '', 'sa'); select xt.add_column('usrlitesip','usrlitesip_name', 'text', '', 'sa'); select xt.add_column('usrlitesip','usrlitesip_password', 'text', '', 'sa'); comment on table sa.usrlitesip is 'Joins User with SIP account';

Breaking it down, line 1 creates the table named ‘usrlitesip’ (no duh), line 2 is for the primary key (self-explanatory). You can then add any columns you like, just be sure to add one that references the table you want to link to. I checked [usrlite.sql and saw the primary key is usr_username}(https://github.com/xtuple/xtuple/blob/master/enyo-client/database/source/xt/tables/usrlite.sql#L3), be sure to use the primary key of the table you are referencing.

You can check what you made by executing the .sql files like so:

$ cd /path/to/xtuple-extensions/source/sip_account/database/source $ psql -U admin -d dev -f create_sa_schema.sql $ psql -U admin -d dev -f usrlitesip.sql

After which you will see the empty table if you enter:

$ psql -U admin -d dev -c "select * from sa.usrlitesip;"

Now create the file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/database/source/manifest.js </pre></div> to put the files together and in the right order. It should contain:

{ "name": "sip_account", "version": "1.4.1", "comment": "Sip Account extension", "loadOrder": 999, "dependencies": ["crm"], "databaseScripts": [ "create_sa_schema.sql", "usrlitesip.sql", "register.sql" ] }

I think the “name” has to be the same you named your extension directory as in <div class="highlight"><pre>/path/to/xtuple-extensions/source/<YOUR EXTENSION NAME> </pre></div> . I think the “comment” can be anything, you want your “loadOrder” to be high so it’s the last thing installed (as it’s an add on.) So far we are doing exactly what’s instructed in the xTuple tutorial. It’s repetitive, but I think you can never have too many examples to compare to. In “databaseScripts” you will list the two .sql files you just created for the schema and the table, plus another file to be made in the same directory named <div class="highlight"><pre>register.sql </pre></div> .

I’m not sure why you have to make the <div class="highlight"><pre>register.sql </pre></div> or even if you indeed have to. If you leave the file empty, there will be a build error, so put a ‘;’ in the <div class="highlight"><pre>register.sql </pre></div> or remove the line <div class="highlight"><pre>"register.sql" </pre></div> from <div class="highlight"><pre>manifest.js </pre></div> as I think for now we are good without it.

Now let’s update the database with our new extension:

$ cd /path/to/xtuple $ ./scripts/build_app.js -d dev -e ../xtuple-extensions/source/sip_account $ psql -U admin -d dev -c "select * from xt.ext;"

That last command should display a table with a list of extensions; the ones already in xtuple like ‘crm’ and ‘billing’ and some others plus your new extension, in this case ‘sip_account’. When you run <div class="highlight"><pre>$ ./scripts/build_app.js -d dev -e ../xtuple-extensions/source/sip_account </pre></div> you’ll probably see a message along the lines of “ has no client code, not building client code" and that's fine because yeah, we haven't worked on the client code yet.

ORM Here’s where things start getting different. So ORMs link your object to an SQL table. But we DON’T want to make a new business object, we want to extend an existing business object, so the ORM we will make will be a little different than the xTuple tutorial. Steve Hackbarth kindly explained this new business object/existing business object ORM concept here.

First we’ll create the directory <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/database/orm/ext </pre></div> , according to xTuple convention. ORMS for new business objects would be put in <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/database/orm/models </pre></div> . Now we’ll create the .json file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/database/orm/ext/user_account.jscon </pre></div> for our ORM. Once again, don’t quote me on this, but I think the name of the file should be the name of the business object you are extending, as is done in the turorial example extending the Contact object. In our case, UserAccount is defined in user_account.json and that’s what I named my extension ORM too. Here’s what you should place in it:

[ { "context": "sip_account", "nameSpace": "XM", "type": "UserAccount", "table": "sa.usrlitesip", "isExtension": true, "isChild": false, "comment": "Extended by Sip", "relations": [ { "column": "usrlitesip_usr_username", "inverse": "username" } ], "properties": [ { "name": "uri", "attr": { "type": "String", "column": "usrlitesip_uri", "isNaturalKey": true } }, { "name": "displayName", "attr": { "type": "String", "column": "usrlitesip_name" } }, { "name": "sipPassword", "attr": { "type": "String", "column": "usrlitesip_password" } } ], "isSystem": true }, { "context": "sip_account", "nameSpace": "XM", "type": "UserAccountRelation", "table": "sa.usrlitesip", "isExtension": true, "isChild": false, "comment": "Extended by Sip", "relations": [ { "column": "usrlitesip_usr_username", "inverse": "username" } ], "properties": [ { "name": "uri", "attr": { "type": "String", "column": "usrlitesip_uri", "isNaturalKey": true } }, { "name": "displayName", "attr": { "type": "String", "column": "usrlitesip_name" } }, { "name": "sipPassword", "attr": { "type": "String", "column": "usrlitesip_password" } } ], "isSystem": true } ]

Note the “context” is my extension name, because the context + nameSpace + type combo has to be unique. We already have a UserAccount and UserAccountRelation object in the “XM” namespace in the “xtuple” context in the original user_account.json, now we will have a UserAccount and UserAccountRelation object in the “XM” namespace in the “sip_account” conext. What else is important? Node that “isExtension” is true on lines 7 and 47 and the “relations” item contains the “column” of the foreign key we referenced.

This is something you might want to verify: “column” (lines 12 and 52) is the name of the attribute on your table. When we made a reference to the primary key usr_usrname from the xt.usrlite table we named that column usrlitesip_usr_usrname. But the “inverse” is not the .sql name but rather the attribute name associated with the original sql table in the original ORM. Did I lose you? I had a lot of trouble with this silly thing. In the original ORM that created a new UserAccount business object, the primary key attribute is named “username”, as can be seen here. That is what should be used for the “inverse” value. Not the sql column name (usr_username) but the object attribute name (username). I’m emphasizing this because I made that mistake and if I can spare you the pain I will.

If we rebuild our extension everything should come along nicely, but you won’t see any changes just yet in the web app because we haven’t created the client code.

Client Create the directory <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client </pre></div> which is where we’ll keep all the client code. I want the fields I added to show up on the form to create a new User Account, so I need to extend the view for the User Account workspace. I’ll start by creating a directory <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client/views </pre></div> and in it creating a file named ‘workspace.js’ containing this code:

XT.extensions.sip_account.initWorkspace = function () { var extensions = [ {kind: "onyx.GroupboxHeader", container: "mainGroup", content: "_sipAccount".loc()}, {kind: "XV.InputWidget", container: "mainGroup", attr: "uri" }, {kind: "XV.InputWidget", container: "mainGroup", attr: "displayName" }, {kind: "XV.InputWidget", container: "mainGroup", type:"password", attr: "sipPassword" } ]; XV.appendExtension("XV.UserAccountWorkspace", extensions); };

So I’m initializing my workspace and creating an array of items to add (append) to view XV.UserAccountWorkspace. The first ‘item’ is this onyx.GroupboxHeader which is a pretty divider for my new items, the kind you find in the web app at Setup > User Accounts, like ‘Overview’. I have no idea what other options there are for container other than “mainGroup”, so let’s stick to that. I’ll explain <div class="highlight"><pre>content: "_sipAccount".loc() </pre></div> in a bit. Next I created three input fields of the XV.InputWidget kind. This also confused me a bit as there are different kinds of input to be used, like dropdowns and checkboxes. The only advice I can give is snoop around the webapp, find an input you like and look up the corresponding workspace.js file to see what was used.

What we just did is (should be) enough for the new fields to show up on the User Account form. But before we see things change, we have to package the client. Create the file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client/views/package.js </pre></div> . This file is needed to ‘package’ groups of files and indicates the order the files should be loaded (for more on that, see this). For now, all the file will contain is:

enyo.depends( "workspace.js" );

You also need to package the ‘views’ directory containing workspace, so create the file Create the file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client/package.js </pre></div> and in it show that the directory ‘views’ and its contents must be part of the higher level package:

enyo.depends( "views" );

I like to think of it as a box full of smaller boxes.

This will sound terrible, but apparently you also need to create the file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client/core.js </pre></div> containing this line:

XT.extensions.icecream = {};

I don’t know why. As soon as I find out I’ll be sure to inform you.

As we’ve added a file to the client directory, be sure to update
<div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client/package.js </pre></div> so it included the new file:

enyo.depends( "core.js", "views" );

Translations Remember ““_sipAccount”.loc()” in our workspace.js file? xTuple has great internationalization support and it’s easy to use. Just create the directory and file <div class="highlight"><pre>/path/to/xtuple-extensions/source/sip_account/client/en/strings.js </pre></div> and in it put key-value pairs for labels and their translation, like this:

(function () { "use strict"; var lang = XT.stringsFor("en_US", { "_sipAccount": "Sip Account", "_uri": "Sip URI", "_displayName": "Display Name", "_sipPassword": "Password" }); if (typeof exports !== 'undefined') { exports.language = lang; } }());

So far I included all the labels I used in my Sip Account form. If you write the wrong label (key) or forget to include a corresponding key-value pair in strings.js, xTuple will simply name your lable “_labelName”, underscore and all.

Now build your extension and start up the server:

$ cd /path/to/xtuple $ ./scripts/build_app.js -d dev -e ../xtuple-extensions/source/sip_account $ node node-datasource/main.js

If the server is already running, just stop it and restart it to reflect your changes.

Now if you go to Setup > User Accounts and click the “+” button, you should see a nice little addition to the form with a ‘Sip Account’ divider and three new fields. Nice, eh?

Categories: Elsewhere

Steve Kemp: The selfish programmer

Planet Debian - Fri, 25/07/2014 - 15:16

Once upon a time I wrote a piece of software for scheduling the classes available to a college.

There was a bug in the scheduler: Students who happened to be named 'Steve Kemp' had a significantly higher chance (>=80% IIRC) of being placed in lessons where the class makeup was more than 50% female.

This bug was never fixed. Which was nice, because I spent several hours both implementing and disguising this feature.

I'm was a bad coder when I was a teenager.

These days I'm still a bad coder, but in different ways.

Categories: Elsewhere

Code Karate: Drupal 7 Fieldable Panels Panes

Planet Drupal - Fri, 25/07/2014 - 14:10
Episode Number: 159

The Fieldable Panels Panes module allows you to create re-usable and fieldable entities that can easily be dropped into Panels pages. This can be useful if the traditional Add Content panes inside Panels is too limiting for you. This also allows using fields (which are translatable) for your Panels content.

In this episode you will learn:

Tags: DrupalEntitiesPanelsDrupal 7Site BuildingDrupal Planet
Categories: Elsewhere

Wouter Verhelst: Multiarchified eID libraries for Debian

Planet Debian - Fri, 25/07/2014 - 13:44

A few weeks back, I learned that some government webinterfaces require users to download a PDF files, sign them with their eID, and upload the signed PDF document. On Linux, the only way to do this appeared to be to download Adobe Reader for Linux, install the eID middleware, make sure that the former would use the latter, and from there things would just work.

Except for the bit where Adobe Reader didn't exist in a 64-bit version. Since the eid middleware packages were not multiarch ready, that meant you couldn't use Adobe Reader to create signatures with your eID card on a 64-bit Linux distribution. Which is, pretty much, "just about everything out there".

For at least the Debian packages, that has been fixed now (I still need to handle the RPM side of things, but that's for later). When I wanted to test just now if everything would work right, however...

... I noticed that Adobe no longer provides any downloads of the Linux version of Adobe Reader. They're just gone. There is an ftp.adobe.com containing some old versions, but nothing more recent than a 5.x version.

Well, I suppose that settles that, then.

Regardless, the middleware package has been split up and multiarchified, and is ready for early adopters. If you want to try it out, you should:

  • run dpkg --add-architecture i386 if you haven't yet enabled multiarch
  • Install the eid-archive package, as usual
  • Edit /etc/apt/sources.list.d/eid.list, and enable the continuous repository (that is, remove the # at the beginning of the line)
  • run dpkg-reconfigure eid-archive, so that the key for the continuous repository is enabled
  • run apt-get update
  • run apt-get -t continuous install eid-mw to upgrade your middleware to the version in continuous
  • run apt-get -t continuous install libbeidpkcs11-0:i386 to install the 32-bit middleware version.
  • run your 32-bit application and sign things.

You should, however, note that the continuous repository is named so because it contains the results of our continuous integration system; that is, every time a commit is done to the middleware, packages in this repository are updated automatically. This means the software in the continuous repository might break. Or it might eat your firstborn. Or it might cause nasal daemons. As such, FedICT does not support these versions of the middleware. Don't try the above if you're not prepared to deal with that...

Categories: Elsewhere

Wunderkraut blog: Healthy sprinting

Planet Drupal - Fri, 25/07/2014 - 11:42

How long can we last on pastry and coffee? It’s time to start taking our sprint nutrition seriously

Of all the activities I take part in the Drupal community, sprinting is my favourite. Coming together with new and old friends to push forwards is a great feeling. Many events around the world are realising the power of sprinting and working hard to accommodate them.

But every sprint I go to I feel completely drained. I feel like I need a holiday after a week long sprint. Part of this is down to diet. Refined sugar, pizza, and caffeine is a short term solution to a long term problem. Quickly absorbed into the bloodstream, they give you a quick high, followed by an unavoidable crash.

In terms of actual nutrients, in refined sugar there is only one: the above mentioned sucrose. It makes up 99.9% of the product. There are no vitamins, minerals, trace elements, fiber, water, protein, fat, or anything else. Nutrients such as chromium, manganese, zinc, magnesium, and copper have been lost in the refining process. For that reason, it has been said that sugar provides “empty calories.”

Annemarie Colbin - SUGAR! Delicious and Deadly

By the second day of a conference, hackathon, or sprint. I need a coffee and pastry before I can start looking and thinking straight. It’s a non-stop cycle, and that’s exactly what most sprint venues provide.

Time to kick the habit

We need to start being more responsible over our bodies and minds and need to ask our kind hosts to be more responsible. It may be a sprint, but life is a marathon. Let’s replace the coffee, pizza, and donuts with healthier options.

Boost your brain powerB1, B2, B3, B5, B12, Folic Acid.

Essential for energy production, brain and nerve function. Find them in:

  • Broccoli
  • Mushrooms
  • Watercress
  • Tomatoes
  • Asparagus
  • Hazelnuts
  • Cashew nuts
  • Walnuts
Fight the Drupal fluVitamin A, Vitamin C.

Strengthens the immune system – fights infection. Needed for healthy skin, bones, and joints. Works with Vitamin B to produce energy. Find them in:

  • Broccoli
  • Cabbage
  • Strawberries
  • Melons
  • Oranges
  • Grapefruit
  • Mangoes
  • Apricots
Up your moodZinc, Vitamin C.

Helps produce the anti-stress hormone. Aids ability to cope with stress effectively. Find them in:

  • Pecan nuts
  • Almonds
  • Brazil nuts
  • Whole wheat bread
  • Whole wheat pasta
  • Shrimps

I really hope we can raise expectations around sprints and the level of food available.

Wunderkraut cares about Healthy Web Projects making healthy decisions with our clients and with our employees. We favour long term benefits over short term. We aim for sustainable projects instead of exhausting projects.

That's why we're sponsoring the sprint buffet at the Drupalaton sprints. As well as the usual snacks, there will also be a range of healthy foods to help your productivity and happiness. "We care about the Drupal community and all the participants that push Drupal 8 forward.

Drupalaton is the perfect event to kickstart this initiative. Four days of blue skies, clear water, and sprinting.

Let's sprint healthy!

Categories: Elsewhere

Tim Retout: London.pm's July 2014 tech meeting

Planet Debian - Fri, 25/07/2014 - 09:36

Last night, I went to the London.pm tech meeting, along with a couple of colleagues from CV-Library. The talks, combined with the unusually hot weather we're having in the UK at the moment, combined with my holiday all last week, make it feel like I'm at a software conference. :)

The highlight for me was Thomas Klausner's talk about OX (and AngularJS). We bought him a drink at the pub later to pump him for information about using Bread::Board, with some success. It was worth the long, late commute back to Southampton.

All very enjoyable, and I hope they have more technical meetings soon. I'm planning to attend the London Perl Workshop later in the year.

Categories: Elsewhere

DrupalCon Amsterdam: Countdown to Amsterdam - Shaping The Sessions After Selection

Planet Drupal - Fri, 25/07/2014 - 08:30

Business track chair Steve Parks writes on the work being done to develop the session content for DrupalCon between session selection and the event itself.

It seemed to happen in the blink of an eye. DrupalCon Austin finished, and within a week the window for submitting sessions for Amsterdam closed. After that, the track chairs had just two weeks to review and assess hundreds of submissions to sift them down to just 13 sessions per track-- and we all had day jobs to do too!.

Although selection is now complete, the work to make DrupalCon great isn’t over. The track chairs (and of course the Drupal Association staff) are still devoting considerable time each week until DrupalCon is actually over.

Feedback

Firstly, we committed to providing detailed feedback to anyone whose proposed session wasn’t selected. In the case of the business track, we went into quite a bit of detail providing tips about what could get each session selected in future. We also encourage new speakers, or those with new talks, to deliver them at DrupalCamps first to get practice.

Presentation Coaching

We offer all selected speakers presentation coaching, and some accept. In these cases Emma-Jane Hogbin works with them to hone their skills and their presentation so that it is ready for the DrupalCon stage. It can be pretty daunting to suddenly have hundreds of smart community members as your audience, especially when many of them will also have expertise in the subject of your talk, so having this coaching can really pay off.

Content Coaching

As track chairs we work with many of the speakers on each track to help them develop the content of their presentation for DrupalCon. This is partly to help ensure the talk is pitched at the right level and contains valuable information, and partly so it can add to previous similar talks rather than repeat them. We also help refine the session titles and descriptions so that delegates will want to choose to go to the session.

Scheduling

There are a range of room sizes available, and 3 days of conference. One of our next jobs is to guesstimate how popular each session will be and put it in an appropriately-sized room-- while also scheduling it at a suitable time. This means considering any requests from the speakers, avoiding clashes between sessions that complement each other, and placing more introductory sessions earlier than similar more advanced sessions, as well as a range of other factors. The aim is also to ensure that, as far as humanly possible, most delegates will have something to see in each time-slot regardless of their area of specialism or their level of experience.

Education, not promotion

One of the clauses in the DrupalCon speaker agreement covers a key part of the longstanding culture of DrupalCon that we’re trying to protect as Drupal grows. DrupalCon is not a typical industry sales conference. Audiences don’t want to sit through a product pitch, or a company’s credentials and ego pitch.

The aim of DrupalCon is for education and sharing by the community, for the community. Yes, companies are a vital part of that community - but they are respected based on what they give rather than what they try to get out of DrupalCon. At previous conferences I’ve heard the backchannel backlash against companies overstepping this line. Sales-y sessions are bad for delegates, bad for DrupalCon’s future, and even bad for the company concerned.

As track chairs, that means that we’re alert to sessions that may risk being a little too promotional, and we’ll chat to the speakers concerned (It was also a factor considered in the session selection, as a first filter). We review the slide decks in advance of the conference.

If you feel that any sessions on the business track this year are too promotional, I’d appreciate you letting me know, and I’ll raise it for discussion with the Drupal Association.

Getting Excited

Finally, there is still time for us as track chairs to get excited about the coming conference. I’ve now booked my ticket and my hotel - and can’t wait to land in Amsterdam at the end of September and see all the work come together.

See you there!

Categories: Elsewhere

NEWMEDIA: DrupalCamp Colorado 2014: Large Scale Drupal

Planet Drupal - Fri, 25/07/2014 - 05:26
DrupalCamp Colorado 2014: Large Scale DrupalWith less than a week until the camp, here is a preview of what to expect from our team!

Everyone here at NEWMEDIA is extremely enthusiastic about this year's DrupalCamp Colorado, which will be held on August 1st-3rd in Denver. This year’s theme for the camp is “Large Scale Drupal” where the focus is on how  larger organizations can become more collaborative with the Drupal community by pooling ideas and resources together to solve common issues they are facing. There will be a wide variety sessions this year, six of which will be presented by members of NEWMEDIA. We are also very excited about being a Platinum sponsor.

Drupal 8 Module Development: Just the Basics

Start off this years DrupalCamp Colorado right and jump into Drupal 8 module development.  Brandon Williams  will cover the basics of Symphony and the Drupal 8 module , including a review of what has replaced some of the most common hooks from D7. Brandon is an advocate for learning and change and in the technological world we experience that invariably. While Drupal 7 will be the best option for the short-term, it is never too early to dive in to D8 as he describes in why I love D8!

Jenkins 101: A Drupal Perspective

Want to know more about Jenkins from a Drupal perspective and have a better understanding on how Jenkins can be applied to multiple processes? Then you should join Brandon in his second session that will introduce Jenkins from a Drupal perspective and how it has been proven to be beneficial within NEWMEDIA. As a community we can take this knowledge and continue the conversation to help emerge the tools to permit everyone to become more effective.

Securing customers credit card data

Security for your clients credit cards is now a necessity in today's growing eCommerce market. Rick Manelius  will review all of the parts of the standard that apply to Drupal along with providing efficient advice on how to best reduce one's risk when processing credit cards. As the amount of eCommerce transactions continues to rise it becomes even more critical to support every part in the system. If you would like more information on PCI compliance for Drupal  visit DrupalPCICompliance.org you can also download the free, community sponsored white paper.

The SCSSy Wild West: Partial Organization for a Complete Site

Take a look at Tim’s blog Partial to Partials: BoF Recap for a recap of last years session about the organization of partials.This year Tim Whitney  will go over a partial layout strategy for all scales of Drupal and non Drupal. Going over common pain points of SCSS partials and how to alleviate them while including approaches to help make life a little easier for everyone.

Integration Testing with KitchenCI & Multiple Provisioners

“Works on my machine” is no longer an acceptable reason for a Drupal site to not perform as expected across multiple environment (i.e. production, staging, development, and local development). This is particularly important as projects become larger, more complex, and have stringent requirements on performance, uptime, and security. Kevin Bridge's presentation will start with the basics of “Infrastructure as Code” and then quickly ramp up to review how to use provisioning tools and integration tests to ensure your infrastructure is achieving the desired state.

Intro to Frontend Ops

Discover the tools that help frontend developers stay consistent as they develop their drupal themes. This discussion from Ryan McVeigh will focus on gruntjs and bower and will also discuss Gulp JS, Phantomjs, PageSpeed, and Slimer JS. You will be able to watch some of his pre-recorded demos of the tools in action. Come and join in on the  discussion and see how the use of these various tools can contribute to your routine work day.

Come Join Us!

There is still time to sign up for this weekend and better yet it is free with the option to donate.  Any registration contributions beyond DrupalCamp Colorado’s  budget target will be donated to 3 charities: The Ada Initiative, Code.org, and Electronic Frontier Foundation.  This weekend has a  great full-day Training Day on August 1st and will be offering three separate classes you can pay and sign up for.

Categories: Elsewhere

Pages

Subscribe to jfhovinne aggregator