Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 16 min 34 sec ago

ImageX Media: ImageX To Sponsor Present at DrupalCon New Orleans

Thu, 03/17/2016 - 20:10
div class=field field-name-body field-type-text-with-summary pimg typeof=foaf:Image src= alt=Logo for DrupalCon 2016: New Orleans title=DrupalCon Logo //p pImageX is proud to announce our continued support of the Drupal community with our participation at a href= 2016 in New Orleans/a. ImageX will be a Gold sponsor of the event and can be found at Booth #207. We will also be one of the three key sponsors at the Higher Education Summit on Monday, May 9th./p /div

Pronovix: Two-way sync between Drupal and Google Contacts using PieSync

Thu, 03/17/2016 - 17:58
pMost SaaS integration services that synchronise user accounts, do a one-way sync that copies over to new accounts. PieSync has developed a powerful two-way sync platform, with various sync settings, so you can sync contact information between your favorite cloud apps. We’ve been talking with Piesync about creating a module to sync user profiles between Drupal and Google Contacts, your CRM and other cloud apps./p

Palantir: D8FTW: REST in Core

Thu, 03/17/2016 - 17:16
span class=featured-blog-image img typeof=foaf:Image src= width=262 height=175 alt=D8FTW blog post image - REST in Core title=D8FTW blog post image - REST in Core / /span pDrupal 8 core offers a routing and request handling pipeline that gives developers more control over how to handle an incoming request than ever before. Developers can route an incoming request based on any HTTP property, or even derived information. Controllers can return page bodies, full responses, domain objects that can be turned into full responses, or anything else PHP supports./p pThat's great, but doesn't that mean we have to then, um, do all of that ourselves? We can, and many times we should, but in many cases we don't have to!/p pCore ships with a trio of modules that enable push-button support for offering up content as a Web service, and (you guessed it) can be enhanced via contrib./p h3Serialization/h3 pThe first is the strongSerialization.module/strong, which in turn is built on the Symfony Serializer component. The Serialization module offers a standard way to convert a classed object to a serialized string and back again. That process consists of two phases: A emNormalizer/em, which converts between an object and a known nested-array structure (and back again), and an emEncoder/em, which converts between that array structure and some string format (and back again). A serializer object contains a set of normalizers and encoders, and can figure out on the fly which to use./p pThe Serializer includes normalizers for content entities as well as JSON and XML encoders. That means core provides clean round-trip support between any content Entity and any defined output format. That is, once you pass the serializer service as a dependency to your code you can simply do this:/p div class=codeblockcodespan style=color: #000000span style=color: #0000BBlt;?phpbr /$json /spanspan style=color: #007700= /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBserializer/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBserialize/spanspan style=color: #007700(/spanspan style=color: #0000BB$entity/spanspan style=color: #007700, /spanspan style=color: #DD0000'json'/spanspan style=color: #007700);br //spanspan style=color: #0000BB$xml /spanspan style=color: #007700= /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBserializer/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBserialize/spanspan style=color: #007700(/spanspan style=color: #0000BB$entity/spanspan style=color: #007700, /spanspan style=color: #DD0000'xml'/spanspan style=color: #007700);br //spanspan style=color: #0000BB?gt;/span/span/code/div pPoof, we now have a JSON-ified version of an entity and an XML-ified version of the entity. And we can go the other way, too:/p div class=codeblockcodespan style=color: #000000span style=color: #0000BBlt;?phpbr /$entity /spanspan style=color: #007700= /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBserializer/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBdeserialize/spanspan style=color: #007700(/spanspan style=color: #0000BB$json/spanspan style=color: #007700, /spanspan style=color: #0000BBNode/spanspan style=color: #007700::class, /spanspan style=color: #DD0000'json'/spanspan style=color: #007700);br //spanspan style=color: #0000BB?gt;/span/span/code/div pThe net result is that we now have a standard universal serialized format for all entities! Or at least for their internal structure, which is appropriate in some cases but not all./p pIt's also straightforward to write new Normalizers and Encoders, as they're simply tagged services with a defined interface. Another core module, strongHAL.module/strong, provides serializers and encoders using the Hypertext Application Language format, a special flavor of JSON (or XML) that includes hypermedia links as well./p h3REST Resources/h3 pThe third core module is strongREST.module/strong. REST module uses the core plugin system to define rest resource plugins. Each resource can live at a defined path pattern, which implies one or more routes at that path, and has separate methods for handling each HTTP method it supports. Resources do not need to correspond to any other Drupal object; they can, but there's nothing inherent in them that requires them to do so. That's good, because REST resources need not, and often should not, correspond to underlying objects in the system./p pA method on a REST plugin acts as a controller, and while it can return any value it generally will return a special subclass of codeResponse/code called codeResourceResponse/code that will handle serializing a data object provided on it as well as setting appropriate cache tags. Core provides two resource plugins, one for content entities, the most likely to be used, and one for database logs, mostly just to prove that it can be done. In fact, the database log resource is quite simple:/p div class=codeblockcodespan style=color: #000000span style=color: #0000BBlt;?phpbr //spanspan style=color: #FF8000/**br /* Provides a resource for database watchdog log /*br /* @RestResource(br /*   id = dblog,br /*   label = @Translation(Watchdog database log),br /*   uri_paths = {br /*     canonical = /dblog/{id}br /*   }br /* )br /*/br //spanspan style=color: #007700class /spanspan style=color: #0000BBDBLogResource /spanspan style=color: #007700extends /spanspan style=color: #0000BBResourceBase /spanspan style=color: #007700{ p /p/spanspan style=color: #FF8000/**br /  * Responds to GET /  *br /  * Returns a watchdog log entry for the specified /  *br /  * @param int $idbr /  *   The ID of the watchdog log /  *br /  * @return \Drupal\rest\ResourceResponsebr /  *   The response containing the log /  *br /  * @throws \Symfony\Component\HttpKernel\Exception\HttpExceptionbr /  */br //spanspan style=color: #007700public function /spanspan style=color: #0000BBget/spanspan style=color: #007700(/spanspan style=color: #0000BB$id /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700) {br /  if (/spanspan style=color: #0000BB$id/spanspan style=color: #007700) {br /    /spanspan style=color: #0000BB$record /spanspan style=color: #007700= /spanspan style=color: #0000BBdb_query/spanspan style=color: #007700(/spanspan style=color: #DD0000SELECT * FROM {watchdog} WHERE wid = :wid/spanspan style=color: #007700, array(/spanspan style=color: #DD0000':wid' /spanspan style=color: #007700=gt; /spanspan style=color: #0000BB$id/spanspan style=color: #007700))br /      -gt;/spanspan style=color: #0000BBfetchAssoc/spanspan style=color: #007700();br /    if (!empty(/spanspan style=color: #0000BB$record/spanspan style=color: #007700)) {br /      return new /spanspan style=color: #0000BBResourceResponse/spanspan style=color: #007700(/spanspan style=color: #0000BB$record/spanspan style=color: #007700);br /    } p    throw new /p/spanspan style=color: #0000BBNotFoundHttpException/spanspan style=color: #007700(/spanspan style=color: #0000BBt/spanspan style=color: #007700(/spanspan style=color: #DD0000'Log entry with ID @id was not found'/spanspan style=color: #007700, array(/spanspan style=color: #DD0000'@id' /spanspan style=color: #007700=gt; /spanspan style=color: #0000BB$id/spanspan style=color: #007700)));br /  } p    throw new /p/spanspan style=color: #0000BBHttpException/spanspan style=color: #007700(/spanspan style=color: #0000BBt/spanspan style=color: #007700(/spanspan style=color: #DD0000'No log entry ID was provided'/spanspan style=color: #007700));br /  }br /}br //spanspan style=color: #0000BB?gt;/span/span/code/div pIn this case, all that's provided is GET support. POST or PUT requests will automatically be rejected with an HTTP 405 (Method Not Allowed) error. The resource is exposed at the URI code/dblog/{id}/code. And all it does is read back a single record out of the watchdog log as an array, which will get normalized to JSON or XML or whatever was requested by the serializer. (You likely shouldn't enable log Web service resources in production, but it's fun to play with on your own server to get a feel for how the system works.)/p pThe plugin for content entities leverages the entity's already-defined path, so that the serialized version of an entity, such as a node or taxonomy term, lives at the same path as the HTML version of it. They are the same underlying object so should be exposed as just different representations of the same resource./p h3REST UI/h3 pFor various reasons mainly related to available development time, the UI for REST module lives in contrib. The a href= UI module/a provides a basic UI for configuring which REST resources should be enabled, which methods should be allowed, which formats are allowed, and which authentication mechanisms are allowed. (Core offers cookie-based auth and HTTP Basic Auth, the latter of which is only ever safe over SSL. Contrib also offers an a href= module/a.) See the screenshots below./p pimg src= width=834 height=944 alt=REST UI overview graphic title=REST UI overview graphic //p pimg src= width=867 height=793 alt=REST UI configuration graphic title=REST UI configuration graphic //p pSo for example, we can enable GET JSON requests for Taxonomy terms, GET and PUT HAL requests for Nodes, and not expose anything else as an API; and just by checking a few boxes. (Isn't that the definition of success in Drupal, just checking a few boxes?)/p h3Caveats/h3 pThere are two limitations of the core REST support that are important to mention. A moment ago we said that we use the same path for both the HTML and JSON/XML/Whatever version of an entity. That's true, but we don't, technically, use the same URI./p pHTTP, by design, allows a request to specify what formats they're willing to accept for a resource, using the codeAccept/code header. The server will then compare that list against what it knows it can offer and send back the best option or an error that it cannot find a workable format. However, sending back different formats from the same URI creates a caching problem, as any proxy servers or browsers that try to cache the response can cache whichever format is requested first, then send that format (wrongly) in the future on other requests. Again, the spec has a simple solution here: The codeVary/code header on the Response, which can be used to tell clients and proxies to use both the URI and the Accept header to determine if a request matches a cached response. Problem solved, right?/p pWell, it would be if clients followed the spec. Unfortunately there's a number of issues in practice:/p

KnackForge: Easy way to add Google web fonts to Photoshop

Thu, 03/17/2016 - 17:00
span data-quickedit-field-id=node/326/title/en/rss class=field field--name-title field--type-string field--label-hiddenEasy way to add Google web fonts to Photoshop/span div data-quickedit-field-id=node/326/body/en/rss class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itempGoogle Fonts is an absolutely awesome collection of web fonts that you may use in your HTML web pages without any restrictions./p pThese fonts not only look more beautiful than the common typefaces like Arial and Verdana, but they are more readable as well, since the fonts have been designed specifically for the web. Also, all Google web fonts are offered under the Open Font License, meaning that you may use them even in commercial projects without worrying about the licensing issues./p/div span data-quickedit-field-id=node/326/uid/en/rss class=field field--name-uid field--type-entity-reference field--label-hiddena title=View user profile. href=/manoj lang= about=/manoj typeof=schema:Person property=schema:name datatype= class=usernameManoj/a/span span data-quickedit-field-id=node/326/created/en/rss class=field field--name-created field--type-created field--label-hiddenThu, 03/17/2016 - 20:30/span span class=a2a_kit a2a_kit_size_32 addtoany_list data-a2a-url= data-a2a-title=Easy way to add Google web fonts to Photoshopa class=a2a_dd addtoany_share_save href=;title=Easy%20way%20to%20add%20Google%20web%20fonts%20to%20Photoshop/aa class=a2a_button_facebook/a a class=a2a_button_twitter /a a class=a2a_button_google_plus/a a class=a2a_button_linkedin /a a class=a2a_button_pinterest /a/span

Steve Purkiss: Ask the Angels: Drupal.Contractors Drupal.Agency

Thu, 03/17/2016 - 14:34
div class=field field-name-ds-user-picture field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/member/steve-purkissimg typeof=foaf:Image src= alt=Steve Purkiss#039;s picture title=Steve Purkiss#039;s picture //a/div/div/divdiv class=field field-name-post-date field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evenThursday, 17th March 2016/div/div/divdiv class=field field-name-title field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item even property=dc:titleh1Ask the Angels: Drupal.Contractors amp; Drupal.Agency/h1/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:encodedpimg alt=Mum and me src= style=height: 300px; width: 400px; border-width: 0px; border-style: solid; margin: 5px; float: right; //p h1 Home is where the heart is/h1 pLast week I visited my mother back in Essex. It was good to see her as it was Christmas last time I visited and I only went for a day as I'd taken on a Drupal 8 project which needed a huge amount of work to get ready for when everyone returned after the holiday period. In some ways I wish I hadn't have bothered, I was told it looked more like three days work than seven and it took me a long time to get the money out of them. By the way they were demonstrating it to the client within a few minutes showing what I'd built, I presume it worked fine ;)/p pMy mother never stops, she's always doing something. I looked over from the sofa and she was trying to fit a thread through the smallest needle hole I'd ever seen - I said to her after a few strokes I think I'd just be happy to have people wait on me all day if I ever made it to her age! I thanked her for the determination though as I see that she's passed that down to me. We seemed to talk differently this time, as if we knew there was no point in saying anything that wasn't of importance as we never know if we will have the opportunity to do so again. My mother has been ill most of the time I remember, I hope she will be around for many years to come but of course we simply don't know, I've had two friends die in the last year alone, both with young children, both for seemingly pointless reasons - one was out jogging, the other out cycling when hit by an airshow plane doing stuff it seems by all accounts it shouldn't have been doing, but that's another, still ongoing, story./p pLater on I looked out of the window and saw a blackbird really up close to the door and, with the slurred speech that she has now post-stroke that upsets her because it's annoying not to be able to get the words out, my mum said I've been talking with my angels. They say the blackbirds are grandma keeping an eye on us./p pNow, I'm open-minded but skeptical when it comes to blackbirds being grandma, but who is to say one way or another? We don't really know they aren't, we just use our 'common sense' and move along with our day. Well, that's what I did, but it did make me think about angels in the business sense of the word and how they help businesses get up and running with their support. It also made me realise that I want to be closer to my mum than I am now, and with synchronicity as it is I saw a 3-bed house with the same rent as my 1-bed flat going which is literally one minute's walk away from her house. It sure would be great to go back and be of help taking her to appointments and driving around various sheltered housing schemes as she realises she needs to be somewhere with help. I wish I had a big villa in Spain we could all live in, but I don't. I did, back in my Ecademy networking days, bring her up to London for a meal at the House of Lords, that was nice. Mostly I'd just like to be with her to help where I can, I feel helpless here in Brighton./p h1 1st Community Business BoF at DrupalCamp London/h1 pimg alt=Biz BoF at DrupalCamp London src= style=float: left; width: 400px; height: 300px; border-width: 0px; border-style: solid; margin: 5px; //p pThe previous weekend I had spent at City University in London where they were holding the fourth DrupalCamp London and the second I was giving a session at. I am incredibly fearful of giving sessions but I realise that is one of the major ways of communicating your message so I forced myself to apply. Last time I kind of chickened out and made a video, and I felt really bad about missing the opportunity I could've had if I'd turned up even more than turning up and playing a video, so this time I did a proper 'session'. I am sure some found it strange, but I also got great feedback, and we continued the conversation in a BoF on the Sunday./p pI was incredibly encouraged that, after eight years of championing community-business in Drupal people were starting to get it at last! It would be great to have Community Business BoFs amp; sprints at every camp!/p pI even said to one of the organisers who mentioned they were presenting Drupal at a marketing event that next week that it was great to see them starting to work together like a Virtual Enterprise Network. When we come together as a community, we shine. /p h1 Launching Drupal.Contractors amp; Drupal.Agency/h1 pIn the BoF I mentioned I'd managed to break the concept down into workable chunks aligned to existing business flows - one site focused at contractors, one for agencies. This way communities could be built around existing money-making activities in order to redirect the flow inwards, so for example agencies could put money in to exhibit at non-Drupal events, contractors could find better suited projects via skills tabs, etc./p pAt the time I was awaiting Dries' response as to whether I could use the domain names as they have the Drupal trademark in them. I believe they are needed in order to raise projects which are community-owned, not just Steve's Sites, so it was important I went about the correct way of asking permission, and of course ensuring that the project itself would reflect the community well./p pI was surprised and shocked when I saw a tweet from one of the agencies who had gone to this show that they had set up a site utilising the Drupal trademark, but mainly pointing to these three companies. An obvious lead-collection tool which I've used many times having come from proprietary software houses many years ago. I'm glad to have left that world behind, and knowing quite how much other people and companies have put into the latest version of Drupal, whilst I appreciated the efforts of these companies I didn't like their approach and tweeted as such. A further tweet I posted with information about the ownership of the domain seems to be causing an issue at the moment, to me it seems more diversionary tactics as the site still seems to be up there, but that's another story too and one I guess I will hear about soon enough. Seems people's time should be being spent on other, more worthwhile things than trying to alter history and cover up evidence./p pSo I asked Dries what the deal was with using the trademark, to which he replied as long as it's owned by the community and open to all then I have no problem with it. So, instead of chasing another most probably unsuitable paid project I decided although I didn't have much resources I'd start to build Drupal.Contractors and Drupal.Agency. I'd also applied to DrupalCon New Orleans with my two sessions and a grant application, sadly I heard last night I didn't get either of those. I understand 700 sessions submitted and they have to choose 130. I've always thought a VR conference would be good, we'll see./p pimg alt=Old office src= style=width: 400px; height: 300px; border-width: 0px; border-style: solid; margin: 5px; float: right; //p h1 Startups Come amp; Go/h1 pOne the way to DrupalCamp London I walked past the office where I worked for a company called RemoteApps back in the dotcom days 1999ish. I was the sixth person to join and we went up to sixty before investors pulled out of all the tech stocks in the 'dotbomb' - I was worth over a million dollars on paper at one point, then it was just paper the next./p pWe had a brilliant product, it was the first modular web app software, modules for Content, Collaboration, and Commerce. We built the first site and the New Beetle for VW when it came out. But we couldn't scale well - started off as a consultancy, then a software house and we worked with a number of integration partners to deliver the product to end clients. It was in J2EE but at the time Java needed rewriting for every server so although portability was a great idea, it was a massive job getting it to work in each big implementation./p pI did however get a good grounding in Content Management Systems, pitching and winning against Interwoven and other big players of the day. We were put in the same Gartner Quadrant as Acquia is now, we had pretty much the same product - except Java and not Open Source. In fact my boss on the way out when asked what he'd do differently next time he said he'd Open Source it. Little did I know when I was walking out the door that Dries had just released Drupal!/p pI promised myself at the time I'd never be in a position where I wasn't in control - I was being given mortgage advice the week before I was made redundant by my boss who knew all about it, I don't like that sort of thing, I like people being upfront./p h1 Modular Business for Modular Software/h1 pSince that day I was made redundant back in 2001 I've managed to stay independent but today I find myself back in the position of having no money and looking at the Wonga site (it's Drupal did you know) thinking about how it could buy me that coffee which will stop this massive constant headache I've had all day due to lack of caffeine. I'm being evicted from my flat because my landlord refuses to fix the mice infestation problem so after it taking three years to get a working boiler I decided to stop paying rent until it was sorted, of course that's not happening, he just sent me eviction notice./p pI started up Drupal.Contractors and Drupal.Agency and working on Drupal.Contractors for just a week has brought members but it hasn't brought revenue. Last time I tried this was back in 2013 after I'd spend a year being the first Community-elected Director of the Drupal Association. It was a pretty interesting year but I couldn't get much done, I think it is a top-down institution trying to support a bottom-up community however all that seems to happen is the ones who pay the money get listened to. We have the opportunity to vote another board member in and voting closes today but I've not voted, I honestly do not currently see the benefits of something which is trying to do too much - I appreciate the work the DA does, but it can't do everything, and that's where I think member-owned platform cooperatives come in. Along with FairShares model where customers can invest alongside investors, founders, and workforce, provide a realistic and scalable way forward./p pI truly believe we need to set up these institutions which will go to serve us, the members as a whole, not just a select few. I need capital to do it though and that's where I asked an investor. He said I need to do my lean canvasses. I can do those, if I can eat./p pSo I need your help. I don't want to make people pay for their profiles on the sites (am hoping pantheon will give me a community account anyway), that was a silly idea and only done out of desperation - if everyone just stares at me and says hey isn't it buit yet, it's not going to happen. I need to eat, and I don't want to borrow more, I've already invested hundreds of thousands in this and many years, now I need to know you are there supporting too./p pIf you are a contractor, please register on the site, if you are an agency, please register your interest. Think of it as NHS-like support - if we only let the businesses make the rules then we will end up with a very different Drupal than we have right now. The one right now offers opportunity for all, not just those who can afford it. To do this, I believe I need at least £100k/y, ten times that amount if we want to show at shows other than DrupalCamps which will be good for signing up contractors. Would be great to have at events around the world though, no? And I hate having to write begging blogs like this but we really have to come together now as a community and realise stuff like this costs money to make, we have a lot of catching up to do!/p pAre you the Angels I'm looking for? If you'd like to invest in drupal.contractor and/or and help make them great and the best resource on the net then please get in touch. If you have any amount you can donate to the feed Steve fund, please make payments to Stephen B. Purkiss:/p div Nationwide Building Society/div div 56/57 High Street, Chelmsford, Essex CM1 1DH/div div Sort code: 07-44-56/div div Account No.: 06093285/div div IBAN: GB11 NAIA 0701 1606 0932 85/div div BIC: NAIAGB21/div div SWIFT Intermediary Bank: MIDLGB22/div div  /div div I also have PayPal at a but would prefer transfer so don't lose a percentage./div div  /div div Investors please email me direct, the above is for donations only, no return apart from the fuzzy feeling you kow Steve's been fed ;)/div div  /div div Thank you, I hope I can keep continuing to work for the Drupal amp; larger Free Software community for many years to come./div /div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-inline inlinediv class=field-labeltags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tags/drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=drupal/a/divdiv class=field-item odda href=/tags/drupal8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=drupal8/a/divdiv class=field-item evena href=/tags/drupal-contractors typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=drupal contractors/a/divdiv class=field-item odda href=/tags/drupal-agency typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=drupal agency/a/divdiv class=field-item evena href=/tags/drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal Planet/a/divdiv class=field-item odda href=/tags/planet-drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Planet Drupal/a/div/div/div

Blair Wadman: Delete all nodes from a particular content type using Drush generate

Thu, 03/17/2016 - 11:00
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpYou’ll often find yourself having to delete all content for a particular content type. You may have tested imported content via feeds and you then need to delete what you’ve imported. Or content was created that is no longer required./p/div/div/div

Appnovation Technologies: Fast Forward With Open Source

Thu, 03/17/2016 - 09:00
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encoded pemThis blog post is featured on the a href=;preview=1amp;_ppp=f8f08c91fa target=_blankBlack Duck Software Blog: Open Source Delivers. /a/em/p/div/div/divdiv class=field field-name-field-blog-header-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/blog/fast-forward-open-sourceimg typeof=foaf:Image src= width=1400 height=400 alt= //a/div/div/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url= st_title=Fast Forward With Open Source class=st_facebook/span span st_url= st_title=Fast Forward With Open Source class=st_twitter/span span st_url= st_title=Fast Forward With Open Source class=st_sharethis/span /div/div Budget Goggles - creating a common language and setting expectations

Thu, 03/17/2016 - 00:00
pBy default IT projects will fail. They may still launch but not accomplish any one of the following requirements of a successful project: on time, within budget, with happy users./p pGizra addresses this by defining the ambiguous with the simple but powerful principle that the strongbudget dictates the project/strong. It all begins (and ends) at the price estimation. Our budget breakdown creates a common language for all stakeholders and sets expectations early on./p pAfter a strongdiscovery phase/strong, the project is broken down to strongtimeboxed tasks/strong - each with a clear deadline and cost to produce the deliverable. We set the maximum time to complete a task at 12 hours because this number is easily grasped by all stakeholders. Every feature and bug has a price tag and we encourage our clients emnot/em to try to buy them all (at least not at first)./p pAn example of our budget breakdown:/p div class=thumbnail img src=/assets/images/posts/budget-goggles/image1.jpg /div pa href= reading…/a/p

DrupalCon News: 21 Grants and Scholars to Join Us in New Orleans

Wed, 03/16/2016 - 23:52
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpWe at the Drupal Association are happy to help Drupalers who are making a difference get to the Cons. We had many incredible applicants, and you can check out the information about who applied and how the money was divided up below as well as a list of the deserving recipients that will be joining us in New Orleans./p pimg alt= src= //p/div/div/div

Mike Ryan: A personal migration

Wed, 03/16/2016 - 21:35
pAll things must pass... After four and a half years with a href=https://www.acquia.comAcquia/a, the time is ripe for me to return to the consulting world. I've resurrected a pre-Drupal d.b.a., a href=http://virtuoso-performance.comVirtuoso Performance/a, and will be doing Drupal migration consulting under that moniker going forward. I appreciate my time at Acquia - I've learned a lot, and worked with some great people - but I miss the freedom and flexibility of consulting. /p h2Business models/h2 pGenerally, in the past I've been involved in migration projects from end-to-end:/p ol liAnalyzing source data, and working with site-builders and stakeholders to work out what legacy data maps to what Drupal entities./li liArchitecting the migration implementation - figuring out an optimal class hierarchy, constructing the initial implementation, etc./li /olpa href= target=_blankread more/a/p

OSTraining: Setting up Your Drupal Acquia Dev Desktop

Wed, 03/16/2016 - 20:20
div class=ost-intro-imageimg src= alt=Setting up Your Drupal Acquia Dev Desktop width=200 height=133 //div pAcquia Dev Desktop is a free app that allows you to run and develop Drupal sites locally on your computer./p pYou can use Acquia Dev Desktop to evaluate Drupal, test modules, and develop sites while on a plane or away from an internet connection./p pprovides a fully functional test area with minimal set-up required. While setting up your own server configuration isn't overly hard on Linux, it can be on Windows and Mac. Acquia Dev Desktop is available for Windows and Mac./p

ImageX Media: Don't Let Your RFP Become a Failure

Wed, 03/16/2016 - 20:01
div class=field field-name-body field-type-text-with-summary pimg alt=Jenna and Stephanie from Trinity University class=media-element file-default data-file_info=%7B%22fid%22:%221666%22,%22view_mode%22:%22default%22,%22fields%22:%7B%22format%22:%22default%22,%22field_file_image_alt_text%5Bund%5D%5B0%5D%5Bvalue%5D%22:%22Jenna%20and%20Stephanie%20from%20Trinity%20University%22,%22field_file_image_title_text%5Bund%5D%5B0%5D%5Bvalue%5D%22:%22Jenna%20and%20Stephanie%20from%20Trinity%20University%22%7D,%22type%22:%22media%22%7D src= title=Jenna and Stephanie from Trilt;/bodygt;lt;/htmlgt; //p /div

Acquia Developer Center Blog: Benefits of Testing, PHP FIG, Drupal 8 - with Sebastian Bergmann, 2 of 2 [video]

Wed, 03/16/2016 - 17:14
div class=field field-name-field-podcast-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg typeof=foaf:Image src= width=340 height=260 alt=PHPUnit and PHP Fig logos title=PHPUnit and PHP Fig logos //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:encodedpstrongPart 2 of 2/strong - Sebastian Bergmann, the maintainer of the PHPUnit testing framework, came to our office in Cologne, Germany to talk with Campbell Vertesi (a href= and me about PHP, a href= FIG/a and the a href=, and of course testing. It is another in the series of interviews we carried out with important and interesting people from the PHP community in preparation for DrupalCon Asia in Mumbai./p pOur session, emMeet PHP-FIG: Your community just got a whole lot bigger, Drupal/em is about Drupal 8’s membership in the world of PHP interoperability. We’re covering the basics of what the PHP Framework Interoperability Group (PHP-FIG) is, what the various PSRs are and do, and talking about testing and dependency management, and what it means to be a part of the new PHP community — including having better architecture, cleaner code, and less risk thanks to more interoperability. All of this adds up to a big move to get projects “off their islands,” saving developers a lot of code and companies a lot of money, among other benefits./p blockquotepemstrongI always think about testing as an investment into the future. I also like to think about tests as being executable specification and or documentation of my software./strong/em/p/blockquote piframe frameborder=0 height=360 src= width=640/iframe/p pstrongQ: How can testing save people time and frustration?/strong/p pstrongSebastian:/strong I always think about testing as an investment into the future. It’s incredibly hard to believe if you have never done it and have not been doing it for a couple of months because we have to make this experience – just that it’s one of those things that most people don’t believe when they are told or when they read about it. You have to make the experience yourself. “It’s an investment into the future,” like I said./p pSo today I have the requirements for some process of my application and I implement that. Then in six months’ time or next year, something changes. I make the change and I don’t know--if I don’t have tests in place--that by making that change I did not break anything else that used to work. If I have tests in place I first go in (and if I do test-driven development), then I change the test first to reflect the new requirements. I run the test and the test will not work ... of course. The software has not been adapted yet for that. I also like to think about tests as being executable specification and or documentation of my software. So I’ve changed my specification. Okay so I’ve written down in code what the software should do and then I make the change. Now the test can tell you you things. Yes, the thing that you wanted to change now behaves in the way that you wanted it to behave after the test. More importantly, all the other things around it that are not supposed to change have in fact not changed./p pstrongQ: It makes any change or any pivot or any addition to what you’ve written much, much easier and much more efficient and much more - with a lot less risks in it./strong/p pstrongSebastian:/strong It reduces the risk but it also reduces the time that it takes and that’s the most fascinating thing. There are plenty of studies out there from Microsoft, from Ericsson, from IBM that said when a team starts to introduce test driven development, for instance. For the first couple of months or so they will be 15% to 30% slower than they used to be because they have to learn a new tool. They have to wrap their head around a new process. After that they become much more productive because they spend almost no time on debugging anymore./p pstrongQ: Because they’re testing before they commit?/strong/p pstrongSebastian:/strong Yes./p pstrongQ: Actually when we think about it that way then the value of the test increases proportionate to the complexity of the application./strong/p pstrongSebastian:/strong Yes./p pstrongQ: If you’re writing a 15-line PHP snippet, writing a test is not going to help you. On the other hand if you’re writing a piece of code that has to integrate into a really complex multi headed application--I’m looking at every Drupal developer in the world--then writing a test for that 15 lines can make a really big difference for you./strong/p pstrongSebastian:/strong That is true. I don’t remember who said it but there’s also a saying in the testing community that it doesn’t go about the size of the project but they say you don’t need to test code that never changes. So if you are really, really sure that the piece of software that you have just written never ever change then don’t waste time writing test for it because you have just written it and you have done some manual testing around it to make sure that it works. Then there’s no need to invest in automated testing./p pstrongQ: Does that exist? How often does that come?/strong/p pstrongSebastian:/strong Never! You wouldn’t believe the kind of conversations I had - with customer management or been told by developers from conversations they had with their management or their customers, “We need this piece of software. It’s a one off thing. The software that only ever be in production for two weeks before this event and one week afterwards and then we delete it ... But it was so successful! Now we keep it and now it’s running for 10 years. Where the hell did these problems come from? What were the developers thinking? Why didn’t they do their job properly?” Because nobody told them that this was going to be in production for such a long period of time./p pstrongQ: The PSRs, the PHP FIG itself defining logging interfaces, defining how to store stuff, how to think about stuff. I think with these three ingredients in place allowed the Drupal community for example to build the first Meta PHP product. Its pieces of Symfony. It’s all these external libraries. It’s our own code ... I contend the Drupal 8 is a sign that PHP is in a new phase now./strong/p blockquotepBeware of your temporary solutions; they're the ones you're going to have to live with the longest./p/blockquote pstrongQ: Back to the new phase of PHP interoperability, PHP FIG, Composer, and Drupal 8 .../strong/p pstrongSebastian:/strong It’s definitely a new phase. For me that phase started when PHP projects started to use RFCs for major language changes. So for me that was an important step forwards for the PHP project itself. A little bit later it started this Composer, PHP FIG, and so on. To be honest, personally, I’m a bit skeptical whether PSRs for logging, caching HTTP and so on are really that valuable and if there’s actually a problem that they solved and if there’s a problem, if those PSRs are the right solution to that but ... I believe you – when you tell me from the Drupal community’s perspective that they solve problems./p pstrongQ: Conceptually at least other people definitely argue that if your product is following that standard you know that your thing - you write a wrapper for it, you write it in the same way, you can plug and play and that’s going to be valuable in the same way in terms of efficiency and reliability./strong/p pQ: Well, I really think about it in terms of expanding the power of the developer. It used to be ... when I came to Drupal I had to learn not only an entirely new API, but new coding standards, new ways of thinking about fundamentals that I thought I understood from my work with WordPress, with elgg and with other PHP-based CMSs. I see the PSRs as a way out of that. Modern develop shops ... actually the first place we’ve given this talk is in India where lots of developers are asked to learn new languages really quickly. Somebody signs a contract that says, “You’re going to learn this language.” Sure you can figure Drupal, right? If you already know the standards from your work in a previous project it really reduces the [learning] curve, I think./p pstrongQ: For us as Drupal developers, learning Drupal 8 means that actually we can go and use anything that uses Symfony components and have a pretty good idea of what’s going on because we’ve got nine of the important ones in Drupal 8. So, this commodity functionality idea I think is a real accelerator. I think developers can benefit from that too./strong/p pstrongQ: Why should Drupalists be excited about PHPUnit?/strong/p pstrongSebastian:/strong Testing changes your perspective on how you code, on how you work. It solves so many problems, the least of which in my opinion is that you’re sure that the code does what it is supposed to be doing. You get so much valuable feedback while you’re writing a test about the quality of the code itself that you’re testing and you rethink, “I could do this in a different way to reduce the headache that I will have maintaining this code over a longer period of time.”/p pstrongQ: I wanted to ask for the managers out there. We talked before about the learning curve when you start testing software, that you can expect your developers to take 15% to 30% more time just because they’re learning a new tool./strong/p pstrongSebastian:/strong To put that into context ... Those are studies from by now 10 years ago, some even older than 10 years ago. I think by now, for a lot more developers than 10 years ago, it’s normal to know the tools to some degree already./p pstrongQ: Or have used some kind of testing already./strong/p pstrongSebastian:/strong ... have done some kind of automated testing and have heard at least about the fact that you can do things like test first programming, test driven development and so on. So it’s not an entirely alien concept any more when these studies first came out./p pstrongQ: You’d be surprised ;-) So we have this rough idea of what the cost is when you get your team into a testing suite. Do we have any idea of what the time savings is like? We’re investing in the future, what’s our return on investment?/strong/p pstrongSebastian:/strong So if I remember the numbers correctly from one of those studies, they said that without automated testing embedded into the development process, developers spend somewhere between 40% and 60% of their time on debugging. That goes very close towards zero when you’re doing testing properly. So maybe not entirely down to 0% but somewhere between 5% and 15% maybe. A lot less time spent on debugging. That’s time that you are working on features./p pstrongQ: So 40% more productivity./strong/p blockquotepemstrongTesting changes your perspective on how you code, on how you work. It solves so many problems, the least of which in my opinion is that you’re sure that the code does what it is supposed to be doing. You get so much valuable feedback while you’re writing a test about the quality of the code itself that you’re testing and you rethink, “I could do this in a different way to reduce the headache that it will have maintaining this code over a longer period of time.”/strong/em/p/blockquote h2Guest dossier/h2 ulliName: Sebastian Bergmann/li liWork affiliation: I’m a a href= and principal consultant/a with the PHP Consulting Company, a We help companies from small web agencies to Fortune 500 companies make better use of the PHP platform./li liTwitter: a href= liGitHub: a href= liLinkedIn: a href= Bergmann/a/li liBlog/Website: a href= liFOSS role: Maintainer of PHPUnit/li liCurrent projects: a href=http://phpunit.dePHPUnit/a [a href= article on PHPUnit/a]/li li1st version of PHP: PHP 3/li liAbout: Hi, I’m Sebastian and it’s 2016 now, so about 15 years ago, I started to work on a tool that is called PHPUnit, which I, at least, back then, never believed and sometimes even today, don’t really believe that it has happened, has become the de-facto standard in the PHP world for doing unit testing, integration testing and all other kinds of testing./li /ul/div/div/divdiv class=field field-name-field-podcast-audio field-type-file field-label-hiddendiv class=field-itemsdiv class=field-item evenaudio controls=controlssource src= type=audio/mpeg //audio/div/div/divdiv class=field field-name-field-podcast-series field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelPodcast series:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/podcast-series/drupal-8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal 8/a/div/div/divdiv class=field field-name-field-skill-level field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelSkill Level:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/skill-level/beginner typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Beginner/a/divdiv class=field-item odda href=/skill-level/intermediate typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Intermediate/a/div/div/div

ThinkShout: Meet ThinkShout at the 2016 Nonprofit Technology Conference

Wed, 03/16/2016 - 16:00
pIt’s that a href= Technology Conference/a time of year. The NTC is one of our favorite conferences, as it’s an amazing place for us to learn more about the exciting work being done in the nonprofit world. It’s also a great time to for us to share what we’ve been doing, and make connections. So if you’re curious about a job opening we’ve posted, or have a project you’d like to talk to us about, the NTC is a great place to have those conversations!/p pThere are a few places you can connect with us this year./p h2 id=drupal-dayDrupal Day/h2 pWe’re co-sponsoring a href=http://ntcdrupalday.orgDrupal Day/a on March 22nd along with the fine folks at Aten Design, Four Kitchens, Forum One, Message Agency, and Zivtech. We’ve got a jam packed day of breakout sessions and nonprofit case studies lined up. There’s a great variety of session topics to choose from, from content strategy, Drupal fundraising, and theming to web projects on a nonprofit budget, so there will be something for everyone at Drupal Day!/p pWant to stop by a ThinkShout-led breakout session at Drupal Day? Lev Tsypin and Amy Vaillancourt-Sals have a couple of sessions on the docket you should check out. Lev will be leading “Fundraising in Drupal” at 9:30 am, and Amy will be leading “Web Development Within Your Means” at 1:45 pm./p pYou can check out the full a href= Day schedule online./a If you’re planning on attending the NTC, but haven’t registered for Drupal Day and would like to, no problem. Just show up that morning and we’ll take care of the rest./p h2 id=sessionsSessions/h2 pThere are two ThinkShout sessions in the official NTC schedule. Natania LeClerc and Lev Tsypin will be teaming up with Christian Anthony of for “a href=, Don’t Tell: Online Storytelling on Digital Media/a” on Wednesday, March 23rd at 3:30 pm./p pOn Thursday, March 24th at 1:30 pm, you can catch Brett Meyer, Lara Koch from the Humane Society of the United States, Melissa Barber from North Peak at their session, “a href= I Only Had a Frame(work): Crafting User Experiences Across 3rd Party Systems/a.”/p pThese sessions are great opportunities for you to see our staff in action, sharing their expertise with the nonprofit tech community. Be sure to follow a href= and a href= on Twitter for updates on their sessions – and feel free to pick their brains in person!/p h2 id=exhibit-hallExhibit Hall/h2 pstrongBooth #715/strong is the ThinkShout HQ at the 2016 Nonprofit Technology Conference. We’re debuting a brand new, super comfy shirt, so be sure to stop by and pick one up. This year, the exhibit hall will be closed during sessions, but you’re guaranteed to find us there during the breaks in between. If you’re looking to talk shop, or learn more about the services we offer, definitely stop by the booth. If you’d like to plan on a specific time to meet in advance, drop us a line and we’ll make it happen./p pAt the very least, you should stop by our booth for a chance to win your very own Bluetooth BB-8. Or, as we like to call it, our new office best friend. Yes, you’ll get a chance to meet it before you take it home./p p class=centerimg src=/assets/images/blog/bb8.jpg alt=Image: BB-8 /span class=captioni class=fa fa-caret-up/i“Beep boop”/span/p pWe’ll see you all in San Jose!/p

Matt Glaman: Get to know Drupal 8!

Wed, 03/16/2016 - 15:35
div class=field-body p style=text-align:centerimg height=286 width=480 class=media-element file-default typeof=foaf:Image src= alt= title= //ppMy book, the a target=_blank rel=nofollow class=twitter-timeline-link href= 8 Development Cookbook/a, recently published! To celebrate this, and Drupal 8, Packt Publishing has a special sales campaign for learning about Drupal 8. If you are looking to learn how to use and develop with Drupal 8, use the coupon code codeDRUPAL850/codenbsp;(through April nbsp;23rd 2016) and click any of the following links:/pdiv class=clearfix style=clear:botha target=_blank rel=nofollow class=twitter-timeline-link href= height=373 width=302 style=width: 302px; height: 373px; float: right; margin: 5px class=media-element file-default typeof=foaf:Image src= alt= title= //ah3a target=_blank rel=nofollow class=twitter-timeline-link href= 8 Development Cookbook/a/h3blockquoteOver 60 hands-on recipes that get you acquainted with Drupal 8#39;s features and help you harness its power/blockquote/divdiv class=clearfix style=clear:bothpa target=_blank rel=nofollow class=twitter-timeline-link href= height=373 width=302 style=width: 302px; height: 373px; float: right; margin: 5px class=media-element file-default typeof=foaf:Image src= alt= title= //a/ph3a target=_blank rel=nofollow class=twitter-timeline-link href= 8 Theming Twig/a/h3blockquotepMaster Drupal 8rsquo;s new Twig templating engine to create fun and fast websites with simple steps to help you move from concept to completion/p/blockquote/divdiv class=clearfix style=clear:botha target=_blank rel=nofollow class=twitter-timeline-link href= height=373 width=302 style=width: 302px; height: 373px; float: right; margin: 5px class=media-element file-default typeof=foaf:Image src= alt= title= //ah3a target=_blank rel=nofollow class=twitter-timeline-link href= 8 Module Development/a/h3blockquoteCreate and design your own modules and websites from scratch with Drupal 8 with this book and ebook/blockquote/divdiv class=clearfix style=clear:botha target=_blank rel=nofollow class=twitter-timeline-link href= height=373 width=302 style=width: 302px; height: 373px; float: right; margin: 5px class=media-element file-default typeof=foaf:Image src= alt= title= //ah3a target=_blank rel=nofollow class=twitter-timeline-link href= Drupal 8/a/h3blockquoteCreate complex websites quickly and easily using the building blocks of Drupal 8, the most powerful version of Drupal yet/blockquote/divdiv class=clearfix style=clear:botha target=_blank rel=nofollow class=twitter-timeline-link href= height=373 width=302 style=width: 302px; height: 373px; float: right; margin: 5px class=media-element file-default typeof=foaf:Image src= alt= title= //ah3a target=_blank rel=nofollow class=twitter-timeline-link href= 8 Configuration Management/a/h3blockquoteMake the most of Drupal 8#39;s coolest new featuremdash;the Configuration Management system/blockquote/div /div

OpenLucius: Drupal Module moment: WYSIWYG Filter

Wed, 03/16/2016 - 12:15
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpimg src= width=1440 height=960 alt= class=img-responsive //p pEvery now and then you come across a module you wished you saw before. And I wonder why we did not discover this one earlier: a href= Filter/a. It even exists since Drupal 6./p h2WYSIWYG Filter is solving the following problem:/h2 /div/div/div

Lullabot: Get a decorator for your Drupal home

Wed, 03/16/2016 - 09:01
div class=rich-texth2Design patterns/h2 pa href= design patterns/a#xA0;are general and strongreusable/strong#xA0;software design strongsolutions/strong#xA0;to a defined problem. They were popularized in 1994 by the em#x201C;Gang of Four#x201D;/em#xA0;after their book a href= Patterns: Elements of Reusable Object-Oriented Software/a./p pThese generic solutions are not snippets of code, ready to be dropped in your project, nor a library that can be imported and reused. Instead they are a templated solution to the common software challenges in your project. Design patterns can also be seen as strongbest practises#xA0;/strongwhen encountering an identified problem./p pWith Drupal 8#x2019;s leap into modern PHP, design patterns are going to be more and more relevant to us. The change from (mostly) procedural code to (a vast majority of) object oriented code is going to take the Drupal community at large through a journey of strongadaptation to the new programming paradigm/strong. Quoting the aforementioned emDesign Patterns: Elements of Reusable Object-Oriented Software/em:/p pcite[#x2026;] Yet experienced object-oriented designers do make good designs. Meanwhile new designers are overwhelmed by the options available and tend to fall back on non-object-oriented techniques theyapos;ve used before. It takes a long time for novices to learn what good object-oriented design is all about. Experienced designers evidently know something inexperienced ones donapos;t. What is it?/cite/p pEven if you don#x2019;t know what they are, you have probably been using design patterns by appealing to emcommon sense/em. When you learn what they are you#x2019;ll be thinking #x201C;Oh! So that thing that I have been doing for a while is called an adapter!#x201D;. Having a label and knowing the correct definition will help you strongcommunicate better/strong./p h2The decorator/h2 pAlthough there are a href= design patterns#xA0;you can learn, today I want to focus in one of my favorites: a href= decorator/a./p pThe decorator pattern allows you to do strongunobtrusive behavior inheritance/strong. We can have many of the benefits of inheritance and polymorphism without creating a new branch in the class#x2019; inheritance tree. That sounds like a mouth full of words, but this concept is especially interesting in the Drupal galaxy./p pIn Drupal, when you are writing your code, you cannot possibly know what other modules your code will run with. Imagine that you are developing a feature that enhances the codeentity.manager/code#xA0;service, and you decide to swap core#x2019;s codeentity.manager/code#xA0;service by your enhanced version. Now when Drupal uses the manager, it will execute your manager, which extends core#x2019;s manager and overrides some methods to add your improvements. The problem arises when there is another module that does the same thing. In that situation either you are replacing that module#x2019;s emspiced/em#xA0;entity manager or that module is replacing your improved alternative. There is no way to get both improvements at the same time./p pThis is the type of situations where the decorator pattern comes handy. You cannot have this new module inheriting from your manager, because strongyou don#x2019;t know/strong if all site builders want both modules enabled at the same time. Besides, there could be an unknown number of modules #x2013;even ones that are not written yet#x2013;#xA0;that may create the conflict again and again./p h2Using the decorator/h2 pIn order to create our decorator we#x2019;ll make use of the interface of the object we want to decorate. In this case it is codeEntityManagerInterface/code. The other key component is the object that we are decorating, let#x2019;s call it strongthe subject/strong. In this case our subject will be the existing object in the codeentity.manager/code#xA0;service./p pTake for instance a decorator that does some logging every time the codegetStorage()/code#xA0;method is invoked, for debugging purposes. To create a decorator you need to create a pristine class that implements the interface, and receives the subject./p pre code class=language-phpclass DebuggableEntityManager implements EntityManagerInterface { protected $subject; public function __construct(EntityManagerInterface $subject) { $this-gt;subject = $subject; } }/code/pre pThe key concept for a decorator is that we are going to strongdelegate /strongallstrong method calls/strong to the subject, except the ones we want to override./p pre code class=language-phpclass DebuggableEntityManager implements EntityManagerInterface { protected $subject; // ... public function getViewModeOptions($entity_type_id) { return $this-gt;subject-gt;getViewModeOptions($entity_type_id); } // #x2026; public function getStorage($entity_type) { // We want to add our custom code here and then call the #x201C;parent#x201D; method. $this-gt;myDebugMethod($entity_type); // Now we use the subject to get the actual storage. return $this-gt;subject-gt;getStorage($entity_type); } } /code/pre pAs you have probably guessed, the subject can be the default entity manager, that other module#x2019;s spiced entity manager, etc. In general you#x2019;ll take whatever the codeentity.manager/code#xA0;service holds. You can use any object that implements the codeEntityManagerInterface/code./p pAnother nice feature is that you can decorate an already decorated object. That allows you to have multiple decorators adding different features without changing the inheritance. You can now have a decorator that adds logging to every method the entity manager executes, on top of a decorator that adds extra definitions when calling codegetFieldDefinitions()/code, on top of #x2026;/p pI like the a href= making example/a#xA0;in the decorator pattern entry in Wikipedia, even if it#x2019;s written in Java instead of PHP. It#x2019;s a simple example of the use of decorators and it reminds me of delicious coffee./p h2Benefits and downsides/h2 pOne of the downsides of using the decorator pattern is that you can strongonly act on public methods/strong. Since you are #x2013;intentionally#x2013; not extending the class of the decorated object, you don#x2019;t have access to any private or protected properties and methods. There are a couple of situations similar to this one where the decorator pattern may not be the best match./p pThe business logic you want to override is contained in a protected method, and that method is reused in several places. In this case you would end up overriding all the public methods where that protected one is called./p pYou are overriding a public method that is executed in other public methods. In such scenario you would not want to delegate the execution to the subject, because in that delegation your overridden public method would be missed./p pIf you don#x2019;t find yourself in one of those situations, you#x2019;ll discover that the decorator has other strongadditional benefits/strong:/p ulliIt favors the a href= responsibility principle/a./li liIt allows you to do the decoration during a href=, whereas subclassing can only be done in a href= liSince the decorator pattern is one of the commonly known design patterns, you will not have to thoroughly describe your implementation approach during the a href= scrum/a. Instead you can be more precise and just say #x201C;I#x2019;m going to solve the problem using the decorator pattern. Tada!#x201D;./li /ul h2Write better designs/h2 pDesign patterns are a great way to solve many complex technical problems. They are a heavily tested and discussed topic with lots of examples and documentation in many programming languages. That does strongnot/strong imply that they are your strongnew golden hammer/strong, but a very solid source of inspiration./p pIn particular, the decorator pattern allows you to add features to an object at run-time while maintaining the object#x2019;s interface, thus making it compatible with the rest of the code without a single change./p /div

Chapter Three: Accelerating Drupal 8 Through Adoption

Wed, 03/16/2016 - 00:54
pSince making the decision to use Drupal 8 for all new projects Chapter Three has become even more active in the issue queues. We actively invest in Drupal 8 every day, funding Alex to work on it full time, as well as ensuring every employee and contractor has time to contribute./pbr / br / pOver the last several months.../pbr / br / pWe spearheaded a port of Doubleclick module to Drupal 8/pbr / br / ullia href= for Drupal 8/a/libr / /ulpWe've worked on improving some of our debugging tools:/pbr / br / ullia href= Module contributions/a/libr / lia href= helped out with Hacked/a/libr / lia href= conflicts with Media Entities/a/libr / /ulpWe've created some new modules for Drupal 8 inspired by our Drupal 8 projects/p

Agaric Collective: Web Components: What are they, and can we use them yet?

Wed, 03/16/2016 - 00:45
p class=leadTalk about web components has been going for quite some time now: the term was coined in 2011. In this blog post, I will discuss the basics of what they are and what they do, and introduce the primary technological foundations for them. In future articles, I'll dig into the specifics and sample code - as they are currently supported or else poly-filled for today./p pWeb Components are a group of related standards promising to bring component-based extensibility to HTML documents. The great promise is that once you or someone else builds some component that provides a particular feature, it can easily be included and reused in other projects. For example, if you've created, say, a treeview component that displays data in a tree form, you can wrap up the definition of this in a component. Then, it would be possible for anyone to include the component easily wherever they might want to use a treeview. We'll ultimately get to defining our own components in a future article, but for now, let's look at a special sort of built-in web component./p pPerhaps the most common HTML element that comes up when discussing web components is: the video tag. This is because the video tag offers a simple and very clear browser-native example of precisely what a web component looks like from the point of view of a consumer of a particular of a web component. If we were to include a video tag in a page, we don't end up with a naked auto-paying video display (by default). Instead, we end up with a nice little video player, complete with start/stop/seek and volume controls offered up by our browser:/p pimg src= alt= /br / [A video control as rendered by Chromium]/p pIn our browser (which again, in this case is Chromium), we can select the developer tools option under the General section / Elements titled Show user agent shadow DOM. Given this option is set, we are able to see how Chromium builds upon the video tag when it is rendered:/p pimg src= alt= /br / [Displays shadow root]/p pAs you can see, beneath the video element comes one of the core pieces of the Web Components technologies: the shadow-root. Chromium has treated the video tag as a shadow host which is a containing element for a shadow root, off of which hangs the implementation of the video element's controls. This shadow host/shadow root mechanism is the basis for encapsulation in web components: it separates the details of an element's implementation from the outside document. CSS styles and JavaScript inside the shadow root are scoped to that element. Inside of the shadow root, the implementation of the video tag is a sub-tree of elements which is not directly inline with the the document's top-level DOM. This means, for example, you can neither find nor directly address elements within the shadow root./p pThere are at least a few libraries that enable building web-components for current browsers, regardless of browser support for the standards-based web components support. The one I'll demonstrate quickly here is pulled directly from polymer's home page. I'm using this because it demonstrates what I believe is about as close to the implementation of the ideal for web components (from a consumer perspective) aside from having to use a polyfill for some browsers today:/p pre class=brush: html lt;!-- Polyfill Web Components support for older browsers --gt; lt;script src=;lt;/scriptgt; lt;!-- Import element --gt; lt;link rel=import href=; lt;!-- Use element --gt; lt;google-map latitude=37.790 longitude=-122.390gt;lt;/google-mapgt; /prep Again, the polyfill ensures that our browser will handle the subsequent tags. This library aims to support the core web components features in a way that is consistent with the core web-components as the standards evolve. The link tag is another standard web component feature, though a href= title=Mozilla and Web Components: UpdateMozilla is not favoring supporting it further/a, that essentially imports an external definition which in this case is the definition of the google-map tag. When all browsers support web components natively, things will hopefully be as simple as importing the reference to the component and then using it, as is done in the last statement above./google-map/p pHopefully this gives you a quick glimpse into how web components might make our web applications grow through a variety of new interface tools we can build on, extend, and easily utilize. In future articles, we'll look at examples of using the various building blocks of web components, and how the technology continues to evolve./p ul class=inline lia href=/tags/web-components typeof=skos:Concept property=rdfs:label skos:prefLabel datatype= class=badge badge-info p-categoryi class=icon-tag icon-white/i Web Components/a/li lia href=/tags/drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype= class=badge badge-info p-categoryi class=icon-tag icon-white/i Drupal Planet/a/li /ul

Dries Buytaert: A MAP for accelerating Drupal 8 adoption

Tue, 03/15/2016 - 23:02
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpContributed modules in Drupal deliver the functionality and innovation proprietary content management solutions simply can't match. With every new version of Drupal comes the need to quickly move modules forward from the previous version. For users of Drupal, it's crucial to know they can depend on the availability of modules when considering a new Drupal 8 project or migrating from a previous version. /p pI'm pleased that many agencies and customers who use Drupal are donating time and attention to maintaining Drupal's module repository and ensuring their contributed modules are upgraded. I believe it's the responsibility of Drupal companies to a href= back to the community/a. /p pI'm proud that a href=http://acquia.comAcquia/a leads by example. It was with great pride that Acquia created a Drupal 8 Module Acceleration Program, or MAP. Led by Acquia's John Kennedy, MAP brings financial, technical and project management assistance to Drupal module maintainers. Acquia kicked off MAP in mid-October and to date we have helped complete production-ready versions of 34 modules. And it is not just any modules; we've been focused on those modules that provide critical pieces of functionality used by most Drupal sites. /p pWhen MAP was formed a href=http://acquia.comAcquia/a allocated $500,000 to fund non-Acquia maintainers in the community. In addition, we have so far invested more than 2,500 hours of our own developers' time to support the effort (the equivalent of three full-time developers)./p pWhat is impressive to me about MAP is both the focus on mission-critical modules that benefit a huge number of users, as well as the number of community members and agencies involved. John's team is leading a coalition of the best and brightest minds in the Drupal community to address the single biggest obstacle holding Drupal 8 adoption back./p pDrupal 8 has already made a significant impact; in the 90 days following a href= release of Drupal 8.0.0/a, adoption has outpaced Drupal 7 by more than 200 percent. And as more modules get ported, I expect Drupal 8 adoption to accelerate even more./p /div/div/div