Drupal Planet

  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 3 hours 35 min ago

ThinkDrop Consulting: A Call to Action: Aegir, The Next Generation at NYCCamp 2015

Mon, 07/13/2015 - 8:42am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even h3 dir=ltrAegir Summit amp; DevOps Camp at NYCcamp 2015/h3 p dir=ltrThis Thursday starts a href=http://nyccamp.org target=_blankNYCcamp/a, which is gearing up to be a huge event./p pThis year they've expanded even more beyond Drupal to all free amp; open source technologies./p pMost important to us at ThinkDrop is the first ever a href=http://aegirsummit.org/ target=_blankAegir Summit/a. Most of the Aegir maintainers will be there discussing all of the cool things we are doing with it, and where to go from here. For the full schedule and to register, see a href=http://nyccamp.org/summit/aegir-summit target=_blankhttp://nyccamp.org/summit/aegir-summit/a./p pOn Thursday is an a href=http://nyccamp.org/training/open-agency-site-factory-ops-freedom-aegir target=_blankAegir Site Factory training session/a.  The main a href=http://nyccamp.org/summit/aegir-summit target=_blankAegir Summit/a takes place on Friday/p h3Aegir: The Next Generation/h3 pThis event is going to be a turning point for the Aegir project.  Three of the maintainers, Christopher Gervais, Cameron Eagans, and myself met at DrupalCon Los Angeles over lunch to discuss what to do next with the project./p pWe all agreed that there are many issues with Aegir as it stands. We saw that containerization was going to be the way to go in the future.  We all agree that Aegir is so monolithic, so complex, and so full of legacy code that it might be easier to just start over using modern tools like a href=http://symfony.com target=_blanksymfony/a, a href=http://www.ansible.com target=_blankansible/a, and a href=https://www.docker.com/ target=_blankdocker/a./p pWe even agreed that we (might) need a new name./p pFrom this, Cameron wrote up the a href=https://aegir.hackpad.com/AegirNG-Proposal-GtXP9pgygHh target=_blankAegir NG proposal on hackpad/a so we could all contribute our ideas./p pAt the Aegir Summit, we will be having a href=http://nyccamp.org/session/aegir-40-next-generation-demos-panel-discussion target=_blanka panel discussion/a to present these ideas to the community and get feedback on where to go from here./p pI urge all of you to attend, or keep tabs from afar./p h3The Future of Open Source Hosting/h3 pWe know that many, many people need the promise of Aegir: easily deploy and update sites at scale. We all know that Aegir has many problems with delivering this promise/p pWe know that outside of it's rather die hard fanbase, Aegir is not really well liked because of these problems./p pIf you are one of those people, I urge you to join the Aegir Next Generation cause.  We are going to fix Aegir for good, and we need your help./p h3Registration Ends Tomorrow!/h3 pRegistration for Aegir training ends today, Monday July 13 at midnight ET. Registration for the Aegir Summit ends Tuesday, July 14 at midnight ET./p pIf you are attending NYCcamp, please register for the Aegir Summit. Even if you can only attend the panel, I promise you, it will be worth it!/p pRegister for Aegir Summit at a href=http://nyccamp.org/summit/aegir-summit target=_blankhttp://nyccamp.org/summit/aegir-summit/a.  Register to attend the Open Agency Site Factory training at a href=http://nyccamp.org/training/open-agency-site-factory-ops-freedom-aegir target=_blankhttp://nyccamp.org/training/open-agency-site-factory-ops-freedom-aegir/a/p /div/div/divdiv class=field field-name-field-tags field-type-taxonomy-term-reference field-label-abovediv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tags/aegiraegir/a/divdiv class=field-item odda href=/tags/nyccampnyccamp/a/divdiv class=field-item evena href=/tags/devshopdevshop/a/divdiv class=field-item odda href=/tags/planet-drupalPlanet Drupal/a/div/div/div
Categories: Drupal Feeds

Microserve: Organising a DrupalCamp - Tips and feedback from DrupalCamp Bristol 2015

Mon, 07/13/2015 - 8:19am
img typeof=foaf:Image src=https://microserve.io/sites/default/files/styles/banner_image/public/blog/19411254532_25f2ab3620_k.jpg?itok=_53ZdyKramp;c=262448d408d97ee568368fde041fa04f width=760 height=250 alt=DrupalCamp Bristol Merchandise /div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedp As the Chair of the DrupalCamp Bristol Committee, I thought it would be great to share what I took away from organising Bristol's first DrupalCamp. I'm sure there's a few things to be learnt from this, and if not then at least it will make an interesting read!/p h2 The Figures/h2 p Friday total sales: strong74/strongbr / Friday turnout:strong 64/strong/p p span style=line-height: 1.6em;Saturday total sales: strong132/strongbr / Saturday turnout: strong109/strong/span/p p Income (to be finalised): strong£12,805.00/strongbr /span style=line-height: 1.6em;Expenditure (to be finalised): /spanstrong£11,964.16/strong/p p span style=line-height: 1.6em;I'd be happy to share the figures with any new camp organisers, and answer any questions you might have - simply a href=mailto:rick@microserve.io?subject=DCB%20Finance%20Questiondrop me an email/a./span/p p span style=line-height: 1.6em;A big thank you would also be appropriate at this point to Kris Klinkhammer for all her help at the Drupal Association./span/p h2 What went well?/h2 p The actual camp weekend was fantastic and we received a lot of great feedback. We had picked two amazing venues and a summer date, and luckily for us the weather did not disappoint; we even had lunch served outside!/p p We were worried at first when we realised we had to choose a different venue for each day, but in the end I think that worked out in our favour. St George's Hall in particular was a fantastic choice as our attendees were delighted to see the event held in such a unique venue, and started the weekend off in very high spirits./p pfigurebr /img alt=St Georges Hall src=https://microserve.io/sites/default/files/St%20Georges%20Hall.jpg style=width: 800px; height: 305px; /figcaptionemstrong- St Georges Hall: a href=http://www.stgeorgesbristol.co.uk/venue-info/www.stgeorgesbristol.co.uk/venue-info//a/strong/em/figcaption/figure/p p A decision I’m glad we made was to introduce a Drinks Sponsor as a tier between Organisational and Gold Sponsors. Their fee was £1,000 which was put directly behind the bar of a superb venue - Goldbrick House - which was directly behind St George’s Hall. This decision had two advantages; not only were we not handling any cash, and therefore not subject to the 10% DA fees, but a bar tab of that size is a great way to ensure that all your attendees carry on late into the evening which creates a great networking opportunity./p p At the core of the event we also had a fantastic variety of talks, so a big thank you to each and everyone of them./p pfigurebr /img alt=Léonie Watson giving her Saturday keynote on quot;The metamorphosis of accessibilityquot; src=https://microserve.io/sites/default/files/19222970929_711e8df1b2_o.jpg style=width: 900px; height: 675px; /figcaptionemstrong- Léonie Watson giving her Saturday keynote on The metamorphosis of accessibility/strong/em /figcaption/figure/p p We were also pretty lucky with the committee, since we had a total of 9 people and it meant no need for any other volunteers over the weekend. We used Trello for communication (separating a board for each key area) and had monthly meetings at the Microserve offices to ensure everything was on track./p p Little tip: The initial meetings emwill be long/em. Get some rules in place, figure out how to make quick decisions, elect a chair early. The first few meetings were twice as long as the others, so get a few Pizza's expensed!/p h2 What didn’t go so well?/h2 p We had initially attempted to have a sub-event on each day; Training would be held on the Friday within the same venue, and Sprints would be held on the Saturday. Unfortunately we barely sold any Training tickets so we had to cancel this, and although we had a great room for the Sprints, we simply didn’t publicise this enough and therefore it was barely used. We'd have liked to invite more people to sprint by giving them a free ticket, but because the sprints were in the same place as the camp, we had to acknowledge that each person would still be subject to the same per head cost - food amp; drink, t-shirt, merchandise etc - so we didn't do this unfortunately./p p I should also thank Circle Interactive who provided us with a great deal on training. Although we weren’t at a financial loss by cancelling it they had put their time into putting something together and they were very understanding when we cancelled./p h2 Where could we improve?/h2 p What are the main points I'll be taking into year 2 and what is my advice to anyone approaching their first DrupalCamp?/p h4 Take things easy on year one/h4 p We thought we had adhered to this rule by not having a Sunday conference day, but we should have also applied this to Training. We do look forward to putting a heavier focus on that next year though!/p h4 Don’t think of everything as linear/h4 p We didn’t start selling tickets till the website was complete, we didn’t start on the website till we had agreed all the key information and we didn’t promote to speakers and sponsors till we had all details. In hindsight we could have taken a much less linear approach, which would have boosted sales early and got our speakers and sponsors on-board faster./p p There's a couple of points I should empahsise on the back of this one: /p olli 8 months planning will suddenly catch up with you when you're 2 months away from the event and the ticket sales aren't what you expected. It really is important to not feel too comfortable in the early stages, and to get tickets and speaker requests out early./li li DrupalCamp already has a name for itself, so early bird tickets emwill sell regardless/em. We could have tweeted about early bird tickets before we even had the venues or any detail sorted; as long as the date is confirmed there'll be an audience who are happy to snap the tickets up without knowing the finer details!/li /olh4 Improve communication groups/h4 p We had email groups so everyone received everything (such as contact form submissions and EventBrite queries), yet it wasn’t always clear whose job it was to reply to certain things. One example here is sessions submissions which arrived via the website; it took a few weeks before somebody stepped up to manage this and confirm all the submissions, which really was hassle we could have avoided. As soon as someone offers to talk, get it confirmed asap!/p h4 Pass responsibility on better throughout the process/h4 p It was good that all the team found sponsors and speakers, but we continued communication this way instead of passing communications on to the appropriate team member. If we were chasing payments, logos, or session info for example, we would ask the connected individual to do it as opposed to the person whose role it was to look after sponsors or speakers./p h4 Accept you will use discount codes, and put these into your marketing strategy/h4 p Admittedly this is the one thing I completely overlooked, as we had only thought about early bird Saturday tickets. We ended up creating a variety of discount codes which didn't really follow any plan, and became a little bit messy. We sent out camp specific discount codes to Brighton and London which was a nice gesture, but in the final month when we felt numbers were lagging a bit for the business day we ended up giving our speakers and sponsors heavily discounted ticket codes to pass on to other team members and friends. span style=line-height: 1.6em;Although this worked to an extent, it didn't follow any structure and we ended up having a couple of refund requests from attendees who purchased full price tickets and felt a bit hard done by./span/p h2 span style=line-height: 1.6em;Sessions and Speakers/span/h2 p span style=line-height: 1.6em;Not surprisingly we had a great variety of feedback on this, both positive and negative. We also asked What topics / speakers would you like to see at a future DrupalCamp? so we now have some great feedback to help shape our next camp./span/p p span style=line-height: 1.6em;From an organisers point of view one of the largest problems we faced was a lack of gender diversity amongst speakers. I should clarify that although we were lucky enough to secure Léonie Watson for the Saturday keynote, there wasn't a single session submitted by a female speaker, which was really a shame. /span/p p span style=line-height: 1.6em;I could probably write a whole post covering this area, so I'll go into more detail on how we are trying to be more inclusive for DC Bristol 2016 in another blog post at a later date./span/p p span style=color: inherit; font-family: 'Roboto Slab', Georgia, Times, serif; font-size: 32px; line-height: 1.1;How did you think it went?/span/p p We want to thank each and every person who attended the event, and we'd also like to ask for your feedback in order to make next year bigger and better./p p We have a link to a a href=https://www.surveymonkey.com/r/W3Z7V9Lsurvey hosted on Survey Monkey here/a. We would very much appreciate it if you could give us your feedback!/p pfigurebr /img alt=People enjoying lunch outside in the sun src=https://microserve.io/sites/default/files/19417480425_053c61d417_o.jpg style=width: 900px; height: 675px; /figcaption/figcaption/figure/p p emstrong- People enjoying lunch outside in the sun/strong/em/p p /p pfigurebr /img alt=The DCB 2015 Committee src=https://microserve.io/sites/default/files/CJGHY66WgAIq0d7_0.jpg style=width: 900px; height: 568px; /figcaption/figcaption/figure/p p emstrong- The DCB 2015 Committee (minus Jon Hadley)/strong/em/p p /p /div/div/diva href=/about/rick-donohoeimg typeof=foaf:Image src=https://microserve.io/sites/default/files/styles/thumbnail/public/pictures/picture-32-1430928124.jpg?itok=KYUYkq3X alt=Rick Donohoe#039;s picture title=Rick Donohoe#039;s picture //aa href=/about/rick-donohoe title=View user profile. class=usernameRick Donohoe/a
Categories: Drupal Feeds

Dries Buytaert: Acquia announces it is ready for Drupal 8

Mon, 07/13/2015 - 8:02am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpI'm excited to announce that starting today, a href=https://www.acquia.com/about-us/newsroom/press-releases/acquia-launches-next-generation-digital-experience-platform-july-13Acquia is announcing we're ready to fully support our customers with Drupal 8/a. This means our professional services, our support, our product engineering, our cloud services … the entire company is ready to help anyone with Drupal 8 starting today./p pWhile Drupal 8 is not yet released (as it has always been said, Drupal 8 will be ready when it's ready), the a href=https://www.drupal.org/drupal-8.0/get-involvedlist of release blockers/a is dwindling ever closer to zero, and a a href=https://groups.drupal.org/node/472578beta-to-beta upgrade path will soon be provided in core/a. These factors, along with Acquia's amazing team of more than 150 Drupal experts (including a dedicated Drupal 8 engineering team that has contributed to fixing more than 1,200 Drupal 8 issues), gives us full confidence that we can make our customers successful with Drupal 8 starting today./p pIn the process of working with customers on their Drupal 8 projects, we will contribute Drupal 8 core patches, port modules, help improve Drupal 8's performance and more./p pI'm excited about this milestone, as a href=http://buytaert.net/why-the-big-architectural-changes-in-drupal-8Drupal 8 will be a truly ground-breaking release/a. I'm most excited about the architectural enhancements that strongly position Drupal 8 for what I've called the a href=http://buytaert.net/the-big-reverse-of-the-webBig reverse of the Web/a. For the web to reach its full potential, it will go through a massive re-platforming. From Flipboard to the upcoming release of Apple News, it's clear that a href=http://buytaert.net/the-post-browser-era-of-the-web-is-comingthe web is advancing into the “post-browser” era/a, where more and more content is pushed to you by smart aggregators. In this world, the traditional end-point of the browser and website become less relevant, requiring a new approach that increases the importance of structured content, metadata and advanced caching. With Drupal 8, we've built an API-driven architecture that is well suited to this new “content as a service” approach, and Drupal 8 is ahead of competitive offerings that still treat content as pages. Check out my a href=http://buytaert.net/state-of-drupal-presentation-may-2015DrupalCon Los Angeles keynote/a for more details./p /div/div/div
Categories: Drupal Feeds

Annertech: Integration patterns for connecting your website with your CRM

Mon, 07/13/2015 - 7:26am
span class=field field-node--title field-name-title field-type-string field-label-hiddenIntegration patterns for connecting your website with your CRM/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-itempPreviously we wrote about a href=/node/477connecting your website with external systems/a, and specifically, a href=/blog/7-reasons-why-you-should-integrate-your-website-and-crmthe benefits of connecting your site with your CRM /a. As with many problems, there are many ways to approach this./p/div /div /div
Categories: Drupal Feeds

Barnettech: The only Drupal themed game on the app store? The Evil Dr. Upal has run amok unleashing his mathematical demonic creatures?

Sun, 07/12/2015 - 8:41pm
!-- google_ad_section_start --div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpNow available on the Apple app store (a href=https://itunes.apple.com/us/app/math-maze-madness/id1010265925?mt=8amp;ign-mpt=uo%3D2https://itunes.apple.com/us/app/math-maze-madness/id1010265925?mt=8amp;ign-.../a), and as a google Chrome app (a href=https://chrome.google.com/webstore/detail/math-maze-madness/phladmjggbdnnghggjfhlmlfikfjbjffhttps://chrome.google.com/webstore/detail/math-maze-madness/phladmjggbdn.../a). nbsp;A FPS educational game and Learn math, play, and defeat the evil mathemagician./div/div/div!-- google_ad_section_end --
Categories: Drupal Feeds

Drupal core announcements: Drupal core security release window on Wednesday, July 15

Fri, 07/10/2015 - 6:56pm
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-07-15 (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, July 15./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, August 5./p pFor more information on Drupal core release windows, see the documentation on a href=http://drupal.org/documentation/version-info#whenrelease timing/a and a href=http://drupal.org/node/1173280security releases/a, and the a href=http://groups.drupal.org/node/260803discussion/a that led to this policy being implemented./p
Categories: Drupal Feeds

Forum One: See You at NYC Camp from July 16-19!

Fri, 07/10/2015 - 10:46am
pa class=image-link href=http://forumone.com/wp-content/uploads/2015/07/main-landing-introCamp-web.jpgimg class=alignnone wp-image-14183 size-full src=http://forumone.com/wp-content/uploads/2015/07/main-landing-introCamp-web.jpg alt=main-landing-introCamp-web width=1233 height=494 //a/p pThe Forum One team is thrilled to be heading to the United Nations for this year#8217;s a href=http://nyccamp.org/ target=_blankNYC Camp/a. We#8217;re looking forward to seeing both new and familiar faces, and sharing some of the newest things the team#8217;s been working on in terms of data visualization, Drupal development, and automation./p pHere is a look at the sessions we#8217;ll be leading:/p pstronga href=http://nyccamp.org/session/drupal-8-decision target=_blankThe Drupal 8 Decision: Budgets, Bosses, and Bul@#$% Standing Between You and the Next World-Class CMS/a/strong/p ul lia href=http://forumone.com/staff/chaz-chumley/ target=_blankChaz Chumley/a #8211; Technical Architect/li lia href=http://forumone.com/staff/andrew-cohen/ target=_blankAndrew Cohen/a #8211; Managing Director of Digital Strategy/li /ul pDrupal 8 is coming. When we reach “Issue Queue Zero,” your business or organization needs a sensible strategy for upgrading your sites to D8. There are variety of questions to consider including available talent, budgets, goals, and aspirations. This session will be of particular interest to executives, business owners, nonprofit professionals, communications staff, and site managers who face this increasingly pressing decision regarding D8./p pstronga href=http://nyccamp.org/session/building-realtime-applications-drupal-and-nodejs target=_blankBuilding Realtime Applications with Drupal and Node.js/a/strong/p ul lia href=http://forumone.com/staff/william-hurley/ target=_blankWilliam Hurley/a #8211; Manager of Technical Development/li /ul pCall it the #8220;appification#8221; of the web. Users#8217; expectations are being pushed in the direction of being able to interact with sites and content not by clicking a link or refreshing the page but by having those changes come directly to them. We#8217;ll be using Drupal, AngularJS and Sails.js to demonstrate the capabilities of both Javascript and Node to build interactive applications and synchronize with Drupal through the REST interface to serve as the data repository./p pstronga href=http://nyccamp.org/session/automating-deployments target=_blankAutomating Deployments/a/strong/p ul lia href=http://forumone.com/staff/william-hurley/ target=_blankWilliam Hurley/a #8211; Manager of Technical Development/li /ul pThat moment when new code makes it way out into the world is the most fragile part of the process. We take for granted all the steps that need to happen to make sure it goes correctly. In this session we#8217;ll be demonstrating technologies to turn deployments from a nail biting experience into a simple #8220;one click and done.#8221; You#8217;ll see the power of Jenkins to manage the continuous integration process and Capistrano to deploy changes and how to drive it all from changes in your git repository./p pstronga href=http://nyccamp.org/session/d3-data-visualization target=_blankD3 Data Visualization: Because your data should tell a story/a/strong/p ul lia href=http://forumone.com/staff/keenan-holloway/ target=_blankKeenan Holloway/a #8211; Senior Developer/li /ul pThere#8217;s no escaping the fact that data visualization is hot right now. Everyone wants to tell their data#8217;s story visually, whether it be through a map, chart, or more detailed presentation. The difficulty is there are so many different tools that solve this, each one with their own benefits and limitations. We feel D3.js is the most awesome tool for handling this task #8212; which is the approach we#8217;ve used for the sites like the Nation#8217;s Report Card, BlueCross BlueShield of North Carolina, GlobalChange, and others./p pstronga href=http://nyccamp.org/training/drupal-8-theming-twig target=_blankDrupal 8 Theming with Twig!/a/strong/p ul lia href=http://forumone.com/staff/chaz-chumley/ target=_blankChaz Chumley/a #8211; Technical Architect/li /ul pPrepare yourself with the skills you#8217;ll need to hit the ground running as a Drupal 8 themer. This training will be a hands-on, an interactive workshop where we will build a Drupal 8 theme from the ground up using Drupal 8#8217;s new template engine, Twig./p pWe will recommend best practices around template logic, determining what should be themeable output in the first place, leveraging theme suggestions and reusable theme components, overriding and extending templates, and more. We will also talk about why themers should be excited for the tools that contrib can provide in Drupal 8./p pThis workshop is intended for Drupal themers and front-end developers. Knowing the basics of git will be helpful but is not necessary. No PHP knowledge is necessary but a laptop is required./p pTwig is being improved in Drupal 8 Core @ a href=http://drupaltwig.org/http://drupaltwig.org//a and you are all welcome to join in and help make Drupal 8 theming awesome!/p pnbsp;/p
Categories: Drupal Feeds

Drupal Watchdog: Know Your Audience

Fri, 07/10/2015 - 10:24am
div class=field field--article-edit-printtype field-type-list-text field-label-hidden field--rss Article /div div class=field field--article-body field-type-text-long field-label-hidden field--rss pimg src=/sites/default/files/images/web/DW5.01-Persona.png alt=Photo of Drupal Hierarchy width=100% align=center class=img-responsive img-thumbnail / Drupal.org is one of the largest and oldest continuously-operating Drupal websites in the world. The amount of content we have is both a blessing and a curse. Historically developed and maintained by community volunteers, Drupal.org has been growing organically for over a decade. New content keeps being added, while no major changes to information architecture and navigation have made it easily findable. With about 1.2 million pieces of content, the need to overhaul Drupal.org has become obvious. But where do we even start?/p p It is tempting to jump straight into content strategy, kick off a massive content audit, and talk about content types and archival processes. However, to develop comprehensive content strategy, you need to understand what kind of content is actually needed on your site. And to understand that, you need to know your audience./p h3Researching the Users/h3 p We underwent a user research project which lasted from May to August of 2014. Through a public request for proposal (RFP) process, we partnered with Whitney Hess, a user experience coach, to help guide the Drupal Association staff and community volunteers through the research./p p The project kicked off with a full-day workshop at DrupalCon Austin. Participants included representatives from the Drupal Association staff and the Board of Directors, community volunteers, and advisors. Together, we brainstormed objectives for the new Drupal.org and metrics of success, as well as provisional user personas – our ideas about what those personas could be./p p With that groundwork in place, we set out to validate (or disprove) our assumptions with real people. /p p We talked to 30 different users of our website located in the Americas and Europe: people who were new to Drupal, long-term community members, ex-Drupalistas, developers, site builders, designers, content strategists, PMs, and more. We sat down for an hour with each one of them and asked numerous questions about the way they use Drupal.org, things they enjoy about it, and their frustrations./p p Once we had the data from the interviews, we started to synthesize it and develop personas./p /div
Categories: Drupal Feeds

Drupal core announcements: Recording from July 10th 2015 Drupal 8 critical issues discussion

Fri, 07/10/2015 - 5:10am
pThis was our 7th critical issues discussion meeting to be publicly recorded in a row. (a href=https://groups.drupal.org/taxonomy/term/138603See all prior recordings/a). Here is the recording of the meeting video and chat 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=https://www.youtube.com/embed/xgGDwll87h4?feature=player_embedded frameborder=0 allowfullscreen/iframe/p pIf you also have significant time to work on critical issues in Drupal 8 and we did not include you, a href=https://www.drupal.org/user/4166/contactlet me know as soon as possible/a./p pThe meeting log is as follows (all times are CEST real time at the meeting):/p pcodebr / [11:21am] berdir: pfrenssen: that's one scary profile picture ;)br / [11:22am] pfrenssen: haha it zooms in nicely :Dbr / [11:23am] jibran: berdir: yay! a href=https://bugs.php.net/bug.php?id=69996amp;edit=1 title=https://bugs.php.net/bug.php?id=69996amp;edit=1https://bugs.php.net/bug.php?id=69996amp;edit=1/a got fixed.br / [11:26am] jibran: https://www.drupal.org/project/issues/search/drupal?status[0]=1amp;status[1]=13amp;status[2]=8amp;status[3]=14amp;status[4]=4amp;priorities[0]=400amp;categories[0]=1amp;categories[1]=2amp;categories[2]=5amp;version[0]=8.xbr / [11:27am] jibran: a href=https://www.drupal.org/node/2497243 title=https://www.drupal.org/node/2497243https://www.drupal.org/node/2497243/abr / [11:27am] Druplicon: a href=https://www.drupal.org/node/2497243 title=https://www.drupal.org/node/2497243https://www.drupal.org/node/2497243/a = Rebuilding service container results in endless stampede [#2497243] = 139 comments, 34 IRC mentionsbr / [11:27am] GaborHojtsy: jibran: that’s the one that Fabianx-screen is talking about, right? :)br / [11:29am] Fabianx-screen: Issues I talked about:br / [11:29am] Fabianx-screen: a href=https://www.drupal.org/node/2529516 title=https://www.drupal.org/node/2529516https://www.drupal.org/node/2529516/abr / [11:29am] Druplicon: a href=https://www.drupal.org/node/2529516 title=https://www.drupal.org/node/2529516https://www.drupal.org/node/2529516/a = Decouple tests from relying that $container is a container builder [#2529516] = 10 comments, 9 IRC mentionsbr / [11:30am] jibran: a href=https://www.drupal.org/node/2502785 title=https://www.drupal.org/node/2502785https://www.drupal.org/node/2502785/abr / [11:30am] Druplicon: a href=https://www.drupal.org/node/2502785 title=https://www.drupal.org/node/2502785https://www.drupal.org/node/2502785/a = Remove support for $form_state-setCached() for GET requests [#2502785] = 119 comments, 23 IRC mentionsbr / [11:30am] jibran: a href=https://www.drupal.org/node/2505989 title=https://www.drupal.org/node/2505989https://www.drupal.org/node/2505989/abr / [11:30am] Druplicon: a href=https://www.drupal.org/node/2505989 title=https://www.drupal.org/node/2505989https://www.drupal.org/node/2505989/a = Controllers render caching at the top level and setting a custom page title lose the title on render cache hits [#2505989] = 54 comments, 10 IRC mentionsbr / [11:30am] pfrenssen: I can't talkbr / [11:30am] Fabianx-screen: a href=https://www.drupal.org/node/2530586 title=https://www.drupal.org/node/2530586https://www.drupal.org/node/2530586/abr / [11:30am] Druplicon: a href=https://www.drupal.org/node/2530586 title=https://www.drupal.org/node/2530586https://www.drupal.org/node/2530586/a = Read-Only Container is not working properly. [#2530586] = 0 comments, 4 IRC mentionsbr / [11:30am] pfrenssen: nice construction noises :)br / [11:30am] pfrenssen: a href=https://www.drupal.org/node/2524082 title=https://www.drupal.org/node/2524082https://www.drupal.org/node/2524082/abr / [11:30am] Druplicon: a href=https://www.drupal.org/node/2524082 title=https://www.drupal.org/node/2524082https://www.drupal.org/node/2524082/a = Config overrides should provide cacheability metadata [#2524082] = 82 comments, 24 IRC mentionsbr / [11:31am] pfrenssen: That's what I am working on. Next steps are to address the last remarks.br / [11:31am] pfrenssen: It's clear how to move forward.br / [11:31am] GaborHojtsy: pfrenssen: :)br / [11:32am] jibran: a href=https://www.drupal.org/node/2525910 title=https://www.drupal.org/node/2525910https://www.drupal.org/node/2525910/abr / [11:32am] Druplicon: a href=https://www.drupal.org/node/2525910 title=https://www.drupal.org/node/2525910https://www.drupal.org/node/2525910/a = Ensure token replacements have cacheability metadata and that it is bubbled in any case [#2525910] = 72 comments, 10 IRC mentionsbr / [11:32am] jibran: a href=https://bugs.php.net/bug.php?id=69996amp;edit=1 title=https://bugs.php.net/bug.php?id=69996amp;edit=1https://bugs.php.net/bug.php?id=69996amp;edit=1/abr / [11:33am] GaborHojtsy: a href=https://www.drupal.org/node/2512718 title=https://www.drupal.org/node/2512718https://www.drupal.org/node/2512718/abr / [11:33am] Druplicon: a href=https://www.drupal.org/node/2512718 title=https://www.drupal.org/node/2512718https://www.drupal.org/node/2512718/a = EntityManager::getTranslationFromContext() should add the content language cache context to the entity [#2512718] = 144 comments, 46 IRC mentionsbr / [11:35am] GaborHojtsy: a href=https://www.drupal.org/node/2529516 title=https://www.drupal.org/node/2529516https://www.drupal.org/node/2529516/abr / [11:35am] Druplicon: a href=https://www.drupal.org/node/2529516 title=https://www.drupal.org/node/2529516https://www.drupal.org/node/2529516/a = Decouple tests from relying that $container is a container builder [#2529516] = 10 comments, 10 IRC mentionsbr / [11:37am] jibran: a href=https://www.drupal.org/node/2528178 title=https://www.drupal.org/node/2528178https://www.drupal.org/node/2528178/abr / [11:37am] Druplicon: a href=https://www.drupal.org/node/2528178 title=https://www.drupal.org/node/2528178https://www.drupal.org/node/2528178/a = Provide an upgrade path for #2354889 (block context manager) [#2528178] = 36 comments, 7 IRC mentionsbr / [11:40am] jibran: a href=https://www.drupal.org/node/2454439 title=https://www.drupal.org/node/2454439https://www.drupal.org/node/2454439/abr / [11:40am] Druplicon: a href=https://www.drupal.org/node/2454439 title=https://www.drupal.org/node/2454439https://www.drupal.org/node/2454439/a = [META] Support PHP 7 [#2454439] = 126 comments, 25 IRC mentionsbr / [11:40am] berdir: jibran: a href=http://d8php7bot.erwanderbar.de/ title=http://d8php7bot.erwanderbar.de/http://d8php7bot.erwanderbar.de//abr / [11:42am] pfrenssen: yay! :Dbr / [11:42am] GaborHojtsy: dawehner: alexpott: we are running out of topics to talk about :D any topics you wanted discussed while we are on the call?br / [11:42am] GaborHojtsy: dawehner: alexpott: a href=https://plus.google.com/hangouts/_/gspzs5s25ucfasw6puf7muif7ya title=https://plus.google.com/hangouts/_/gspzs5s25ucfasw6puf7muif7yahttps://plus.google.com/hangouts/_/gspzs5s25ucfasw6puf7muif7ya/abr / [11:43am] alexpott: GaborHojtsy: yepbr / [11:44am] jibran: a href=https://www.drupal.org/node/2505989 title=https://www.drupal.org/node/2505989https://www.drupal.org/node/2505989/abr / [11:44am] Druplicon: a href=https://www.drupal.org/node/2505989 title=https://www.drupal.org/node/2505989https://www.drupal.org/node/2505989/a = Controllers render caching at the top level and setting a custom page title lose the title on render cache hits [#2505989] = 54 comments, 11 IRC mentionsbr / [11:45am] dawehner: GaborHojtsy: oh let me try to joinbr / [11:45am] GaborHojtsy: dawehner: alexpott is discussing title filteringbr / [11:45am] alexpott: a href=https://www.drupal.org/node/2530474 title=https://www.drupal.org/node/2530474https://www.drupal.org/node/2530474/abr / [11:45am] Druplicon: a href=https://www.drupal.org/node/2530474 title=https://www.drupal.org/node/2530474https://www.drupal.org/node/2530474/a = Discuss whether = 0 comments, 1 IRC mentionbr / [11:46am] • dawehner tries to join againbr / [11:49am] dawehner: alexpott: GaborHojtsy I can't talk probably (given the speed of the net, can kinda listen) but I think allowing is a thing, given that people wanted something like em tagsbr / [11:57am] jibran: a href=https://www.drupal.org/node/2493911 title=https://www.drupal.org/node/2493911https://www.drupal.org/node/2493911/abr / [11:57am] Druplicon: a href=https://www.drupal.org/node/2493911 title=https://www.drupal.org/node/2493911https://www.drupal.org/node/2493911/a = Update guzzle, goutte and mink-goutte-driver to the latest release [#2493911] = 76 comments, 2 IRC mentionsbr / [11:58am] jibran: a href=https://github.com/guzzle/guzzle/pull/1167 title=https://github.com/guzzle/guzzle/pull/1167https://github.com/guzzle/guzzle/pull/1167/abr / [11:59am] pfrenssen: yay! D:br / [12:00pm] pfrenssen: 14br / [12:00pm] dawehner: a href=https://www.youtube.com/watch?v=P_yl2WuiW4g title=https://www.youtube.com/watch?v=P_yl2WuiW4ghttps://www.youtube.com/watch?v=P_yl2WuiW4g/abr / [12:00pm] pfrenssen: have a nice weekend!br / /em/code/p
Categories: Drupal Feeds

KatteKrab: Landscape design: a great analogy for the web

Fri, 07/10/2015 - 2:16am
div class=field field-name-post-date field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evenFriday, July 10, 2015 - 17:16/div/div/divdiv class=field field-name-field-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src=http://kattekrab.net/sites/kattekrab.net/files/styles/large/public/Map_parc_du_chateau_de_Versailles.jpg?itok=_b4uWym8 width=400 height=349 alt=Map of the garden at Versailles //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpI often find myself describing the digital domain to people who don't live and breathe it like I do. It's an intangible thing, and many of the concepts are coded in jargon. It doesn't help that every technology tool set uses it's own specific language, sometimes using the same words for very different things, or different words for the same things. What's a page? A widget? A layout? A template? A module, plugin or extension? It varies. The answer depends./p pAnalogies can be a helpful communication tool to get the message across, and get everyone thinking in parallel./p pOne of my favourites, is to compare a web development project, to a landscape design project./p pOne of the first things you need to know, is who is this landscape for and what sort of landscape is it? The design required for a public park is very different to one suitable for the back courtyard of an inner city terrace house./p pYou also need to know what the maintenance resources will be. Will this be watered and tended daily? What about budget? Can we afford established plants, or should we plan to watch the garden grow from seeds or seedlings?/p pThe key point of comparison, is that a garden, whether big or small, is a living thing. It will change, it will grow. It may die from neglect. It may become an un-manageable jungle without regular pruning and maintenance./p pWhat analogies do you use to talk about digital design and development?/p pa class=twitter-mention-button data-size=large href=https://twitter.com/intent/tweet?screen_name=kattekrabamp;text=My%20fave%20web%20analogy%20is...Tweet to @kattekrab/a/p p style=text-align: right;Image:nbsp;a href=https://commons.wikimedia.org/wiki/User:XIIIfromTOKYOXIIIfromTOKYO/a - emPlan of the gardens of Versailles/em - Wikipedia - CC-BY-SA 3.0/p /div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden clearfixul class=linksli class=taxonomy-term-reference-0a href=/category/tags/drupalplanetdrupalplanet/a/li/ul/div
Categories: Drupal Feeds

ImageX Media: How to Improve Web Design ROI with Data and Testing

Thu, 07/09/2015 - 9:31pm
div class=field field-name-body field-type-text-with-summary p /p p style=text-align: center;img typeof=foaf:Image src=http://imagexmedia.com/sites/default/files/ImageX_Media_WebDesign_Data_Conversion_0.png alt=ImageX Data and Testing for Conversions Graph title=ImageX Data and Testing for Conversions Graph //p /div
Categories: Drupal Feeds

Drupal CMS Guides at Daymuse Studios: Elegant Drupal 7 Administration: Mobile Theme, Menu, Modules

Thu, 07/09/2015 - 6:29pm
div class=field field--name-field-image field--type-image field--label-hiddendiv class=field__itemsdiv class=field__item evena href=/blogs/drupal-admin-theme-mobile-modules-menu-tutorialimg typeof=foaf:Image src=http://www.daymuse.com/sites/daymuse.com/files/drupal-administration-mobile-theme-module-menu.jpg width=960 height=620 alt=Drupal Mobile Admin Theme, Menu and Modules Tutorial title=Drupal Mobile Admin Theme, Menu and Modules Tutorial //a/div/div/divdiv class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item even property=content:encodedpUse this system of Drupal admin theme and modules to create a mobile-friendly, modern Drupal 7 administration user experience. Improve workflow, help users./p /div/div/div
Categories: Drupal Feeds

Acquia: Front End Performance Strategy: Scripts

Thu, 07/09/2015 - 2:31pm
figure class=field-item even rel= resource=https://www.acquia.com/sites/default/files/javascript2_1.jpg 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=https://www.acquia.com/sites/default/files/styles/scale_width_280/public/javascript2_1.jpg?itok=P2E1c10Z 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 evenpIn the last installment of this series, we considered a href=/blog/front-end-performance-strategy/front-end-performance-strategy%3A-styles/02/07/2015/3281341 target=_blankCSS optimization/a. This time we’re going to look at the impact of scripts. /p pRemember, as architects and developers, it’s up to us to inform stakeholders about the impacts of their choices, offer compromises where we can, and implement in smart and responsible ways./p pSo, picking up on our last post, most everything about the way Drupal handles CSS holds true for JavaScript, with a few notable exceptions./p pCSS aggregation removes whitespace, but JavaScript aggregation done using Drupal core's aggregation system doesn't do that or any other form of minification or uglification. It simply concatenates our scripts./p pLike CSS, JavaScript also has three groups:/p ulliLibrary - Libraries, via emdrupal_add_library/em/li liDefault - Modules/li liThemes - Your theme /li /ulpDrupal creates aggregates for each of these three groups in the head, but can also deploy to the footer when the scope is set to ‘footer.’/p h2When and where to load your JS/h2 pa href=https://www.google.com/url?q=https%3A%2F%2Fapi.drupal.org%2Fapi%2Fdrupal%2Fincludes%2521common.inc%2Ffunction%2Fdrupal_add_js%2F7amp;sa=Damp;sntz=1amp;usg=AFQjCNFRbXdRSctdVe95C47BIZ5oxGE5dw title=Drupal_add_js target=_blankDrupal_add_js/a features a great option in the options array called scope that allows us to load JavaScript in the footer. This helps decrease our visual page load times by moving render-blocking JavaScript out of the way to a place where it won't impede the loading of other assets (like images, styles, other scripts)./p pThe options array also provides an option called emtype/em which defaults to ‘file.’ When using the default option of ‘file,’ it tells Drupal that this is a script hosted on our site, so it's eligible to be aggregated. Combined with the emevery_page/em flag set to ‘true,’ just like with our CSS, these scripts get aggregated with the scripts added using ‘.info’ files into the big site-wide aggregates. If the emevery_page/em option is left out, or it is set to ‘false,’ then these scripts are aggregated as one-offs outside of our main three site-wide JavaScript aggregate files, again, just like with our CSS./p pThe emtype/em option can also be used to create inline scripts, which can be handy in a couple of ways. It will print our JavaScript directly into our header or footer depending on scope, but it's also useful for dynamically loading external scripts so they become asynchronous. Going forward, the a href=https://www.google.com/url?q=https%3A%2F%2Fwww.drupal.org%2Fproject%2Fasync_jsamp;sa=Damp;sntz=1amp;usg=AFQjCNGqvedcmT7hmhpuzGmGWgRce9If8g title=async_js module target=_blankemasync_js/em module/a is probably the way to go. I personally haven't had the opportunity to try it out, but I look forward to the chance. If you've used it, let us know in the comments how it worked out for you./p pThe third 'type' is the one we use for loading external scripts, which we seem to do often these days. Using an asynchronous method, mentioned above, is important because of the additional round-trip time to get the script. However, a slightly less effective way to handle it without using the older method of an inline script, or an additional module, is simply scoping the script to the footer and setting the type option to external (which prevents it from being aggregated)./p pUnlike with CSS, I'm less inclined to add JavaScript on every page because I like to scope JavaScript to the footer whenever possible. Since it isn't blocking render down there, the additional HTTP request doesn't really bother me. Generally, if it's on most pages, or a page visited by most users, go ahead and add it to every page. If it isn't and it's scoped to the footer, then only add it when it is needed. If it has to be in the header, and on an obscure page that isn't frequently visited by users, you're probably going to need to do some A/B testing to compare the performance hit on the obscure page by strongnot including/strong it on all pages vs. the performance hit on all the other pages by strongincluding/strong it on all pages. I like to err on the side of the majority, meaning, I tend to only include the JavaScript on the obscure pages./p h2JavaScript: Know when to say when/h2 pYou can do almost anything with JavaScript, and leveraging a framework like jQuery makes it easier to emwant/em to do everything with JavaScript. However, in addition to blocking page render and increasing the size of the page that has to be processed by the browser, there are other performance considerations with JavaScript. /p pIt runs locally, in the browser, which means it uses a visitor's memory and processor. Poorly written or heavy use of JavaScript can lead to a poor user experience in the form of everything from delayed and choppy animations to browsers becoming unresponsive and/or crashing. For simple animations, consider using CSS3 animations, benchmark them using a tool like Chrome's dev tools or Firebug, and go with the least expensive performance option (these usually end up being the smoothest animations as well)./p pThese script performance problems are often magnified on mobile devices where the hardware resources are more scarce and we often resort to using more JavaScript to solve challenges presented by the smaller viewport. This should reinforce the importance of a mobile first strategy, not only for design but also for development. It also highlights the need for open communication between the product owners, the design team, and the development team./p h2Conclusion/h2 pScripts, like styles, contribute front-end implementations that can seriously hamper Drupal’s back-end magic. By favoring stylesheet aggregation and reigning in exuberant preprocessing, we can save the browser a lot of work. Applying the same principles to JavaScript, while properly placing scripts in the header or footer-based on function, can also improve our page-load times./p pNext time, in our final post of the series, we’ll take a grab-bag look at some subtle, more specialized techniques that just might shave off those last few milliseconds. Stay tuned for a post covering Content Delivery Networks (CDN), semantic HTML, and how to encourage improved client-side content selection./p /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=Front End Performance Strategy: Scripts class=rdf-meta element-hidden/span
Categories: Drupal Feeds

Acquia: Quick Tips for Writing Object Oriented Code in PHP

Thu, 07/09/2015 - 2:15pm
figure class=field-item even rel= resource=https://www.acquia.com/sites/default/files/php-code.jpg class=field-item even div id=styles-3 class=styles styles-field-image styles-style-scale_width_280 styles-container-image styles-preset-scale_width_280 img typeof=foaf:Image src=https://www.acquia.com/sites/default/files/styles/scale_width_280/public/php-code.jpg?itok=sxWIZJng 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 evenpRecently I began working on a D8 module, but this isn't a story about a D8 module. The work I did provided me an opportunity to get back to my pre-Drupal object oriented (OO) roots. Writing OO code in PHP presented some curve balls I wasn’t prepared for. Here are some of the issues I encountered:/p h2PSR-4 Autoloading: How to set up your files to be loaded/h2 pFirst things first, how do you include OO code in your project? In D7 you had to add the files to a .info file for a module or do module_load_include. In D8 all you have to do is follow PSR-4 namespacing. If you follow the PSR-4 folder and namespace structure your classes will be auto-detected. No more need to add them to a .info file! If you are writing code for D8 then it’s done. Great. In D7 you can use the XAutoload module to get PSR-4 autoloading in D7 today!/p h2Namespacing In PHP: Loading your files/h2 pNamespacing in PHP can be confusing and misleading. In Java or .NET, in a file you first import other namespaces you intend to use. In the example below we use the “using” keyword. Then you declare the namespace wrapper for the code that is being implemented. /p p/pdiv class=codeblockcodeusing System;br /using Microsoft.VisualBasic.Devices;br /namespace SampleNamespacebr /{br /    class SampleClassbr /    {br /    }br /}/code/divbr / PHP is VERY different. It’s actually the opposite. First you declare the namespace then inside the namespace you have your “includes.” In PHP including the use statements outside of the namespace would contaminate the global-scope. p/pdiv class=codeblockcodenamespace SampleNamespacebr /use GuzzleHttp;br /use GuzzleHttp\Subscriber;br /br /class SampleClassbr /{br /}/code/divbr / Now this is where things get tricky. If there is a class called Client inside GuzzleHttp then you would expect that you could use it by writing the following. p/pdiv class=codeblockcodenamespace SampleNamespacebr /use GuzzleHttp;br /br /class SampleClass {br / function sampleFunction(){br /          $myClient  = new Client();br /      }br /}/code/divbr / And you would be wrong. The way that PHP interprets classes are RELATIVE to the current file’s namespace. So it actually sees “$myClient = new Client();” as “ $myClient = new SampleNamespace\Client();” which does not exist so the declaration fails. To work around this you can reference the actual class in the use statement. If you have multiple classes you must have an include for each one. It’s more verbose than what you might expect coming from .Net or Java e.g.: p/pdiv class=codeblockcodenamespace SampleNamespacebr /use GuzzleHttp\Client;br /use GuzzleHttp\Subscriber\Mock;br /br /class SampleClass {br / function sampleFunction(){br /          $myClient  = new Client();br /    $mock = new Mock();br /      }br /}/code/div h2Dynamic Typing: A variable can be anything!/h2 pPHP is a dynamically typed language. It provides great flexibility and velocity when coding, especially procedural code. However, this can be a nightmare when you are writing OO code. It means that you cannot make assumptions about the type being passed into an object. If you make assumptions and those assumptions are invalid your code can behave unpredictably. What are you to do? /p h3Type Hint ALL THE THINGS: /h3 pYou might be surprised to know that PHP allows you to apply and enforce function param types. PHP 5 introduced the concept of type hinting. With type hinting you can set type on objects. e.gbr / function sampleFunction(MySampleClass $a){/p pIf a type hint is violated, an InvalidArgumentException is thrown. There is a catch to type-hinting in PHP, it doesn’t work for scalar types e.g (string, int, bool). There is also no type hinting on return types. You’ll have to wait for PHP 7 for both. In order to work around the scalar limitation in PHP5 you’ll need to write your own functions. /p h3Setting up your code for an IDE/h3 pOne of the advantages to writing Object Oriented code is that it works really nicely with an IDE like PHPStorm. If you have written type hinted code PHPStorm will pick up on it and help you with auto completion as you work. For the things that aren’t explicitly hinted you can use PHPDoc comments. e.g/p p/pdiv class=codeblockcode/**br /* Gets a specific setting by its name/ID.br /*br /* @param string $idbr /*   The name/ID of the setting to retrieve.br /*br /* @return ZoneSettingBasebr /*   The setting object given the ID passed in.br /*/br /public function getSettingById($id) {br / return $this-gt;settings[$id];br /}/code/divbr / PHPDoc comments are actually mandatory as part of drupal-coding standards. Their omission causes coder’s code sniffer to fail. pYou can also type-hint variables:/p p/pdiv class=codeblockcode/* @var GuzzleHttp\Client $client/* br /private $client;/code/divbr / While these hints are comments and not syntax they make the developer experience a lot more pleasant. h2No Enums :(/h2 pPHP still doesn’t have a formal enumeration type so you will have to get creative and roll your own. /p pI often create CONST arrays and throw an exception if a function param is not in that array. It’s a poor-man’s enum. There is currently a proposal to add enums to PHP7. We’ll see if it makes the cut!/p h2Associative Arrays/h2 pAssociative arrays reflect the dynamic typed heritage of PHP. They are incredibly flexible and a quick and easy way to move data from one point of your app to another that being said the lack of structure requires a developer to know everything about the underlying implementation of the array. Also without a debugger they have no way to determine what is actually in an array. The dynamic nature of these arrays makes them undocumentable. That makes coding with someone else’s array hard. The idea of OO is that you have structured data and layers of abstraction so that a dev doesn’t need to know the low-level implementation details. When going OO you should try to convert arrays into structured, documentable classes that hide the underlying implementation. If you need to accept an array as input parse it and break it out into objects as soon as possible. Developers will praise you for it!/p h2No Function Overloading/h2 pPHP does not natively support function overloading. Since PHP is dynamic it’s possible to come up with some Frankenstein solutions to get around this. However, Frankenstein code often confuses other developers interacting with your code and is to be avoided. For better or worse you need to accept this constraint. /p h2Dusting off the design cobwebs. How to assign responsibility to classes./h2 pThe lack of overloading can actually be beneficial especially in the context of class constructors. Like normal functions you cannot have multiple constructors in PHP (You can technically write a static class method to work around this constraint). This sounds like a pain. However, it forces you to articulate the single responsibility of a class. Often overloaded class constructors can be a sign that a class is taking on too many responsibilities. For example if you have a constructor that take params and another for parsing an array you might ask why should my class know about another representation. Maybe it's a break in tiered architecture and violating a separation of responsibilities. In this case something that might be perceived as a limitation is actually supportive and liberating. /p h2Go Forth and Write OO Code/h2 pAs we transition into D8 writing solid PHP OO code is more important than ever. D8 is built around OO classes. Even in Drupal 7 we can start to strive towards an OO world. Obviously in Drupal 7 most problems don’t lend themselves to an OO approach. However, even having that option gives you new tools to solve problems in Drupal! The resulting code has a clarity and aesthetic that most procedural code just can’t match./p pFinding those opportunities to apply an OO solution keeps you sharp and ready to hit the ground running on Drupal 8. /p /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=Quick Tips for Writing Object Oriented Code in PHP class=rdf-meta element-hidden/span
Categories: Drupal Feeds

Cruiskeen Consulting: Drupal 8 and hosting requirements

Thu, 07/09/2015 - 12:05pm
div class=field field-name-body field-type-text-with-summary field-label-hidden view-mode-teaserdiv class=field-itemsdiv class=field-item evenpI'm writing a little bit today about some of the concerns that folks are having about Drupal 8, the new hosting requirements it imposes, and particularly the concerns that smaller organizations will not be able to find Drupal 8 compatible hosting plans. There is a lot going on with us and with other hosting companies at the moment to support Drupal 8 and other PHP software that has more modern requirements. We don't think this will be an issue with most reliable hosting companies by the time Drupal 8 ships./pp/div/div/div
Categories: Drupal Feeds

Acquia: Sustainable contribution 2/2 - Giving back is the same as making money.

Thu, 07/09/2015 - 11:35am
div class=form-item form-type-item labelLanguage /label Undefined /div 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 evenp Part 2 of 2 - I spoke with John Faber, Managing Partner with a href=http://www.chapterthree.com/aboutChapter Three/a, on March 17th, 2015. /p p In a href=/podcast/drupal-8/sustainable-contribution%2C-part-1-of-2%3A-how-drupal-has-solved-and-evolved/02/07/2015/3285566part 1/a to talk about the business advantages of contribution and sustainability when basing your business on open source software. We also touch on Drupal 8's potential power as a toolset and for attracting new developers, doing business in an open source context, and more! /p/div /div /div figure class=field-item even rel= resource=https://www.acquia.com/sites/default/files/john_faber_mar15_mp4.png 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=https://www.acquia.com/sites/default/files/styles/scale_width_280/public/john_faber_mar15_mp4.png?itok=0ZrqD9qc alt= title= //div !-- render the title tag as caption -- /figure span property=dc:title content=Sustainable contribution 2/2 - Giving back is the same as making money. class=rdf-meta element-hidden/span
Categories: Drupal Feeds

Drupal Bits at Web-Dev: Drush sql-query output

Thu, 07/09/2015 - 9:47am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpDespite several tries, I have never had any luck using the native sql output formatting commands to work with drush/p/div/div/divul class=links inlineli class=node-readmore firsta href=/info/drush-mysql/drush-sql-query-output rel=tag title=Drush sql-query outputRead morespan class=element-invisible about Drush sql-query output/span/a/li li class=comment_forbidden last/li /ul
Categories: Drupal Feeds

Drupalize.Me: Learning Drupal 8 from Boilerplate Code

Thu, 07/09/2015 - 8:02am
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenDrupal 8 represents a lot of changes and a steep learning curve for many Drupal developers and themers. While many of these changes are exciting, there are many things to learn just to get started. One way to learn about the code involved with Drupal 8 modules and themes is to take a look at core's modules and themes for examples to follow. Another, is to use a code scaffolding tool like Drupal Console to generate boilerplate code and comments that you learn from and then customize./div/div/divdiv id=comment-wrapper-nid-2254/div
Categories: Drupal Feeds

Drupal core announcements: Drupal 8's minimum PHP version increased to 5.5.9

Wed, 07/08/2015 - 11:17pm
pPursuant to the discussion at a href=https://www.drupal.org/node/2296557[policy] Require PHP 5.5/a, the minimum PHP version of Drupal 8 has been raised to 5.5.9, and this change will be included in the next Drupal 8 beta (8.0.0-beta13)./p p(a href=https://www.drupal.org/node/2508231PHP 5.5.9 was chosen/a because it is also the same minimum version as Ubuntu's LTS, which in turn influenced Symfony 3.0, Travis CI, etc.)/p pThis is a future-proofing move which buys us a few things:/p ul liSome a href=http://php.net/manual/en/migration55.new-features.phpnice language features/a and a built-in a href=http://php.net/manual/en/book.opcache.phpopcode cache/a./li liCompatibility with the latest versions of various external dependencies, including Guzzle 6 and the upcoming Symfony 3.0/li liBetter security for our end users, since PHP 5.4 will become end of life September 15, 2015 (most likely prior to Drupal 8's release)./li /ul pWe looked extensively into the adoption and hosting support of PHP 5.5 prior to making this move. While there is not a href=http://w3techs.com/technologies/details/pl-php/5/allwidespread adoption of PHP 5.5 as of today/a, we nevertheless found that most hosts offer the option for PHP 5.5, due to PHP's security policy./p
Categories: Drupal Feeds

Mediacurrent: Mediacurrent Dropcast: Episode 7

Wed, 07/08/2015 - 9:39pm
img typeof=foaf:Image src=http://d1l4od7sxc8nwf.cloudfront.net/sites/default/files/styles/thumb_blog_spotlight/public/introducing-meidacurrent-dropcast-01.png?itok=f65GiXYs width=200 height=152 / pIn this episode we celebrate the founding of our country by talking up a few modules we have discovered and enjoy. Ryan talks about the Image Field Focus module and how it makes cropping a joy without the gamble of a cropping image style. Bob waxes poetic about the WYSIWYG Field module, which is very similar to his WysiField module. As always we keep you up to date about Drupal 8 and Ryan brings it home with The Final Bell. This was recorded on the day before all went out for the holiday weekend so there are times where we derail the train. At least this time we have an excuse./p
Categories: Drupal Feeds