Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 11 min 43 sec ago

DrupalCon News: Planning for Friends and Family at DrupalCon

Tue, 06/16/2015 - 17:59
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpAs part of our extended Drupal family, many Drupalistas bring their spouse, significant other, friend or children along to DrupalCon. As we know, the Con is always jam-packed with sessions, BoFs and sprints that keep us busy; Barcelona will be no different. After the Drupalers have drained our brains at the convention center, we jaunt off to group dinners, sponsor parties or the coder lounge to continue getting our Drupal on. /p/div/div/div

ThinkShout: A Tale of Two Devsigners

Tue, 06/16/2015 - 14:00
pIt’s June, which means a href= is just around the corner so, naturally, we’ve got design on the brain. What’s Devsigner? Well, I’m glad you asked. Devsigner is a conference held here in the Pacific Northwest geared towards front end developers and development-minded designers. Sessions focus on the relationship between design and web development, bridging the gap that separates the design from the code. The math looks like this: developer + designer = devsigner. /p pThinkShout’s own devsigners a href= Riggs/a (User Experience Lead) and a href= Paxton/a (Front End Engineer), will be speaking at this conference at the end of the month. I sat down with Josh and Eric to learn a little bit more about their design process, and how we work with our nonprofit clients to ensure that their sites don’t just work, but that they also deliver a fantastic user experience./p pstrongemYou two make up the dynamic design duo here at ThinkShout. What do your respective roles entail? How do you leverage your different skill sets?/em/strong/p pstrongJosh/strong: My role as the UX lead right now is handling all aspects of user experience and visual design. I’m responsible for interpreting site maps and requirements, plus things like client/user needs and creating a user interface out of that. That starts with wireframing and ends with a visual design layer./p pstrongEric/strong: My role as Front End Engineer is very much in the implementation phase. Though I do advise in the discovery and budgeting phase, just so we can be sure that we can actually implement what the client wants. It’s nice because in the past, before joining the ThinkShout team, I’d done the whole gamut. From the requirements gathering phase to wireframing, and then the implementation. Here at ThinkShout, I’ve found my sweet spot. I do occasional wireframing, but I get to focus on lots of implementation. I also implement Josh’s designs. I write a lot of Javascript and a href=, basically./p pstrongJosh/strong: Eric is like the alchemist. He takes the metals - the designs from me - and turns them into websites. There is actually a large spectrum in between where my responsibilities stop and Eric’s begin. We still talk about things like, how do we go from an idea being on a screen, to that idea being a functioning website? We’re constantly thinking about how to best utilize our respective skillsets, always reevaluating our process to improve upon it./p pstrongemWhat’s a recent project that you’ve really enjoyed working on?/em/strong/p pstrongEric/strong: a href= SPLC (Southern Poverty Law Center) microsite/a. I thought that was very well done. Josh did a lot of the front end work on that and I came in and did the site optimization, which is what I’ll be talking about at Devsigner. I thought that went really smoothly because at that time, all the work he’d done in the browser went directly to implementation. We were able to take exactly what he’d designed and a href= build off of /aa href= pimg src=/assets/images/blog/devsigner_0.png alt=devsigner_0/p pstrongemCan you talk a little bit about what the design process for the SPLC microsite was like, Josh?/em/strong/p pstrongJosh/strong: We happened to be working on that right around the same time as I was doing wireframes for the upcoming a href= main site that we’re redesigning. We were already doing a lot of thinking about their content and what their needs were. Because the a href= Bridge to the Ballot/a movie was coming out on the anniversary of the Selma March, we wanted to have this ready to go in time for that day. There was no way we were going to launch the whole SPLC site along with it - we were too early in development for that - so we decided to split that project up and give them a campaign microsite that would be easy to build while we continued to work on their main site. /p pA lot of that meant working with their team to define their content needs. I began with basic wireframes in a href=, and uploaded them into a href=http://www.invisionapp.comInvision/a to give them interactivity. As SPLC came up with more fidelity to what their needs were, we solidified the visual designs. Luckily, they already had a lot of assets that their really great internal design team had created for the movie, so I was able to go off of that style. I took their visual style and applied it to the wireframes and at that point, I went to Eric for a consultation and said, quot;Ok, if we’re going to build this in a href=, what’s the best way to do this as far as the architecture goes?quot; Eric was a huge help in regards to file structure. He wrote a great rake script to automate all the Jekyll, Sass, and Javascript components. That’s when I jumped in and rebuilt what I’d done in Sketch, and added more fidelity with HTML and Sass. I then passed it onto to Eric so he could do his unicorn magic./p pimg src=/assets/images/blog/devsigner_1.png alt=devsigner_1/p pstrongEric/strong: And that’s a nice part about where our skills overlap: we can get closer to what we want. He’s a better designer than I am. My strengths lie in the code. I’ve designed when I had to, but it’s not my forte, so it’s nice to have Josh’s expertise. So these skill sets compliment each other. I feel comfortable handing over my implementation to design and saying, quot;Hey, can you polish the nav? Or the design?quot; Things like that./p pstrongemWhat design trends do you want to see more of? Or less of?/em/strong/p pstrongEric/strong: I think a href= design/a is getting boring. I’m starting to see a little bit more texture in the things we’ve done. Like patterns, not just flat design for the sake of flat design. There’s texture strategically used to make things look better. For instance, in the a href= Area Food Bank of Texas/a site, there’s a bit of a pattern in the footer. It’s not just a flat blue background with text. I really like patterns that are used to call out different sections of a design. It adds to it and brings something out of the page. It used to just be that admin interfaces were this flat. But now everything reflects that. Lots of rectangles. I personally like shapes and textures and patterns./p pimg src=/assets/images/blog/devsigner_2.png alt=devsigner_2/p pstrongJosh/strong: It’s tricky to know when to add life to what’s a very flat trend right now. I come from the old school world of web design, which was about how cool can you make your shadows look in Photoshop, how three-dimensional can you make things appear. Now that’s kind of like wearing skinny jeans in the late nineties, when you wouldn’t be caught dead wearing them. Or neon colors. So I think what’s happening is that it’s not emjust/em that flat design is popular. If you look at other design mediums, like automotive or architecture, there’s a phase with extreme ornate elements. You know, crazy fins, details, lights, every car had a custom badge. All that stuff. And then you have the modern era after that where everything gets streamlined and simplified. It’s more about the function over the form, and the function drives the form. You see the opposite in the Victorian era. Go walk along the St. Johns bridge and look up at a lamp. You’ll see these ornate, twisted little embellishments along the lamps. But the purpose of a lamp is to provide light. Those embellishments do nothing to support the function. They’re just there to make it look pretty. /p pI think we’re seeing a lot of that in digital design as it matures. We’re getting rid of the stuff that doesn’t support the function and focusing more on the emintent/em of the users. While we’re taking that ornate-ness out of it, we’re also adding a lot more micro-interactions and animations. Things that actually help you do what you’re there to do. At first, I was kind of against that. But now that I think about it as post-modern design for the web, it makes more sense to me./p pstrongemHow do you advise nonprofits on this? Do these same trends benefit nonprofits as much as they do for-profits?/em/strong/p pstrongEric/strong: I think knowing your end user is what determines your path. A lot of nonprofits have similar goals as for-profits when it comes to their websites - they’re trying to tell a story and engage their users. But the main thing is, do the organizational goals reflect what the user is coming there for? For instance, we work with the a href= Conservancy/a. They work to preserve historical buildings in LA. We didn’t just look at them, and then try to make their website look like a pretty building. But we also had this discussion in LA about form versus function. But I wonder, where does that meet in the middle? That’s what I struggle with. Because I do think there’s value in ornate elements like that. They set a mood. So I think that’s part of function - that ornateness sets the mood you want to present to your users to help them feel the connection to the organization’s cause./p pstrongJosh/strong: Nearly every major design phase, whether it be automotive, architecture, art, whatever, there’s always a backlash to those current trends. So there will be backlash to flat web design. It may be a subculture, it may take over. But whenever something gets to be ubiquitous, there’s always someone who wants to do something totally different. It’ll be interesting to see what that is./p pstrongemI feel like that’s the nature of creativity… We see something, we make it part of our process, plus a spark of something new./em/strong/p pstrongEric/strong: We all have things we’re influenced by. To me, Google stands out. They’ve really led in the trends that people are using. There’s a level of depth to their designs that make me feel like I can reach out and grab it. It’s flat in some ways, but yeah, there’s definitely some depth./p pstrongJosh/strong: Yeah, I think Google’s done a really great job. And you can see this happening in the app world. The current trend is also getting ubiquitous. /p pstrongemDevsigner is at the end of the month and you both are leading your own sessions. Can you tell us a bit about them?/em/strong/p pstrongEric/strong: My session is called quot;Optimization is User Experience.quot; I think this is something everybody can use, which is why it’s listed as a beginner talk. We learn web design, we learn app design, we release these things to the world where we don’t have control over devices and users’ bandwidth, so it’s important to know that this beautiful thing you’ve created can be experienced correctly regardless of what device it’s viewed on./p pstrongJosh:/strong So my session is based on something I’ve noticed. I worked on a lot of projects where there’s limited time, budget, or resources. Maybe there isn’t any resource for stock photography, or there’s just a really small team working on it. I’ve always had to find ways to be creative with what I have and with a small budget. I signed up to speak at a href= Portland/a and I figured this might be a shared struggle and that other people could learn from my experience: how to stay under budget and still come up with a great, workable design. It’s called quot;Ballin’ on a Budget.quot;/p pemWant to dig deeper into design with Josh and Eric and pick their brains? Come to a href=, which takes place during June 27-28 at the Pacific Northwest College of Art in Portland, Oregon. Check out the full session schedule on the Devsigner site. You can also follow Josh and Eric on Twitter at @joshriggs and @epxtn./em/p

InternetDevels: Best Drupal Video Player Modules

Tue, 06/16/2015 - 13:47
div class=field field--name-field-preview-image field--type-image field--label-hiddendiv class=field__itemsdiv class=field__item evenimg src= width=937 height=624 alt=Drupal Video Player Modules //div/div/divdiv class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpGreetings to all who want to add strongvideo integration/strong to their strongDrupal website/strong! a target=_blank href= module development/a never stops, offering us a large number of various modules for working with videos. I have hunted through a huge amount of Drupal video modules for you./pp/ppTo begin with, you need to decide where you want to store your video, how you want to display it, etc./ppLet's discuss the pros and cons of each method. Here we go!/pp/p a href= more/a/div/div/div

KnackForge: Mitigating Apache Internal Dummy Connection issue

Tue, 06/16/2015 - 06:00
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-items id=md1div class=field-item evenpThis is one of the bothering issues we had lately in our project. I'm summarizing the list of causes and possible ways to fix / mitigate the same. So what is Apache's Internal Dummy Connection is all about? a href= Wiki page/a explains it better. See snip below,/p blockquotepWhen the Apache HTTP Server manages its child processes, it needs a way to wake up processes that are listening for new connections. To do this, it sends a simple HTTP request back to itself. This request will appear in the access_log file with the remote address set to the loop-back interface (typically or ::1 if IPv6 is configured). If you log the User-Agent string (as in the combined log format), you will see the server signature followed by (internal dummy connection) on non-SSL servers. During certain periods you may see up to one such request for each httpd child process./p /blockquote h3#1: VirtualHost/h3 pAs mentioned, emApache makes a call to itself/em. If your default VirtualHost is configured to serve dynamic database driven site like Drupal, it will certainly result in increased resource utilization. Changing the same to serve static index.html should make the dummy http request faster and less resource intense. Even if you have directory listing, symbolic links and/or AllowOverriding turned on, it is suggested to disable them./p h3#2: .htaccess Rewrite Rule/h3 pIf default VirtualHost couldn't be changed for some reason, with mod_rewrite you can prevent request hitting the Drupal with rewrite rule. /p/div/div/divmeta itemprop=name content=Mitigating Apache Internal Dummy Connection issue id=md2 /

Mediacurrent: Contrib Committee Status Review for May, 2015

Mon, 06/15/2015 - 22:18
img typeof=foaf:Image src= width=200 height=152 alt=Contrib committee status, June 2015 title=Contrib committee status, June 2015 / pAs with most other Drupal development studios, our May was dominated by DrupalCon. For the first week we were doing final preparations - making sure everything was ready for our booth, adding the final polish to our presentations, and packing for the trip. Needless to say, it was a href= excellent week/a from many perspectives, and we look forward to DrupalCon being in a href= Orleans next year/a./p

Drupal Watchdog: Caffeinated Drupal

Mon, 06/15/2015 - 18:42
div class=field field--article-edit-printtype field-type-list-text field-label-hidden field--rss Column /div div class=field field--article-body field-type-text-long field-label-hidden field--rss pOnce upon a time, I drank coffee purely to wake myself up in the morning or to stay awake during a late night coding marathon. Eventually, I gained an appreciation for the different flavors, smells, and textures to be found in different coffees and brewing methods. That appreciation has grown into a pursuit of the perfect cup of coffee which, while it may never be achieved, provides me with a fun hobby as well as an endless supply of amazing coffee./p pimg src=/sites/default/files/images/web/4.2-CaffeinatedDrupal.png alt= Coffee width=100% class=img-responsive img-thumbnail //p pPerformance tuning a website is another of those endless pursuits wherein you may never actually reach a happy ending./p pIs there such a thing as a emperfectly/em performing website? The answer to that question is much like the perfect cup of coffee: perfection lies in the eye of the beholder. While we may not ever be able to achieve a emperfectlyem performing website, we can certainly define goals for what would be considered a emwell/em performing site. And by precisely measuring aspects of the site’s performance, we can know if our adjustments are moving us in the right direction or not./em/em/p pOf course, when defining performance goals, like any project, it’s best to begin at the beginning. In this case there’s no better place to start than a nice cup of Kenya Peaberry, brewed in a manual pour-over to bring out the amazing citrus fruitiness (with a touch of spice). emMmmm/em, if that’s not nirvana, it sure is close! Now we can jump right in./p h3Defining Performance Goals/h3 p As I mentioned, we need to define emgoals/em in order to know where we’re going with the performance tuning, otherwise we’re likely to get people working on random performance improvements that may or may not meet our business requirements. The more specific the goals, the better. Here are a few ideas to get us going:/p ulliThe front page must load in under emX/em seconds. /liliThe site must support at least emY/em concurrent users. /liliPopular entry points to the site must load in under emZ/em seconds. /li/ulpThe important point here is to create an authoritative list which will get everyone on the same page and understand exactly what they’re working towards. Even if you are a team of one person, this is still a great way to define an endpoint for your (current) performance work./p /div

Microserve: Setting Up Drupal Bootstrap

Mon, 06/15/2015 - 18:02
img typeof=foaf:Image src=;c=73da98521c5d3c03ed69ae37007ffb92 width=760 height=250 alt=Drupal Bootstrap /div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedp class=lead For those looking for a reliable, responsive front-end framework to base their website/drupal theme upon, Twitter Bootstrap can be hard to beat. Luckily there is an existing, contributed theme available to take out the hard work of integrating Bootstrap and Drupal... Well nearly all the hard work./p p class=lead This step by step tutorial hopes to serve as an extension to existing documentation for Drupal Bootstrap and strives to fill in a few blanks and signpost the odd 'gotcha' that can potentially leave the novice banging their head against their monitor. It assumes you already have a decent grasp of the drupal folder structure and a knowledge of LESS CSS preprocessor./p h2 Drupal Bootstrap Theme/h2 p Download the latest version of the Bootstrap Drupal /a href= p Unzip the contents into the sites/all/themes/ folder of your drupal site./p p Copy the folder 'bootstrap_subtheme' and place the copy in the root of your regular emstrongsites/all/themes//strong/em folder (You should now have two separate theme folders 'Bootstrap' and 'bootstrap_subtheme' at the same level in your theme folder structure)./p p Before anything else, rename the 'subtheme' copy to reflect the project you are working on. (for the purposes of this tutorial we'll name ours 'mytheme')/p h2 Bootstrap Editable Source Files/h2 p Bootstrap Drupal Theme provides the core framework to use bootstrap within Drupal, but we still need to include the latest working distribution of the editable bootstrap source files themselves./p p In the future this should be possible using drush, but for now there are two methods for including these files. Either via link to the CDN, which is convenient, but does not give us full editability of LESS files, or by downloading the files to our theme to be used locally. Further info: a href= p We want to choose the second method.../p olli Download the latest distribution of bootstrap from: a href= (Choose the second, 'SOURCE CODE' version.)/li li Download to the root of your new sub_theme (mytheme)./li li Unzip and rename the unzipped folder 'bootstrap'. (Yep this is where it can seem confusing, you will now have a new folder called 'bootstrap' inside your new bootstrap sub_theme)/li li Inside your new subtheme edit the .info file. On the first line change 'name =' value to match your new theme name ('mytheme' in this instance)./li li Now we need to tell the theme which method to use for including the Bootstrap distribution. Towards the bottom of the  .info file, uncomment all lines under the heading 'METHOD 1: Bootstrap Source Files'  (yes, all those JS files.)/li /olh2 LESS Preprocessor Method/h2 p Although you can run a (very restrictive) installation of Bootstrap using standard CSS, it's unlikely you'll want to pass up access to the wealth of in-built variables and mixins available in the core LESS files, so now we need to choose which method of LESS compilation we want to use./p p If you wish to install and use a local LESS compiler, you can leave the .info file set to use emstrong/css/style.css/strong/em and then set your preprocessor to compile all LESS files to this file./p p *I recommend however using the Drupal LESS module, to let Drupal do the compiling for you in browser. For this method, change the 'Stylesheets' entry in .info to point directly to emstrong/less/style.less/strong/em/p p For this method to work, you will need to download and install the drupal Less module here:br /a href= p Secondly download the Preprocessor library (lessphp) from:br /a href= p to gt;emstrong /sites/all/libraries//strong/em unzip and rename the folder to 'lessphp'/p p Enable the LESS module (if you haven't already) and go to emstrong/admin/config/development/less/strong/em in the Drupal admin menu./p p Choose 'less.php' as your LESS engine and turn on 'Developer Mode'. (This will ensure LESS files are recompiled on each page load.) - *Make sure this is turned OFF before site goes live./p h2 Turn On The Theme/h2 p If you haven't already, enable your sub_theme and make it the default theme./p p Disable the main Bootstrap theme (it doesn't need to be enabled for the subtheme to work.)/p p Clear your drupal cache and you should be good to go./p h2 JQuery Update/h2 p For boostrap to run properly, you will have to have JQuery installed and running at atleast version 1.7. Make sure you have the JQuery Update module installed and set to 1.7 or above. (I've run bootstrap on 1.10 without problems.) /p p You can change the version on the JQuery Update config page, or specifically for the theme, you can switch the version on your bootstrap sub_theme's theme settings page. /p p *If you have selected a version of JQuery 1.7 or above and you're still getting drupal errors complaining that Bootstrap requires this version, you can choose to 'Suppress jQuery version error message' under Advanced on the sub_theme settings page. /p h2 Missing Variable Errors?/h2 p Sometimes the Drupal Bootstrap theme can fall out of sync with the latest Bootstrap version./p p If after enabling the subtheme you get lots of red errors about missing variables, do the following:/p p Inside your subtheme:/p p Make a COPY of the latest variables.less from the distribution files (strongmytheme/bootstrap/less/variables.less/strong) and use it to REPLACE the version in your theme's custom files (strongmytheme/less/variables.less/strong)/p p This should stop bootstrap looking for out of date variables./p h2 Page Templates/h2 p While you 'could' copy the page.tpl.php and html.tpl.php templates from the Drupal core and set about adding all the necessary bootstrap classes and regions to them, It makes much more sense to start off by making strongcopies/strong of the versions supplied inside the main Bootstrap parent theme, where most of the ground work has been done for you./p p You can find templates at: strongbootstrap/theme//strong (where 'bootstrap' is the main parent theme installed from the page and html templates are inside the 'system' sub folder./p p Copy the templates you need, to you sub_theme's template folder. (Create one if there isn't one already.)/p h2 Bootstrap LESS Files/h2 p In your sub_theme, you will initially have the following LESS files:/p ulli strongbootstrap.less /strongbr / Never edit this. It's only purpose is to import all of bootstrap's core less files - the integral part of the framework./li li strongoverrides.less/strongbr / You will sometimes want edit some values in this file. It mainly contains drupal specific resets and 'overrides'./li li strongvariables.less/strongbr / This is where you can change the values of default bootstrap variables to set site wide typography, form styles, grid styles, branding etc. VERY USEFUL/li li strongstyles.less/strongbr / This is initially empty other than a few import declarations. This like a normal style.css or .less file, is where you will put the bulk of your project specific custom LESS code./li li strongheader.less, content.less, footer.less/strongbr / I don't personally tend to find any use for these region specific files. These can safely be deleted if you don't intend to use them. If you do delete them, also make sure to delete their import declarations from the top of 'style.less'./li /ulh2 Custom Variables/h2 p You could create a new LESS file for your own custom variables, but I find a lot of my custom variables can be additions to existing bootstrap variable structures (for instance there is already a strong@brand-primary/strong color value in strongvariables.less/strong and I nearly always add a strong@brand-secondary/strong color), so it makes sense to include them in the same file and flow. So I add my variables to the existing file, making one consolidated, semantic file./p h2 Custom Mixins/h2 p Mixins are a little different. You can just include them in style.less. You can also include them in the bottom of the existing overrides.less file. (You can include them anywhere really, but as you will often want to use variables within your mixins, it's advisable to call them strongafter/strong all variables have been imported from bootstrap and your own custom files.) I think the neatest way is to create new custom LESS file and keep all the custom mixins separate. For instance, on my current project, i've created a strong‘custom-mixins.less’/strong file and imported it into strongstyle.less/strong straight AFTER the existing imports like so:/p pre class=prettyprint span style=line-height: 1.6em;// Bootstrap library. @import 'bootstrap.less'; // Base-theme overrides. @import 'overrides.less'; // Theme specific. @import 'custom-mixins.less';/span/prep Wait!? Where was strongvariables.less/strong in those import declarations? /p p Well, one thing to be careful of is that you don't want to import the same file into more than one other less file directly. This would in essence mean the entire file would be imported twice. So because strongvariables.less/strong has already been imported into strongoverrides.less/strong, it's content will be inherited through importing strongoverride.less/strong into the above file./p p Here's a diagram to try and better explain the bootstrap .less inheritance flow, mentioned above: /p p img alt= src= //p h2 In Conclusion/h2 p Hopefully these tips will be of use and help navigate the initially daunting landscape of getting Drupal and Bootstrap to play nice together./p p This guide is based on the worflow I have personally found most logical and efficient, but if you have other methods or further tips to 'share with the class', feel free to leave a comment below./p p My closing 'top tip' to developing with Bootstrap, Drupal or otherwise is to always have the a href= site/a open in a tab, for easy reference of it's existng grid structure, variables, mixins, js plugins and info./p /div/div/diva href=/about/martin-whiteimg typeof=foaf:Image src= alt=Martin White#039;s picture title=Martin White#039;s picture //aa href=/about/martin-white title=View user profile. class=usernameMartin White/a

Acquia: Build Your Drupal 8 Team: The Forrester Digital Maturity Model

Mon, 06/15/2015 - 16:46
figure class=field-item even rel= resource= class=field-item even div id=styles-2 class=styles styles-field-image styles-style-scale_width_280 styles-container-image styles-preset-scale_width_280 img typeof=foaf:Image src= alt= title= //div !-- render the title tag as caption -- /figure div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div property=content:encoded class=field-item evenpimg src=/sites/default/files/blog/drupal8teamillo.png width=620 height=620 //p pIn business, technology is a means to an end, and using it effectively to achieve that end requires planning and strategy. /p pThe Capability Maturity Model, designed for assessing the formality of a software development process, was initially described back in 1989. The Forrester Digital Maturity Model is one of several models that update the CMM for modern software development in the age of e-commerce and mobile development, when digital capability isn't an add-on but rather is fundamental to business success. The model emphasizes communicating strategy while putting management and control processes into place. /p pOrganizations that are further along within the maturity model are more likely to repeatedly achieve successful completion of their projects./p pLet's take a look at the stages of this model, as the final post in our a href=/blog/build-your-drupal-8-team target=_blankBuild Your Drupal 8 Team/a series./p pHere are the four stages: /p pstrongStage 1/strong is ad hoc development. When companies begin e-commerce development, there is no defined strategy, and the companies' products are not integrated with other systems. Most products are released in isolation and managed independently./p pstrongStage 2/strong organizations follow a defined process model. The company is still reactive and managing projects individually, but the desired digital strategy has been identified./p pstrongStage 3/strong is when the digital strategy and implementation is managed. An overall environment supportive for web and e-commerce development exists, and products are created within the context of that environment./p pIn strongStage 4/strong, the digital business needs are integrated. Products aren't defined in isolation, but rather are part of an overall strategic approach to online business. The company has a process for planning and developing the products and is focused on both deployment and ongoing support./p pThe final capability level, strongStage 5/strong, is when digital development is optimized. Cross-channel products are developed and do more than integrate: they are optimized for performance. The company is able to focus on optimizing the development team as well, with continuous improvement and agile development providing a competitive advantage./p pUnderstanding where your company currently finds itself on the maturity scale can help you plan how you will integrate and adapt the new functionality of Drupal 8 into your development organization. /p pIf you are an ad hoc development shop, adopting Drupal 8 and achieving its benefits may be very challenging for you. You may need to work with your team to move up at least one maturity level before you try to bring in the new technology. /p pIn contrast, if your team is at stage 5, you can work on understanding how Drupal 8 will benefit not just your specific upcoming project, but also everything else that is going on within your organization./p pstrongResources:/strong/p ulliA comprehensive SlideShare presentation on a href= target=_blankDigital Maturity Models/a. /li liA a href= target=_blankblog post/a by Forrester's Martin Gill that mentions the Digital Maturity Model in the context of digital acceleration. /li /ul/div /div /div div class=field field-name-field-tags field-type-taxonomy-term-reference field-label-inline clearfix div class=field-labelTags:nbsp;/div div class=field-items div rel= class=field-item evena href=/resources/acquia-drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=acquia drupal planet/a/div /div /div span property=dc:title content=Build Your Drupal 8 Team: The Forrester Digital Maturity Model class=rdf-meta element-hidden/span

Annertech: Web Development on Fire? Smoke testing a Drupal Website

Mon, 06/15/2015 - 12:57
span class=field field-node--title field-name-title field-type-string field-label-hiddenWeb Development on Fire? Smoke testing a Drupal Website/span div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itempDocumenting code 10 years ago was always something that I wanted to do, but, let's face it: clients didn't give a damn, so unless you did it for free, it rarely happened. And I felt very sorry for the developer that had to fix any bugs without documentation (yes, even my code contains bugs from time to time!)./p/div /div /div

Drupal core announcements: Recording from June 12th 2015 Drupal 8 critical issues discussion

Mon, 06/15/2015 - 11:56
pIt came up multiple times at recent events that it would be very helpful for people significantly working on Drupal 8 critical issues to get together more often to talk about the issues and unblock each other on things where discussion is needed. While these do not by any means replace the issue queue discussions (much like in-person meetings at events are not), they do help to unblock things much more quickly. We also don't believe that the number of or the concrete people working on critical issues should be limited, so we did not want to keep the discussions closed. After a href= second meeting last week/a, here is the recording of the third meeting from today in the hope that it helps more than just those who were on the meeting:/p !--break--!--break--piframe width=600 height=338 src= frameborder=0 allowfullscreen/iframe/p pUnfortunately not all people invited made it this time. If you also have significant time to work on critical issues in Drupal 8 and we did not include you, a href= me know as soon as possible/a./p pThe issues mentioned were as follows:/p pAlex Pottbr / Rebuilding service container results in endless stampede: a href= title= / Twig placeholder filter should not map to raw filter: a href= title= pFrancesco Placellabr /;status[]=Openamp;priorities[]=400amp;version[]=8.xamp;component[]=entity+systemamp;component[]=field+systemamp;component[]=language+systemamp;component[]=content_translation.moduleamp;component[]=language.moduleamp;component[]=views.moduleamp;issue_tags_op=%3Dbr / FieldItemInterface methods are only invoked for SQL storage and are inconsistent with hooks: a href= title= pLee Rowlandsbr / Make block context faster by removing onBlock event and replace it with loading from a BlockContextManager: a href= title= pFrancesco Placellabr / FieldItemInterface methods are only invoked for SQL storage and are inconsistent with hooks: a href= title= pAlex Pottbr / Rewrite \Drupal\file\Controller\FileWidgetAjaxController::upload() to not rely on form cache a href= title= pGábor Hojtsybr / Twig placeholder filter should not map to raw filter: a href= title= pDaniel Wehnerbr / drupal_html_id() considered harmful; remove ajax_html_ids to use GET (not POST) AJAX requests: a href= title= pFrancesco Placellabr / Node revisions cannot be reverted per translation: a href= title= /;status[]=Openamp;priorities[]=400amp;version[]=8.xamp;issue_tags_op=%3Damp;issue_tags=D8+upgrade+path/p pDaniel Wehnerbr / SA-CORE-2014-002 forward port only checks internal cache: a href= title= pFrancesco Placellabr / Nat: it would be good to have your feedback on the proposed solution the translation revisions issue aside from its criticality (see a href= title= and following)/p pFabian Franzbr / [PP-2] Remove support for #ajax['url'] and $form_state-setCached() for GET requests: a href= title= / Condition plugins should provide cache contexts AND cacheability metadata needs to be exposed: a href= title= / Make block context faster by removing onBlock event and replace it with loading from a BlockContextManager: a href= title= pAlex Pottbr / [meta] Identify necessary performance optimizations for common profiling scenarios: a href= title= pNathaniel Catchpolebr / Core profiling scenarios: a href= title= / Node::isPublished() and Node:getOwnerId() are expensive: a href= title= / And User:getAnonymousUser() takes 13ms due to ContentEntityBase::setDefaultLangcode() (a href= title= is similar./p

Jim Birch: Using CKFinder to organize image uploads by Content type in Drupal 7

Mon, 06/15/2015 - 11:00
a href=;utm_medium=drupal-planetamp;utm_campaign=node/38 title=Using CKFinder to organize image uploads by Content type in Drupal 7img src= width=620 height=465 alt=Lego Uncle Jim on the Bloomingdale Trail title=Lego Uncle Jim on the Bloomingdale Trail //abr pAs you may have noticed, /sites/default/files can quickly become a pretty busy place in your Drupal installation.  When creating image or file fields, we can add folders in the Drupal UI to organize the uploads.  But when we allow users to upload using the CKEditor WYSIWYG Editor, we have to work a bit harder to organize those uploads./p pI am currently working on a project where we want to organize the uploads by content type.  Certain users have access to certain content types.  We want to be able to keep the separation going with the files.  Our goal is to have the wysiwyg uploads in the same folder as the featured image field on each content type, which is in /sites/default/files/[content-type]./p pWhat I quickly learned, was that IMCE is great in so many ways, and part of our normal Drupal install, but there is no obvious way to do this.  You can use IMCE to organize in a variety of different ways, like php date based folders and user id folders.  You could even have a roles based system, by creating an IMCE profile per role.  But I couldn't figure out a way to organize by field, or Content Type./p pa href= to the rescue.  CKFinder is a premium file manager plugin for CKEditor.  When integrated with the a href= Drupal Module/a, both can be customized right in the Drupal UI./p pa href=;utm_medium=drupal-planetamp;utm_campaign=node/38 title=Using CKFinder to organize image uploads by Content type in Drupal 7Read more/a/p

PreviousNext: How to index panelizer node pages using Drupal Apache Solr module

Mon, 06/15/2015 - 09:44
pApache Solr Search is a great module for integrating your Drupal site with the powerful Apache Solr search tool. Out of the box it can index nodes and their fields, but Panelizer pages won't be indexed. In this post I show how you can get around this by indexing the rendered HTML of a panelizer node page./p span property=dc:title content=How to index panelizer node pages using Drupal Apache Solr module class=rdf-meta element-hidden/span

Web Omelette: Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface

Mon, 06/15/2015 - 09:00
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIn this article we are going to look at how to use the a href=!lib!Drupal!Core!Config!Entity!ThirdPartySettingsInterface.php/interface/ThirdPartySettingsInterface/8ThirdPartySettingsInterface/a to add some extra data to existing configuration entities. For example, if you ever need to store some config together with a node type or a taxonomy vocabulary, there is a great way to do so using this interface. Today we are going to see an example of this and add an extra field to the menu definition and store the value in this way./p pThere are a number of steps involved in this process. First, we need to alter the form with which the entity configuration data is added and saved. In the case of the menu entity there are two forms (one for adding and one for editing) so we need to alter them both. We can do something like this:/p precode/** * Implements hook_form_alter(). */ function my_module_form_alter(amp;$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { if ($form_id === 'menu_add_form' || $form_id === 'menu_edit_form') { my_module_alter_menu_forms($form, $form_state, $form_id); } } /code/pre pInside this general codehook_form_alter()/code implementation we delegate the logic to a custom function if the form is one of the two we need. Alternatively you can also implement codehook_form_FORM_ID_alter()/code for both those forms and delegate from each. That would limit a bit on the function calls. But let's see our custom function:/p precode/** * Handles the form alter for the menu_add_form and menu_edit_form forms. */ function my_module_alter_menu_forms(amp;$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { $menu = $form_state-gt;getFormObject()-gt;getEntity(); $form['my_text_field'] = array( '#type' =gt; 'textfield', '#title' =gt; t('My text field'), '#description' =gt; t('This is some extra data'), '#default_value' =gt; $menu-gt;getThirdPartySetting('my_module', 'my_text_field'), '#weight' =gt; 1 ); if (isset($form['links'])) { $form['links']['#weight'] = 2; } $form['#entity_builders'][] = 'my_module_form_menu_add_form_builder'; } /code/pre pIn here we do a couple of things. First, we retrieve the configuration entity object which the form is currently editing. Then, we define a new textfield and add it to the form. Next, we check if the form has menu links on it (meaning that it's probably the edit form) in which case we make its weight higher than one of our new field (just so that the form looks nicer). And last, we add a new code#entity_builder/code to the form which will be triggered when the form is submitted./p pThe codegetThirdPartySetting()/code method on the entity object is provided by the codeThirdPartySettingsInterface/code which all configuration entities have by default if they extend from the codeConfigEntityBase/code class. With this method we simply retrieve a value that is stored as emthird party/em for a given module (codemy_module/code in this case). It will return NULL if none is set so we don't even need to provide a default in this case./p pLet us now turn to our code#entity_builder/code which gets called when the form is submitted and a href= responsible for mapping data to the entity/a:/p precode/** * Entity builder for the menu configuration entity. */ function my_module_form_menu_add_form_builder($entity_type, \Drupal\system\Entity\Menu $menu, amp;$form, \Drupal\Core\Form\FormStateInterface $form_state) { if ($form_state-gt;getValue('my_text_field')) { $menu-gt;setThirdPartySetting('my_module', 'my_text_field', $form_state-gt;getValue('my_text_field')); return; } $type-gt;unsetThirdPartySetting('my_module', 'my_text_field'); } /code/pre pdiv id=block-inject-2 class=block-inject block-inject-2/divdiv class=clearfix/divpInside we check if our textfield was filled in and set it to the emthird party setting/em we can access from the config entity object that is passed as an argument. If the form value is empty we reset the emthird party setting/em to remove lingering data in case there is something there./p pAnd that's pretty much it for the business logic. We can clear the cache and try this out by creating/editing a menu and storing new data with it. However, our job is not quite finished. We need to add our a href= schema/a so that it becomes translatable. Inside the code/config/schema/my_module.schema.yml/code file of our module we need to add this:/p*.third_party.my_module: type: mapping label: 'My module textfield' mapping: my_text_field: type: text label: 'My textfield' /code/pre pWith this schema definition we are basically appending to the schema of the config entity by specifying some metadata about the emthird party settings/em our module provides. For more information on a href= schemas/a be sure to check out the docs on pNow if we reinstall our module and turn on configuration translation, we can translate the values users add to codemy_text_field/code. You go to codeadmin/config/regional/config-translation/menu/code, select a menu and when translating in a different language you see a new codeThird Party Settings/code fieldset containing all the translatable values defined in the schema./p pHope this helps./p /div/div/divdiv class=field field-name-field-categories field-type-taxonomy-term-reference field-label-hiddenIn span class=field-itemsspan class=field-item evena href=/drupal-8Drupal 8/a/span/span/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url= st_title=Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface class=st_facebook/span span st_url= st_title=Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface class=st_twitter st_via=drupalexp/span span st_url= st_title=Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface class=st_googleplus/span script type='text/javascript'var switchTo5x = true;/scriptscript type='text/javascript' src=''/scriptscript type='text/javascript'stLight.options({publisher:dr-8de6c3c4-3462-9715-caaf-ce2c161a50c});/script/div/div

Chen Hui Jing: Developing Drupal sites as a team

Mon, 06/15/2015 - 02:00
pA lot of people, myself included, start out with Drupal on their own, developing and building everything as a one-person operation. When we’re working by ourselves, there will be certain good practices that we neglect, either out of convenience (there’s no point doing X since I’m the only one touching this project), or out of ignorance (wow, I had no idea that was how Y was supposed to be used). /p pWorking with a team of people to build a Drupal site (or any other development project) requires more structure and discipline to ensure the project doesn’t descend into a pile of spaghetti code. I’m going to try to summarise the processes that worked for my team thus far. I...

Code Karate: How to A/B test your Drupal Site

Sun, 06/14/2015 - 15:48
div class=field field-name-field-episode-number field-type-number-integer field-label-abovediv class=field-labelEpisode Number:nbsp;/divdiv class=field-itemsdiv class=field-item even208/div/div/divdiv class=field field-name-field-ddod-video field-type-file field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src= alt=How to A/B test your Drupal Site //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpAre you testing your site? Until recently, we weren’t and it was costing us. Every element on your website should have a meaning and if you aren’t testing it against something else how can you be sure that you are maximizing your results! /p/div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-abovediv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/category/tags/drupalDrupal/a/divdiv class=field-item odda href=/category/tags/drupal/drupal-7Drupal 7/a/divdiv class=field-item evena href=/category/tags/drupal/site-buildingSite Building/a/divdiv class=field-item odda href=/category/tags/drupal-planetDrupal Planet/a/divdiv class=field-item evena href=/category/tags/tips-and-tricksTips and Tricks/a/divdiv class=field-item odda href=/category/tags/uidesignUI/Design/a/divdiv class=field-item evena href=/category/tags/uidesign/javascriptJavascript/a/div/div/div

DrupalOnWindows: Database Transactions in Drupal

Sun, 06/14/2015 - 07:00
div class=form-item form-type-item labelLanguage /label English /div div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpThis article is not what about a href= are, but strongthe particularities of its implementation in Drupal./strong/p pDrupal database abstraction layer has the ability to handle transactions and nested transactions./p pIt uses the PDO transaction capabilities to start/commit/rollback the higher level transaction in the scope, and database specific functions such as SAVENPOINT to handle the nested transactions./p pTransactions in Drupal are quite a mess to use:/p/div/div/divdiv class=view view-read-more view-id-read_more view-display-id-entity_view_1 view-dom-id-759b7438b3e26caae6b8b5c656c8a727 div class=view-header hr/ h2More articles.../h2 /div div class=view-content div class=item-list ul li class=views-row views-row-1 views-row-odd views-row-first div class=views-field views-field-title span class=field-contenta href=/en/blog/drupal-iis-or-apacheDrupal on IIS or Apache/a/span /div/li li class=views-row views-row-2 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/adding-native-json-storage-support-drupal-7-or-how-mix-rdbms-nosqlAdding native JSON storage support in Drupal 7 or how to mix RDBM with NoSQL/a/span /div/li li class=views-row views-row-3 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/when-php-crashes-how-collect-meaningful-information-and-what-do-itWhen PHP crashes: how to collect meaningful information and what to do with it/a/span /div/li li class=views-row views-row-4 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/setting-code-syntax-higlighting-drupalSetting up Code Syntax Higlighting with Drupal/a/span /div/li li class=views-row views-row-5 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/distinct-options-views-exposed-filter-views-selective-filters-moduleDistinct options in a views exposed filter: The Views Selective Filters Module/a/span /div/li li class=views-row views-row-6 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/deploying-drupal-pro-part-1-file-structureDeploying Drupal Like a Pro - Part 1: File Structure/a/span /div/li li class=views-row views-row-7 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/node-comment-and-forum-working-together-boost-user-participationNode Comment and Forum working together to boost user participation/a/span /div/li li class=views-row views-row-8 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/php-7-nightlies-windowsPHP 7 nightlies for Windows/a/span /div/li li class=views-row views-row-9 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/only-update-changed-fields-or-properties-entity-drupalOnly update changed fields or properties for an entity in Drupal/a/span /div/li li class=views-row views-row-10 views-row-even views-row-last div class=views-field views-field-title span class=field-contenta href=/en/blog/making-namespaced-callbacks-work-drupal-7-without-hacking-core-and-bound-parametersMaking namespaced callbacks work in Drupal 7 (without hacking core and with bound parameters)/a/span /div/li /ul/div /div /div

Drupal core announcements: Drupal core security release window on Wednesday, June 17

Sat, 06/13/2015 - 00:30
div class=field field-type-datestamp field-field-start7 div class=field-items div class=field-item odd div class=field-label-inline-first Start:nbsp;/div span class=date-display-single2015-06-17 (All day) America/New_York/span /div /div /div div class=field field-type-text field-field-event-type div class=field-items div class=field-item odd Online meeting (eg. IRC meeting) /div /div /div div class=field field-type-userreference field-field-organizers div class=field-labelOrganizers:nbsp;/div div class=field-items div class=field-item odd a href=/user/14705 title=View user profile.David_Rothstein/a /div /div /div pThe monthly security release window for Drupal 6 and Drupal 7 core will take place on Wednesday, June 17./p pThis does not mean that a Drupal core security release will necessarily take place on that date for either the Drupal 6 or Drupal 7 branches, only that you should prepare to look out for one (and be ready to update your Drupal sites in the event that the Drupal security team decides to make a release)./p pThere will be no bug fix/feature release on this date; the next window for a Drupal core bug fix/feature release is Wednesday, July 1./p pFor more information on Drupal core release windows, see the documentation on a href= timing/a and a href= releases/a, and the a href= that led to this policy being implemented./p

Open Source Training: Easily Apply Drupal Patches with Patch Manager

Fri, 06/12/2015 - 21:56
div class=ost-intro-imageimg src= alt=ost blog drupal patch width=200 height=200 style=float: right; //div pHave you ever updated your Drupal site only to suddenly have errors?/p pIf you use Drupal regularly, this will happen to you at some point. However, one of the good things about using Drupal is there are so many other users that someone else may well have found and solved the error./p pOne common way to solve an error is with a patch. A patch changes the code on your site, but only by editing a file rather than providing a complete update./p pMany of the available instructions for applying patches ask you to use an application called Git and to use command line instructions. These instructions can be intimidating, so we're going to show you how non-coders can safely and effectively apply patches./pimg src= height=1 width=1 alt=/

LightSky: LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer

Fri, 06/12/2015 - 21:20
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpLightSky is seeking a Senior Ruby on Rails Developer./p p strongAbout the job/strong/p/div/div/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_facebook_large displayText=facebook/span span st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_twitter_large displayText=twitter/span span st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_linkedin_large displayText=linkedin/span span st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_email_large displayText=email/span span st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_sharethis_large displayText=sharethis/span span st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_pinterest_large displayText=pinterest/span span st_url= st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_plusone_large displayText=plusone/span /div/div span property=dc:title content=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=rdf-meta element-hidden/span

Drupal Watchdog: Yubikey NEO and a Better Password Manager: pass

Fri, 06/12/2015 - 18:52
div class=field field--body field-type-text-with-summary field-label-hidden field--rss h2Supergenpass and its Problems/h2 pFor a very long time I have been using supergenpass as my primary password “manager”. It started as a simple bookmarklet and evolved into browser extensions and mobile apps. Taking a primary password and the domain name, it creates a password unique to the domain. There are a number of problems with this: if the master password gets compromised, all your passwords are compromised even the ones you will only create in the future. The created password is not flexible: some systems have nonsensical and ill-advised limitations on what the password must contain. It’s not easy to change your password every few months if you want to since it’d involve changing the master password. Also, since it’s domain dependent, logging into with your password or with your password is slightly problematic/annoying. One Shall Pass iterates on this idea and adds a “generation” parameter so you can easily change your password but then you need to remember what generation were you using for a site.../p pAnd it’s only a password, it’s not a storage, so it can’t help with PIN codes or security questions and answers which is necessary because you should never use real answers to those questions as they are too easy to social engineer. When asked about your childhood address, use something like “That red van down by the river” or something similar but if you want to put in a different one for every site, you need to store your answers./p h2Other Solutions/h2 pMany use solutions like Lastpass, but I find them entirely unacceptable as they are black boxes and you have no control over your own data. In my world view anything interacting with my passwords must be open source. Also, it creates a huge “single point of failure” in your digital life -- if your cloud-based password manager goes down you can’t log into anything. Something like KeePassX or Kwallet is slightly better but there you have another problem: the master password. It obviously needs to be strong, but that means it’s cumbersome to type in all the time so you will have some long timeout between password prompts and then compromising your machine means compromising all your passwords in one go./p h2Pass and the NEO/h2 pI’ve found a program called a href= “the standard unix password manager”. In fact, it’s just a friendly wrapper around GPG encoded files (GPG really needs more friendly UIs). One file per domain is the recommended way to organize your files. Pass can copy the first line of the file to the clipboard so it is recommended to put the password there and use the rest of the file for other data. By itself it’s not much stronger than KeePassX or similar: you have the gpg-agent keeping your private key open (much like ssh-agent). But then there is the a href= NEO/a (and the NEO-n) which can store a GPG key. Now you only present your private key when it’s needed for decryption. Also, since the private key can not be exported from the NEO, a simple (easy to remember and enter) PIN is adequate as it is impossible to brute force the PIN as the device will lock after a few tries./p h2The Worst Case/h2 pEven in the worst case where an attacker can execute arbitrary commands on your computer the pass-NEO combo is not defeated immediately: again, the NEO does not support exporting the key so each password file would need to be sent to the NEO for decryption. However, it is only present very briefly -- just when you log in. So it will take time for the attacker to walk away with every password you have and in such a catastrophic event every small hindrance might matter. (The really worst case is a machine compromised in this fashion and then the attacker physically stealing your YubiKey later. Our only advice for this case: try not to cross any three letter agencies.)/p h2The Various Modes of the NEO/h2 h3One Time Password (OTP)/h3 pThe NEO can operate in a number of modes: it can provide a one time password (OTP) which is not particularly useful because the server would need to implement the YubiKey API for this to be useful and few websites do. /p h3Universal Two Factor (U2F)/h3 pThe U2F mode implements an up-and-coming standard which -- as these standards usually do -- won’t be ubiquitous any time soon. Where it is implemented, it prevents both phishing and spear-phishing attacks./p h3Chip Card Interface Device (CCID)/h3 pFinally, it can emulate a smartcard reader and the smartcard both, this is called the CCID mode. It is capable of emulating the removal of the smartcard as well which is very useful for the “worst case” described above. YubiKey calls this the “eject” mode: one touch of the device “inserts” the smartcard, another “ejects” it. It is even capable of triggering an “eject” automatically a few seconds after the “insert”. How long it should wait for the automated eject is configurable./p h2Setting up Eject Mode/h2 h3GUI to Read the Warnings/h3 pThere are no less than three utilities provided for mode switching. The GUI, called span class=geshifiltercode class=php geshifilter-phpneoman/code/span is useless for us: it is not capable of switching on eject mode at all. Experimenting with it, however, shows a very useful warning: after switching modes you need to remove the device and plug it back. No other utility shows this warning. For this reason, if you are setting up a NEO-n I recommend using a simple USB extension cord to make it (much) easier to unplug and replug./p h3ykpersonalize to Set/h3 pThe span class=geshifiltercode class=php geshifilter-phpykpersonalize/code/span utility can set eject mode and also can set the automated timeout. To do this, run span class=geshifiltercode class=php geshifilter-phpykpersonalize -m81:12:1/code/span where 81 is the mode for eject, the middle number belongs to a mode we do not use (can not use alongside eject, in fact) and the last 1 means one second automated timeout. Once you’ve run this command, do not forget to unplug and replug. After that, span class=geshifiltercode class=php geshifilter-phpykpersonalize/code/span no longer recognizes the NEO. If you run span class=geshifiltercode class=php geshifilter-phppscc_scan/code/span you will get/p pre Reader 0: Yubico Yubikey NEO CCID 00 00 Card state: Card removed, Exclusive Mode /prep And touching the device will switch on the LED and make span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span show the card “inserted” (press Ctrl+C to exit span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span). After one second the LED switches off and span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span now reports the card removed. If you do not get these results from span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span, make sure you have span class=geshifiltercode class=php geshifilter-phppcscd/code/span running./p h3ykneomngr to Reset/h3 pIf you want to change the eject timeout then you need to run the emthird/em utility provided with the NEO, span class=geshifiltercode class=php geshifilter-phpykneomgr/code/span. Even this won’t be able to read the status of your device, but it will be able to reset to a mode where span class=geshifiltercode class=php geshifilter-phpykpersonalize/code/span can work again. Since this requires the device to be “present” and we set up a very short timeout, it’s recommended to run this in an infinite loop: span class=geshifiltercode class=php geshifilter-phpuntil ykneomgr -M0 2amp;gt; /dev/null ; do sleep 0.1 ; done/code/span then touch the NEO. Once reset to mode 0, don’t forget to unplug and replug, and then you can set a different timeout if you want or completely without an automated timeout even with span class=geshifiltercode class=php geshifilter-phpykpersonalize -m81/code/span./p pNow that’s sorted, we can turn to creating GPG keys, subkeys and installing them into the NEO/NEO-n. This process I won’t cover because it’s extensively covered elsewhere. /p h2Using it All/h2 pAfter all this setup, the usage is fairly simple:/p h3On Mobile/h3 pThis combo works with Android as well: the NEO is NFC compatible and there is an a href= version/a of pass which uses a href= (the rough equivalent of gpg-agent for Android) to communicate with the NEO./p h3On Desktop/h3 pI’ve written a little a href= to make my life easier: first it waits for an URL to appear on the clipboard, then it’ll wait for a Yubikey and call span class=geshifiltercode class=php geshifilter-phppass/code/span with the domain extracted from the URL. Since there is an a href= for copying URLs from Chrome and I have a NEO-n the login process becomes this: click the URL copy button in the addressbar (or press Ctrl-L Ctrl-C or F6 Ctrl-C), touch the NEO-n, wait for the notification and paste the password. Without this script, the one second auto timeout recommended in the setup section is not viable. Although certainly not as simple as the Supergenpass extension, it’s still pretty easy and incomparably more secure./p /div