AdoptOS

Assistance with Open Source adoption

Open Source News

5 Tips to Optimize Your E-commerce Business for Mobile

PrestaShop - Fri, 12/29/2017 - 05:46
In 2018, there's one truth all e-commerce retailers should know: if you don't have a mobile presence, you're likely on the fast track to irrelevance.
Categories: E-commerce

Joomla Year in Review - 2017

Joomla! - Thu, 12/28/2017 - 07:00

There are many fine achievements to reflect on as we look back on 2017. Most importantly the Joomla Project wants to say a massive "thank you" to all our volunteers. As an open source project, Joomla can only achieve what it does with the valuable contributions of our extensive global community of hard-working volunteers. On behalf of the Joomla Project, Thank You!

Categories: CMS

4 Maneiras de Construir a Confiança do Cliente com Design

Liferay - Wed, 12/27/2017 - 12:35

A presença online de uma empresa desempenha uma importante função para criar e manter a confiança de clientes em potencial e já existentes. Embora informações úteis, excelente atendimento ao cliente e produtos de qualidade façam parte deste processo, o design da experiência do usuário em um website pode desempenhar papel fundamental para estabelecer a confiança dos visitantes.

Design tem um impacto subconsciente sobre o quanto o público confia intrinsecamente nas informações fornecidas por um site. O Stanford Web Credibility Project constatou que 46 por cento dos consumidores entrevistados avaliaram a credibilidade de um site baseada parte no design visual geral de um site, incluindo layout, tipografia, tamanho da fonte e esquemas de cores.

Os quatro elementos a seguir do design da experiência do usuário podem afetar consideravelmente a confiança da sua audiência e devem ser levados em consideração na construção da identidade online da sua empresa.
 

1. O Efeito Estética-Usabilidade

De acordo com o efeito Estética-Usabilidade, um termo cunhado pelo Nielsen Norman Group, coisas bonitas são normalmente vistas como mais fáceis de usar e mais valiosas do que as coisas percebidas como feias. Isso significa que um site ou aplicativo com boa aparência impactará de maneira assertiva as reações iniciais dos usuários. Com uma boa resposta emocional ao design visual, os clientes serão mais tolerantes com problemas menores relacionados à usabilidade e as empresas começarão suas relações com o público de modo positivo.

No entanto, ele ainda deve ser fácil de usar. Uma boa aparência deve estar entrelaçada a um design bem feito. Caso contrário, os sentimentos positivos iniciais dos usuários não irão longe. Quando combinado com os outros elementos citados aqui, os benefícios de uma excelente experiência digital podem ter um impacto mais duradouro.

2. A Importância da Transparência

Conforme discutido pelo UX Design, os clientes apreciam um certo grau de transparência em relação às empresas que compram online e pessoalmente. Isto inclui informações sobre funcionários, clientes, propósito, e preços, por exemplo, em interações online. No entanto, a transparência não se aplica apenas ao conteúdo fornecido online, mas também à forma como é apresentado ao público.

Quanto mais difícil seja encontrar informações valiosas, mais os clientes irão desconfiar de um negócio. Assim como um site deve ser projetado para ajudar os visitantes a encontrarem os serviços que eles precisam com a maior facilidade possível, o design também deve permitir aos usuários localizarem preços e informações da empresa sempre que precisarem. Se parecer que o layout de um site é feito para esconder informações cruciais, os potenciais clientes podem suspeitar rapidamente de um negócio quando se trata de suas práticas.

3. Consistência no Design

A consistência em todo o site desempenha papel importante na manutenção da confiança criada por um visitante. Caso ele ou ela de repente encontre uma seção do site que não se encaixe no resto, suspeitas e preocupações podem surgir rapidamente sobre a segurança, confiabilidade e profissionalismo da própria empresa. O Appcues recomenda uma auditoria de consistência, onde uma empresa faz um inventário de todos os pontos de contato do usuário para ver se aspectos como o design, os recursos, as funcionalidades, o tom, a marca e os rótulos estão alinhados uns com os outros durante estes momentos.

Se houver falta de congruência entre páginas de destino, serviços ou qualquer outra, os visitantes podem ficar confusos e podem sentir que o negócio não pode fornecer uma experiência profissional. Assim, certificar-se de que existe consistência no design da experiência do usuário em tudo apresentado ajudará a criar interações imersivas.

4. Forneça Experiências Seguras

O público de hoje está se tornando mais consciente do que nunca das possíveis ameaças de segurança que ocorrem online e as conseqüências da violação de informação. Conforme detalhado pelo The Next Web, informar explicitamente os clientes sobre como você está protegendo seus dados pode ter um grande impacto positivo no nível de confiança no site da empresa.

Isso pode ser feito de várias maneiras, incluindo o fornecimento de um selo de aprovação do serviço de segurança que está sendo usado e um resumo de como as informações confidenciais são armazenadas e se são compartilhadas ou não. Claro, estas recomendações vêm com a necessidade de realmente fornecer a segurança prometida aos clientes e não apenas promessas falsas. Existem poucas maneiras de perder mais rapidamente a confiança dos clientes do que sofrer uma grande violação de dados de informações sensíveis de usuários.

Os Benefícios da Confiança do Cliente

De acordo com um estudo da Wunderman, 79% dos consumidores afirmam que as marcas devem demonstrar sua compreensão e cuidado com eles antes da compra de um produto ou serviço. No entanto, a confiança do cliente desempenha um papel importante, não apenas garantindo a primeira compra de um cliente, mas também incentivando a fidelidade a longo prazo a uma empresa. Desde a primeira interação e, esperançosamente, através do processo de muitas compras, um cliente deve confiar em uma empresa e nos produtos que ela oferece antes de investir seu tempo e suas finanças. Um design forte e centrado na confiança pode fazer diferença tanto no sucesso a longo como a curto prazo nas relações cliente-negócio.

O Caminho para Melhores Experiências do Usuário

Design melhor, plataformas digitais mais fortes e maiores insights de clientes levam a uma maior confiança do público. Saiba mais sobre as estratégias que usam estes elementos para criar uma melhor experiência do cliente e maiores níveis de confiança dos consumidores.

Leia “Quatro Estratégias para a Transformação Digital do Negócio”

Luciano Demery 2017-12-27T17:35:27Z
Categories: CMS, ECM

Meet Jose & Ismael, Ambassadors of the month | December 2017

PrestaShop - Tue, 12/26/2017 - 18:00
Jose and Ismael are our very enthusiastic Ambassadors in Malaga and always organize their meetups together!
Categories: E-commerce

A Core Team Christmas Special

CiviCRM - Fri, 12/22/2017 - 16:30

Welcome to the December core team update - special holiday edition. There's lots of goodies under the tree and we can't wait for you to open them.

What we've been working on:

The core team is transitioning to a monthly task cycle where we'll publicly set a goal for the month, work on it and report back to the community afterwards. To bring you up to speed on our goals and accomplishments over the past few months:

Categories: CRM

Como Avaliar Plataformas de Website

Liferay - Fri, 12/22/2017 - 14:29

O sistema de avaliação para plataformas de sites pode ser muito diferente dependendo da cultura da sua organização e da personalidade da sua equipe de gerenciamento de projetos. Ao estabelecer uma abordagem de avaliação padronizada, você pode simplificar o processo de compra, revisar as plataformas igualmente e criar uma estratégia de pontuação que pode ser revisada para projetos futuros. Aqui estão cinco etapas para avaliar plataformas de sites que podem ser facilmente aplicadas a qualquer outra solução de software que você planeje comparar.

Dica: Acelere seu processo de avaliação  baixando nossa planilha editável de critérios de avaliação. Ela inclui as categorias de critérios e os cálculos detalhados abaixo. Faça o download agora

#1 - Defina Critérios de Avaliação

A definição de critérios de avaliação começa com requisitos de coleta no início de um projeto. Reúna os pedidos do usuário e divida-os em categorias claras, com uma lista de recursos dentro de cada um. Estes recursos devem ser fáceis de definir e medir. Por exemplo, "Boa UI" não é um requisito útil, mas "O sistema simplifica o desenvolvimento de páginas web que alavancam temas, regras de acesso e componentes da web" é melhor.

Existem cinco áreas de critérios recomendadas:

  • Custo: Players já estabelecidos, como a IBM, a Oracle e a Microsoft, possuem plataformas caras e estruturas complexas de manutenção e de preços de suporte, mas muitas vezes competem com uma ampla rede de parceiros. As plataformas de código aberto podem oferecer opções mais acessíveis com uma rede de especialistas muito maior, graças ao uso de padrões abertos e metodologias de desenvolvimento.
  • Risco: Determine o nível de risco aceitável para custos a longo prazo, capacidades de integração, risco de product chaining e satisfação do usuário final.
  • Controle: As empresas muitas vezes precisam encontrar um equilíbrio entre centralizar e distribuir o controle para agilizar a tomada de decisões e manter o nível de capacidade de resposta da equipe.
  • Conhecimento do usuário final: Ninguém gosta de uma solução difícil de usar. Priorizar soluções que são intuitivas incentiva a adoção do usuário. Isto é especialmente verdadeiro para soluções que atinjam diversos públicos, como portais ou ferramentas de colaboração.
  • Diversidade: As empresas podem reduzir a manutenção e suporte se simplificarem a revisão e o cumprimento das necessidades organizacionais de gerenciamento de produtos e de conteúdos em um nível alto, especialmente quando as necessidades centrais e departamentais diferem.

Esstas áreas podem ser organizadas por função, como Portal ou Colaboração Social. É preciso apenas ter cuidado para não esquecer as áreas que não estão ligadas a um recurso específico, como o risco de implementar um sistema que o forçará a usar mais produtos da mesma empresa na linha.

#2 - Quantifique

Quantificar o processo de avaliação torna a comparação mais fácil e precisa. Cada fornecedor deve ser avaliado separadamente com a mesma tabela de critérios, depois classificado em uma escala numérica. Muitas vezes, as partes interessadas podem ficar presas a uma característica particular em uma plataforma, e defenderão isso sem considerar a capacidade total dessa solução. Mensurar seus critérios garante  a devida importância a cada um deles.

Você pode criar sua tabela de critérios com base nos requisitos da sua equipe ou obter um modelo online. Aqui está uma amostra da nossa lista de verificação do Liferay's Buyer's Guide Checklist, um guia de identificação de categorias críticas para plataformas de sites e categoriza as principais características para cada um.

Não importa se você vai utilizar um modelo ou criar o seu próprio, o importante é ter a capacidade de atribuir esses valores numéricos. A partir daí, você tem uma visão profunda dos pontos fortes e fracos de cada plataforma. Você pode comparar os fornecedores por categoria, pelapontuação total, ou pode ponderar os critérios que são mais importantes para o seu projeto. Vamos discutir isso mais abaixo.

#3 - Determine os Casos de Uso

Durante o processo de pesquisa inicial, as equipes de vendas e marketing dos vendedores provavelmente apresentarão todos os cenários possíveis de como suas plataformas podem ser usadas. Existem duas maneiras de filtrar as influências externas e focar no que é relevante para sua avaliação:

Escolha um caso de uso: ao restringir seu escopo para um único caso de uso, você pode limitar os requisitos do projeto que você precisa avaliar e, possivelmente, eliminar alguns critérios padrão. Isso é especialmente útil se você estiver escolhendo uma plataforma para um projeto independente que não precisará se integrar a outros ambientes.

Defina um cronograma: determine a linha de tempo do projeto antes de analisar as soluções, e dê prioridade aos recursos que você precisará durante os estágios iniciais de implementação. Isso garante que você esteja levando em consideração a funcionalidade que você precisará no futuro, mas não sacrificando os recursos que você já conhece.

#4 - Faça Comparação em Níveis Diferentes

Existem três "níveis" diferentes que você pode (e deve) usar durante sua avaliação.

Pontuação Geral: Depois de avaliar todos os fornecedores , veja a pontuação geral de cada um. No exemplo do nosso Buyer’s Guide, este é o valor total de todos os números mais à direita, adicionados, para um possível total de 1.465 pontos. Além disso, observe a distribuição de pontuação em toda a tabela. É possível que um fornecedor tenha uma pontuação geral alta, mas ainda assim ter mais notas “1” do que outro fornecedor. A procura de uma distribuição uniforme de pontuações altas ajuda a garantir consistência e a contabilizar o equilíbrio geral da plataforma.

Classificação de Categoria: Cada plataforma também pode ser dividida em categorias - por exemplo, Portal, Colaboração, Gerenciamento de Conteúdo Web e assim por diante. Ao comparar pontuações nas categorias mais importantes para o seu projeto, você pode obter mais informações para fazer um julgamento de valor. Tenha em mente que um fornecedor com a pontuação geral mais alta ainda pode marcar mais baixo na categoria mais importante para seu projeto.

Pontuação Ponderada: Alguns critérios serão mais importantes para o seu projeto do que outros. Enquanto um vendedor pode pontuar bem em três perguntas, mas mal em uma, um segundo vendedor pode fazer o contrário. Se um vendedor obteve um desempenho a desejar em uma das características mais importantes, então a pontuação final pode representar mal o vendedor. Para ajustar estas prioridades, adicione um peso a cada linha após a conclusão da tabela. As equipes do projeto podem usar um peso de 1 a 5 para cada linha e, em seguida, multiplique para calcular o valor colocado na coluna mais à direita para cada linha. Por exemplo, se o fornecedor classificar "4" para uma pergunta com um peso de 5, o valor colocado na coluna mais à direita seria de 20.

#5 - Não Descarte uma Avaliação Qualitativa

Depois que sua equipe passou pelas pontuações quantitativas, você deve contrabalançar com uma revisão qualitativa. Isso deve incluir revisão e discussão dos resultados finais, bem como uma combinação dos seguintes critérios:

  • Demonstração de Perguntas e Respostas
  • Prova de conceito
  • Teste de software
  • Referência de clientes
  • Avaliações online

Para essas discussões, é importante trazer partes interessadas de vários departamentos para atender às preocupações de todos os usuários finais.

Uma Melhor Ferramenta de Tomada de Decisão

Um processo de avaliação não se destina a somente definir um número claro para ajudá-lo a escolher uma plataforma. É uma ferramenta para orientar sua equipe no pensamento de todas as capacidades de uma plataforma e ser preciso em como você mede os pontos fortes e fracos de cada uma. Ao identificar, não apenas os seus requisitos, mas como esses requisitos afetam uns aos outros e esclarecem suas prioridades, é muito mais provável que sua empresa escolha uma plataforma de sites que atenda às suas necessidades de curto prazo e de longo prazo.

  Isabella Rocha 2017-12-22T19:29:41Z
Categories: CMS, ECM

Twenty Years and Counting

Open Source Initiative - Fri, 12/22/2017 - 09:14

The third decade of open source software starts in February 2018. How did it rise to dominance, and what’s next?

20 years ago, in February 1998, the term “open source” was first applied to software, Soon afterwards, the Open Source Definition was created and the seeds that became the Open Source Initiative (OSI) were sown. As the OSD’s author Bruce Perens relates,

'Open Source' is the proper name of a campaign to promote the pre-existing concept of Free Software to business, and to certify licenses to a rule set.

Twenty years later, that campaign has proven wildly successful, beyond the imagination of anyone involved at the time. Today open source software is literally everywhere. It is the foundation for the Internet and for the worldwide web. It powers the computers and mobile devices we all use, as well as the networks they connect to. Without it, cloud computing and the nascent Internet of Things would be impossible to scale and perhaps to create. It has allowed new ways of doing business to be tested and proven, allowing giant corporations like Google and Facebook to start from the top of a mountain others already climbed.

Like any human creation, it has a dark side as well. It has also unlocked dystopian possibilities for surveillance and the inevitably consequent authoritarian control. It has provided criminals with new ways to cheat their victims and unleashed the darkness of bullying delivered anonymously and at scale. It allows destructive fanatics to organise in secret without the inconvenience of meeting. All of these are shadows cast by useful capabilities, just as every human tool through history has been useful both to feed and care and to harm and control. We need to help the upcoming generation to strive for irreproachable innovation. As Richard Feynman quoted,

To every man is given the key to the gates of heaven. The same key opens the gates of hell.

As open source has matured, so the way it is discussed and understood has also matured. The first decade was one of advocacy and controversy, while the second was marked by adoption and adaptation.

  1. In the first decade, the key question concerned business models – “how can I contribute freely yet still be paid”, while during the second more people asked about governance – “how can I participate yet keep control/not be controlled”.
  2. Open source projects of the first decade were predominantly replacements for off-the-shelf products, while in the second decade they were increasingly components of larger solutions.
  3. Projects of the first decade were often run by informal groups of individuals, while in the second decade they were frequently run by charities created on a project-by-project basis.
  4. Open source developers of the first decade were frequently devoted to a single project and often worked in their spare time. In the second decade, they were increasingly employed to work on a specific technology – professional specialists.
  5. While open source was always intended as a way to promote software freedom, during the first decade conflict arose with those preferring the term “free software”. In the second decade this conflict was largely ignored as open source adoption accelerated.

So what will the third decade bring?

  1. The Complexity Business Model — The predominant business model will involve monetising the solution of the complexity arising from the integration of many open source parts, especially from deployment and scaling. Governance needs will reflect this.
  2. Open Source Mosaics — Open source projects will be predominantly families of component parts, together being built into stacks of components. The resultant larger solutions will be a mosaic of open source parts.
  3. Families Of Projects — More and more projects will be hosted by consortia/trade associations like the Linux Foundation and OpenStack and by general purpose charities like Apache and the Software Freedom Conservancy.
  4. Professional Generalists — Open source developers will increasingly be employed to integrate many technologies into complex solutions and will contribute in a range of projects.
  5. Software Freedom Redux — As new problems arise, software freedom (the application of the Four Freedoms to user and developer flexibility) will increasingly be applied to identify solutions that work for collaborative communities and independent deployers.

The OSI Board of Directors and many Board Alumni will be expounding on all this in conference keynotes around the world during 2018. Watch out for OSI’s 20th Anniversary World Tour!

This article was originally published in Meshed Insights, and was made possible by Patreon patrons.

Image credit: "NextDecade.png" is a derivative of "woodland-road-falling-leaf-natural-38537.jpeg", via Pixabay, and used with permission under Creative Commons Zero (CC0) license.

Categories: Open Source

Twenty Years and Counting

Open Source Initiative - Fri, 12/22/2017 - 09:13

The third decade of open source software starts in February 2018. How did it rise to dominance, and what’s next?

20 years ago, in February 1998, the term “open source” was first applied to software, Soon afterwards, the Open Source Definition was created and the seeds that became the Open Source Initiative (OSI) were sown. As the OSD’s author Bruce Perens relates,

“Open Source” is the proper name of a campaign to promote the pre-existing concept of Free Software to business, and to certify licenses to a rule set.

Twenty years later, that campaign has proven wildly successful, beyond the imagination of anyone involved at the time. Today open source software is literally everywhere. It is the foundation for the Internet and for the worldwide web. It powers the computers and mobile devices we all use, as well as the networks they connect to. Without it, cloud computing and the nascent Internet of Things would be impossible to scale and perhaps to create. It has allowed new ways of doing business to be tested and proven, allowing giant corporations like Google and Facebook to start from the top of a mountain others already climbed.

Like any human creation, it has a dark side as well. It has also unlocked dystopian possibilities for surveillance and the inevitably consequent authoritarian control. It has provided criminals with new ways to cheat their victims and unleashed the darkness of bullying delivered anonymously and at scale. It allows destructive fanatics to organise in secret without the inconvenience of meeting. All of these are shadows cast by useful capabilities, just as every human tool through history has been useful both to feed and care and to harm and control. We need to help the upcoming generation to strive for irreproachable innovation. As Richard Feynman quoted,

To every man is given the key to the gates of heaven. The same key opens the gates of hell.

As open source has matured, so the way it is discussed and understood has also matured. The first decade was one of advocacy and controversy, while the second was marked by adoption and adaptation.

  1. In the first decade, the key question concerned business models – “how can I contribute freely yet still be paid”, while during the second more people asked about governance – “how can I participate yet keep control/not be controlled”.
  2. Open source projects of the first decade were predominantly replacements for off-the-shelf products, while in the second decade they were increasingly components of larger solutions
  3. .
  4. Projects of the first decade were often run by informal groups of individuals, while in the second decade they were frequently run by charities created on a project-by-project basis.
  5. Open source developers of the first decade were frequently devoted to a single project and often worked in their spare time. In the second decade, they were increasingly employed to work on a specific technology – professional specialists.
  6. While open source was always intended as a way to promote software freedom, during the first decade conflict arose with those preferring the term “free software”. In the second decade this conflict was largely ignored as open source adoption accelerated.
  7. So what will the third decade bring?

    1. The Complexity Business Model — The predominant business model will involve monetising the solution of the complexity arising from the integration of many open source parts, especially from deployment and scaling. Governance needs will reflect this.
    2. Open Source Mosaics — Open source projects will be predominantly families of component parts, together being built into stacks of components. The resultant larger solutions will be a mosaic of open source parts.
    3. Families Of Projects — More and more projects will be hosted by consortia/trade associations like the Linux Foundation and OpenStack and by general purpose charities like Apache and the Software Freedom Conservancy.
    4. Professional Generalists — Open source developers will increasingly be employed to integrate many technologies into complex solutions and will contribute in a range of projects.
    5. Software Freedom Redux — As new problems arise, software freedom (the application of the Four Freedoms to user and developer flexibility) will increasingly be applied to identify solutions that work for collaborative communities and independent deployers.
    6. I’ll be expounding on all this in conference keynotes around the world during 2018. Watch out for OSI’s 20th Anniversary World Tour!

      This article was originally published in Meshed Insights, and was made possible by Patreon patrons.

      Image credit: "NextDecade.png" is a derivative of "woodland-road-falling-leaf-natural-38537.jpeg", via Pixabay, and used with permission under Creative Commons Zero (CC0) license.

Categories: Open Source

4.6.34 Released and LTS Year in Review

CiviCRM - Thu, 12/21/2017 - 12:41
SYNOPSIS:

Does this version...?

 

Fix security vulnerabilities?

no

Change the database schema?

no

Alter the API?

no

Require attention to configuration options?

no

Categories: CRM

Workshop at GCC 2017

Knime - Thu, 12/21/2017 - 06:12
Workshop at GCC 2017 heather.fyson Thu, 12/21/2017 - 12:12 November 5 - 7, 2017

KNIME was at the GCC conference in Mainz, November 5-7, 2017, a conference that aims to reflect and highlight the new role of cheminformatics in the modern information world.

We held a workshop: "KNIME Analytics Platform - Bringing Science to Your Data". At the workshop, Greg Landrum showed KNIME's functionality and participants were able to work at a number of exercises.

We have now made the workflows available that were used during the workshop. Participants at the workshop can download these workflows via this link.

Categories: BI

Third party library to Bundle OSGi on Liferay DPX/7

Liferay - Wed, 12/20/2017 - 16:43
Short explanation

If you want to convert a third party library of your portlets (modules) into a Bundle OSGi to be used by all modules, you could create a new module with your third party library and dependences and be used by your modules.

To explain this we will use JasperReport third party library. Supose that you have a module that uses JasperReport to generate PDF files. Probably you have these dependencies in the build.gradle file of your module:

/* POI */ compile group: 'org.apache.poi', name: 'poi', version: '3.15' /* JasperReport */ compile group: 'net.sf.jasperreports', name: 'jasperreports', version: '5.6.1' compile group: 'commons-digester', name: 'commons-digester', version: '2.1' compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.0.1' compile group: 'com.lowagie', name: 'itext', version: '2.1.7.js2'   And you may have this configuration in the bnd.bnd file of your module: Import-Package: \ *;resolution:=optional Bundle-ClassPath:\ .,\ lib/poi-3.15.jar,\ lib/jasperreports-5.6.1.jar,\ lib/commons-digester-2.1.jar,\ lib/groovy-all-2.0.1.jar,\ lib/itext-2.1.7.js2.jar Include-Resource:\ lib/poi-3.15.jar=poi-3.15.jar,\ lib/jasperreports-5.6.1.jar=jasperreports-5.6.1.jar,\ lib/commons-digester-2.1.jar=commons-digester-2.1.jar,\ lib/groovy-all-2.0.1.jar=groovy-all-2.0.1.jar,\ lib/itext-2.1.7.js2.jar=itext-2.1.7.js2.jar -metatype: *   Then you could create a new blank module with this build.gradle file: repositories { mavenCentral() maven{url "http://jasperreports.sourceforge.net/maven2/"} maven{url "http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/"} } configurations { jasperreports { transitive = true } } dependencies { compileOnly group: "org.osgi", name: "org.osgi.core", version: "6.0.0" compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0" /* JasperReport */ compile group: 'net.sf.jasperreports', name: 'jasperreports', version: '5.6.1' compile group: 'commons-digester', name: 'commons-digester', version: '2.1' compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.0.1' compile group: 'com.lowagie', name: 'itext', version: '2.1.7.js2' compile group: 'org.apache.poi', name: 'poi', version: '3.7' }   And this bnd.bnd file: Bundle-Name: jasperreports Bundle-SymbolicName: jasperreports Bundle-Version: 1.0.0 Export-Package: *;-split-package:=merge-last;-noimport:=true Import-Package: \ *;resolution:=optional Bundle-ClassPath:\ .,\ lib/poi-3.7.jar,\ lib/jasperreports-5.6.1.jar,\ lib/commons-digester-2.1.jar,\ lib/groovy-all-2.0.1.jar,\ lib/itext-2.1.7.js2.jar Include-Resource:\ lib/poi-3.7.jar=poi-3.7.jar,\ lib/jasperreports-5.6.1.jar=jasperreports-5.6.1.jar,\ lib/commons-digester-2.1.jar=commons-digester-2.1.jar,\ lib/groovy-all-2.0.1.jar=groovy-all-2.0.1.jar,\ lib/itext-2.1.7.js2.jar=itext-2.1.7.js2.jar -metatype: *   When you build and deploy your new module you will deploy a new module that exports all public class for JasperReport use. You would only need add dependency of your new module in all modules you want to add JasperReport funcionality: compileOnly project(":modules:jasperreports")   Long explanation A usually problem on Liferay 6.x was where you can put your third party library. If you put your third party library into your portlets, you will have very heavy war files (too dificult to manage for your CI System), and other problems. If you decide to put your third party library into your Tomcat lib/ext folder, you will have light war files but you will need to restart your Tomcat Server allways you add a new library or change a library version.  With the new OSGi paradigm, a new world have been opened in front of us. We can put our third party library into modules (as jar files or as unzipped in the module classpath), on our lib/ext Tomcat folder (as in the old version) or into a module witch are used as module of dependencies. The last option (as module) is very interesting because your third party library will be grouped in a module (then your modules may be more ligth) and you won't need to restart your Tomcat Server when you add a new library. Follow these steps to convert your third party library to a new OSGi module:
  • Pass your dependencies configuration from build.gradle file of your module to build.gradle file of the new library module. This will be necesary for download your third party library on your new library module.
repositories { mavenCentral() maven{url "http://jasperreports.sourceforge.net/maven2/"} maven{url "http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/"} } configurations { jasperreports { transitive = true } } dependencies { compileOnly group: "org.osgi", name: "org.osgi.core", version: "6.0.0" compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0" /* JasperReport */ compile group: 'net.sf.jasperreports', name: 'jasperreports', version: '5.6.1' compile group: 'commons-digester', name: 'commons-digester', version: '2.1' compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.0.1' compile group: 'com.lowagie', name: 'itext', version: '2.1.7.js2' compile group: 'org.apache.poi', name: 'poi', version: '3.7' }
  • Pass your dependencies configuration from bnd.bnd file of your module to bnd.bnd file of the new library module. This will be necesary for load your third party library on your new library module jar file.
Bundle-Name: jasperreports Bundle-SymbolicName: jasperreports Bundle-Version: 1.0.0 Import-Package: \ *;resolution:=optional Bundle-ClassPath:\ .,\ lib/poi-3.7.jar,\ lib/jasperreports-5.6.1.jar,\ lib/commons-digester-2.1.jar,\ lib/groovy-all-2.0.1.jar,\ lib/itext-2.1.7.js2.jar Include-Resource:\ lib/poi-3.7.jar=poi-3.7.jar,\ lib/jasperreports-5.6.1.jar=jasperreports-5.6.1.jar,\ lib/commons-digester-2.1.jar=commons-digester-2.1.jar,\ lib/groovy-all-2.0.1.jar=groovy-all-2.0.1.jar,\ lib/itext-2.1.7.js2.jar=itext-2.1.7.js2.jar -metatype: *
  • Then you will need to add a little configuration to Export-Package parameter.
Export-Package: *;-split-package:=merge-last;-noimport:=true

-split-package:=merge-last directive on Export-Package allows fine grained control over what should be done with split packages, merging split packages but overwriting resources that come earlier in the classpath. That is, the last resource wins.

-noimport:=true directive on Export-Package disables automatically import packages by Export-Package directive.

When you build your new library module you will create a jar file with your third party library unzipped into your module and the configuration you need on MANIFEST.MF to use your library on other modules.

Then you will need add the dependency of your new library module into other module these use it:

compileOnly project(":modules:jasperreports")

You can use my example liferay workspace (https://github.com/ironcero/jasperreports-bundle-test).

Edited

As Miroslav said you could simplify this configuration changing the compile directives on your gradle file (build.gradle):

compileInclude group: 'org.apache.poi', name: 'poi', version: '3.7'

With compileInclude Gradle will copy the library jar file in lib folder inside the module jar file. I Built some diferent scenarios trying to understand the diferences between compileOnly, compile and compileInclude. In gradle for OSGi bundle I haven't found any diferences between compileOnly and compile:

For this build.gradle file:

repositories { mavenCentral() maven{url "http://jasperreports.sourceforge.net/maven2/"} maven{url "http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/"} } configurations { jasperreports { transitive = true } } dependencies { compileOnly group: "org.osgi", name: "org.osgi.core", version: "6.0.0" compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0" /* JasperReport */ compileOnly group: 'net.sf.jasperreports', name: 'jasperreports', version: '5.6.1' compile group: 'commons-digester', name: 'commons-digester', version: '2.1' compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.0.1' compile group: 'com.lowagie', name: 'itext', version: '2.1.7.js2' compile group: 'org.apache.poi', name: 'poi', version: '3.7' // https://mvnrepository.com/artifact/org.apache.commons/commons-math3 compileInclude group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1' }  

Where net.sf.jasperreports.jasperreports library is configured as compileOnly; org.codehaus.groovy.groovy-all is configured as compile; and org.apache.commons.commons-math3 is configured as compileInclude.

To complete the example, bnd.bnd was:

Bundle-Name: jasperreports Bundle-SymbolicName: jasperreports Bundle-Version: 1.0.0 -metatype: *

Result was that only commons-math3 library was included on lib filder inside the bundle jar file (logical). And this was MANIFEST.MF file:

Manifest-Version: 1.0 Bnd-LastModified: 1516660109235 Bundle-ClassPath: .,lib/commons-math3-3.6.1.jar Bundle-ManifestVersion: 2 Bundle-Name: jasperreports Bundle-SymbolicName: jasperreports Bundle-Version: 1.0.0 Created-By: 1.8.0_73 (Oracle Corporation) Import-Package: net.sf.jasperreports.components.table,org.codehaus.gro ovy.ast.builder;version="[2.0,3)" Javac-Debug: on Javac-Deprecation: off Javac-Encoding: Cp1252 Private-Package: jasperreports,jasperreports.api;version="1.0.0",lib,a ssets.org.apache.commons.math3.exception.util,assets.org.apache.commo ns.math3.random,org.apache.commons.math3,org.apache.commons.math3.ana lysis,org.apache.commons.math3.analysis.differentiation,org.apache.co mmons.math3.analysis.function,org.apache.commons.math3.analysis.integ ration,org.apache.commons.math3.analysis.integration.gauss,org.apache .commons.math3.analysis.interpolation,org.apache.commons.math3.analys is.polynomials,org.apache.commons.math3.analysis.solvers,org.apache.c ommons.math3.complex,org.apache.commons.math3.dfp,org.apache.commons. math3.distribution,org.apache.commons.math3.distribution.fitting,org. apache.commons.math3.exception,org.apache.commons.math3.exception.uti l,org.apache.commons.math3.filter,org.apache.commons.math3.fitting,or g.apache.commons.math3.fitting.leastsquares,org.apache.commons.math3. fraction,org.apache.commons.math3.genetics,org.apache.commons.math3.g eometry,org.apache.commons.math3.geometry.enclosing,org.apache.common s.math3.geometry.euclidean.oned,org.apache.commons.math3.geometry.euc lidean.threed,org.apache.commons.math3.geometry.euclidean.twod,org.ap ache.commons.math3.geometry.euclidean.twod.hull,org.apache.commons.ma th3.geometry.hull,org.apache.commons.math3.geometry.partitioning,org. apache.commons.math3.geometry.partitioning.utilities,org.apache.commo ns.math3.geometry.spherical.oned,org.apache.commons.math3.geometry.sp herical.twod,org.apache.commons.math3.linear,org.apache.commons.math3 .ml.clustering,org.apache.commons.math3.ml.clustering.evaluation,org. apache.commons.math3.ml.distance,org.apache.commons.math3.ml.neuralne t,org.apache.commons.math3.ml.neuralnet.oned,org.apache.commons.math3 .ml.neuralnet.sofm,org.apache.commons.math3.ml.neuralnet.sofm.util,or g.apache.commons.math3.ml.neuralnet.twod,org.apache.commons.math3.ml. neuralnet.twod.util,org.apache.commons.math3.ode,org.apache.commons.m ath3.ode.events,org.apache.commons.math3.ode.nonstiff,org.apache.comm ons.math3.ode.sampling,org.apache.commons.math3.optim,org.apache.comm ons.math3.optim.linear,org.apache.commons.math3.optim.nonlinear.scala r,org.apache.commons.math3.optim.nonlinear.scalar.gradient,org.apache .commons.math3.optim.nonlinear.scalar.noderiv,org.apache.commons.math 3.optim.nonlinear.vector,org.apache.commons.math3.optim.nonlinear.vec tor.jacobian,org.apache.commons.math3.optim.univariate,org.apache.com mons.math3.optimization,org.apache.commons.math3.optimization.direct, org.apache.commons.math3.optimization.fitting,org.apache.commons.math 3.optimization.general,org.apache.commons.math3.optimization.linear,o rg.apache.commons.math3.optimization.univariate,org.apache.commons.ma th3.primes,org.apache.commons.math3.random,org.apache.commons.math3.s pecial,org.apache.commons.math3.stat,org.apache.commons.math3.stat.cl ustering,org.apache.commons.math3.stat.correlation,org.apache.commons .math3.stat.descriptive,org.apache.commons.math3.stat.descriptive.mom ent,org.apache.commons.math3.stat.descriptive.rank,org.apache.commons .math3.stat.descriptive.summary,org.apache.commons.math3.stat.inferen ce,org.apache.commons.math3.stat.interval,org.apache.commons.math3.st at.ranking,org.apache.commons.math3.stat.regression,org.apache.common s.math3.transform,org.apache.commons.math3.util Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))" Tool: Bnd-3.2.0.201605172007

You can see that all packages of commons-math3 library were included on Private-package section. However, in Import-Package section only were included the packages used on module source files (net.sf.jasperreports.components.table,org.codehaus.groovy.ast.builder).

The problem come when we want to export these libraries to used outside our modules. Then you will need to add Export-Package section on bnd.bnd file. If you only includes some package in this section, then all classes of first package will be copied in the classpath of bundle jar file independently of compile directive. I think that bnd doesn't know how to build the MANIFEST.MF in this case. 

On the other hand, if you includes '*' in Export-Package section, then all classes of all packages includes on your bundle will be copied in the classpath of bundle jar file. If you includes '*' in Export-Package section and same library with compileInclude then all classes of library will be copied in classpath and in lib folder (duplicate).

Conclusion

At last I'm going to try to summarize all common scenarios:

  1. Add a third party library: If you only need to add one third party library to your bundle you can do easily adding the library with compileInclude in your build.gradle. You won't need anything else.
  2. Add a third party library that is already in OSGi container: If you only need to add one third party library that is exported by other bundle of your OSGi container you can do easily adding the library with compileOnly in your build.gradle. You won't need anything else.
  3. Add a third party library that you want to export to another bundle: If you need to include a library in your bundle to used in other bundle (to build a libraries bundle, for example), you will need to add the library to build.gradle with compileInclude and add all packages you need to Export-Package section on bnd.bnd. However if you need to export all package of third party libraries, I think that is better option include these library with compile in build.gradle and add '*' to Export-Package section on bnd.bnd.
Ignacio Roncero Bazarra 2017-12-20T21:43:35Z
Categories: CMS, ECM

Export web content as PDF

Liferay - Wed, 12/20/2017 - 06:25
<%@page import="sun.awt.RepaintArea"%> <%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %> <%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %> <%@ taglib uri="http://liferay.com/tld/security" prefix="liferay-security" %> <%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %> <%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %> <%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %> <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> <%@ page import="javax.portlet.PortletPreferences" %> <%@ page import="com.liferay.portal.kernel.util.Validator" %> <%@ page import="com.liferay.portal.kernel.util.ParamUtil" %> <%@ page import="com.liferay.portlet.PortletPreferencesFactoryUtil" %> <%@ page import="com.liferay.portal.util.PortalUtil" %> <%@ page import="com.liferay.portal.kernel.dao.search.ResultRow" %> <%@ page import="com.liferay.portal.kernel.util.ParamUtil" %> <%@ page import="com.liferay.portal.kernel.util.WebKeys" %> <%@ page import="com.liferay.portal.model.User" %> <%@ page import="com.liferay.portal.service.UserLocalServiceUtil" %> <%@ page import="javax.portlet.PortletURL" %> <%@page import="javax.portlet.WindowState" %> <%@page import="java.text.Format"%> <%@page import="com.liferay.portal.kernel.util.FastDateFormatFactoryUtil"%> <%@page import="com.liferay.portal.kernel.util.GetterUtil"%> <%@page import="com.liferay.portal.kernel.util.StringPool"%> <%@page import="java.util.*"%> <%@page import="com.liferay.portal.kernel.util.OrderByComparator"%> <%@page import="com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil"%> <%@page import="com.liferay.portlet.journal.model.JournalArticle"%> <%@page import="com.liferay.portal.kernel.language.LanguageUtil"%> <%@page import="com.liferay.portal.kernel.util.HtmlUtil"%> <%@page import="com.liferay.portal.model.Group"%> <%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%> <%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> <%@page import="javax.portlet.ActionRequest"%> <%@page import="com.liferay.portal.kernel.util.WebKeys"%> <%@page import="com.liferay.portal.theme.ThemeDisplay"%>   <portlet:defineObjects /> <liferay-theme:defineObjects />   <portlet:resourceURL var="exportWebContentURL"> </portlet:resourceURL>   <h4>Midland National : Journal Content Article</h4> <a href="<%=exportWebContentURL%>">Download Click Here</a>     <% Group group = themeDisplay.getScopeGroup(); boolean isPrivate = themeDisplay.getLayout().isPrivateLayout(); String friendlyURL = PortalUtil.getGroupFriendlyURL(group, isPrivate, themeDisplay); System.out.println("friendlyURL :::::: "+friendlyURL); %> <%--  <%   //long groupId = ParamUtil.getLong(renderRequest,"sitesSelectBox",0); long groupId = 23531; List<JournalArticle> articleList=null;   if(groupId!=0){ articleList=JournalArticleLocalServiceUtil.getArticles(groupId); }   %>     <aui:form action="<%=exportWebContentURL%>" method="post" name="exportWebContentForm" target="_blank"> <aui:layout> <aui:column> <aui:select label="Sites" name="sitesSelectBox" id="sitesSelectBox"> <aui:option label="Select Sites"  value="-1" />     <aui:option label="Global"  value="<%=themeDisplay.getCompanyGroupId()%>" /> <% List<Group> mySites = user.getMySites(); for (int i = 0; i < mySites.size(); i++) { Group group = mySites.get(i); String groupName = HtmlUtil.escape(group.getDescriptiveName(locale)); if (group.isUser()) { groupName = LanguageUtil.get(pageContext, "my-site"); } %> <aui:option label="<%= groupName %>"  value="<%= group.getGroupId() %>" /> <% } %> </aui:select> </aui:column> </aui:layout>  <c:if test='<%=articleList!=null && !articleList.isEmpty()%>'> <aui:select label="Web Content Article" name="webContentSelectBox" id="webContentSelectBox">     <aui:option label="global"  value="<%= themeDisplay.getCompanyGroupId() %>" /> <% for (JournalArticle artticle:articleList) { %> <aui:option label="<%=artticle.getTitleCurrentValue() %>"  value="<%= artticle.getArticleId()%>" /> <% } %> </aui:select> </c:if> <c:if test='<%=articleList==null || articleList.isEmpty()%>'> <h2 style="color:red;">There is no articles for selected group..</h2> </c:if> <aui:layout> <aui:column> <aui:button type="submit" value="submit" name="submit"></aui:button> </aui:column> </aui:layout>   <aui:script> AUI().use('aui-base', function(A) { A.one('#<portlet:namespace />sitesSelectBox').on('change', function(event){  A.one('#<portlet:namespace />exportWebContentForm').set('target','_self'); submitForm(document.<portlet:namespace />exportWebContentForm, "<portlet:renderURL></portlet:renderURL>") }); }); </aui:script> </aui:form>  --%> ======================================================================= package com.cts.export.jouranlcontent; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.List;   import javax.portlet.PortletException; import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse;   import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PropsUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.Group; import com.liferay.portal.model.User; import com.liferay.portal.model.UserGroup; import com.liferay.portal.model.UserGroupGroupRole; import com.liferay.portal.service.ClassNameLocalServiceUtil; import com.liferay.portal.service.GroupLocalServiceUtil; import com.liferay.portal.service.UserGroupGroupRoleLocalServiceUtil; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; import com.liferay.portlet.documentlibrary.model.DLFolder; import com.liferay.portlet.documentlibrary.model.DLFolderConstants; import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; import com.liferay.portlet.expando.model.ExpandoColumn; import com.liferay.portlet.expando.model.ExpandoTable; import com.liferay.portlet.expando.model.ExpandoValue; import com.liferay.portlet.expando.service.ExpandoColumnLocalServiceUtil; import com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil; import com.liferay.portlet.expando.service.ExpandoValueLocalServiceUtil; import com.liferay.portlet.journal.model.JournalArticleDisplay; import com.liferay.portlet.journalcontent.util.JournalContentUtil; import com.liferay.util.bridges.mvc.MVCPortlet; import com.lowagie.text.DocumentException;   import org.w3c.dom.Document; import org.w3c.tidy.Tidy; import org.xhtmlrenderer.pdf.ITextRenderer; public class ExportJorinalContentAction extends MVCPortlet {   @Override public void doView(javax.portlet.RenderRequest renderRequest, javax.portlet.RenderResponse renderResponse) throws IOException ,PortletException {   try { boolean showPreview = false; String allowedUserGroups = PropsUtil.get("allowed.usergroups.webcontent.preview"); ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);   System.out.println("allowedUserGroups from portal-ext.properties :"+allowedUserGroups); System.out.println("User is signed in :"+themeDisplay.isSignedIn());   if(allowedUserGroups != null && themeDisplay.isSignedIn()){ String[] userGroupsArray = allowedUserGroups.split(","); List<String> allowedUserGroupsList = Arrays.asList(userGroupsArray); System.out.println("allowedUserGroupsList "+allowedUserGroupsList);   User user= themeDisplay.getUser(); List<UserGroup> groups = user.getUserGroups(); for (UserGroup userGroup : groups) { String userGroupName = userGroup.getName(); System.out.println("userGroupName "+userGroupName); if(allowedUserGroupsList.contains(userGroupName)){ showPreview = true; break; } } } System.out.println("showPreview "+showPreview); } catch (Exception e) { e.printStackTrace(); }finally{ super.doView(renderRequest, renderResponse); } };   @Override public void serveResource( ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, PortletException { String articleId=ParamUtil.getString(resourceRequest,"webContentSelectBox"); ThemeDisplay themeDisplay = (ThemeDisplay)resourceRequest.getAttribute(WebKeys.THEME_DISPLAY); long groupId =ParamUtil.getLong(resourceRequest,"sitesSelectBox"); try {  //49787 49950  JournalArticleDisplay articleDisplay = JournalContentUtil.getDisplay(23531, "51016", "", LanguageUtil.getLanguageId(resourceRequest),themeDisplay); //JournalArticleDisplay articleDisplay = JournalContentUtil.getDisplay(groupId, articleId, "", LanguageUtil.getLanguageId(resourceRequest),themeDisplay); resourceResponse.reset(); resourceResponse.setContentType("application/pdf"); resourceResponse.setProperty("Content-disposition", "attachment; filename=\"" + articleDisplay.getTitle().concat(StringPool.PERIOD).concat("pdf") + "\""); OutputStream outputStream = resourceResponse.getPortletOutputStream(); String articleHtml = "<!DOCTYPE HTML><html><body>"+articleDisplay.getContent()+"</body></html>"; articleHtml = articleHtml.replaceAll("src=\"/documents", "src=\""+themeDisplay.getPortalURL()+"/documents"); System.out.println(articleHtml); Tidy tidy = new Tidy(); InputStream is = new ByteArrayInputStream(articleHtml.getBytes()); Document doc = tidy.parseDOM(is, null); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(doc, null); renderer.layout(); renderer.createPDF(outputStream);   } catch (DocumentException e) { e.printStackTrace(); }   } }   Neha Goyal 2017-12-20T11:25:53Z
Categories: CMS, ECM

Liferay 7 theme development using IDE-2

Liferay - Wed, 12/20/2017 - 00:26

I wrote blog for theme development with IDE . Further I explored the way to configure gradle project. I would like to share those steps that I have experienced hard to find and many developers I saw asking for the same thing on the forums.

Gradle Configuration

 

By default, if we create theme using IDE it templates are built using freemarker and parent theme is “_styled”. I was also stuck to this scenario and explored to find a way we can configure these particular options .

As we saw in previous blog, if we create module theme project using Gradle, in the build.gradle it applies theme builder plugin. This plugin add buildTheme gradle task to the project which generate theme files based on the parentTheme and templateExtention property configured in the task.  By default, following are the values for these property.

 

 parentName

"_styled"

 templateExtension

"ftl"

   

 

To change the values of these properties in the case if we want to generate theme files using unstyled theme and velocity template it need to configure the task properties as follows build.gradle file.

 

 

Now run buildTheme task,  files will be generated as per above configuration.

 

 

One need to include the gradle dependency based on type of parent theme configured like follows.

Styled

Unstyled     Sushil Patidar 2017-12-20T05:26:11Z
Categories: CMS, ECM

How Liferay Unified Business Teams and Customer Experiences

Liferay - Tue, 12/19/2017 - 19:27

The need to scale from an independent company to one that meets the needs of thousands of people causes a question to arise: how can we improve our customer experience?

Customers expect a better overall experience because the bar is being set higher by other companies, necessitating improved strategies and the ability to better understand customers on an individual level. A company can be disconnected internally when trying to meet the needs of a customer, with sales, support, marketing and consulting all attempting to understand and provide for a unique customer. When these methods are disorganized, the customer can be bombarded by different messages, leading to dissatisfaction.

As a growing company, Liferay worked to improve customer experiences, as well. With the right strategy, the company enabled employees with the right information to deliver a unified customer experience. During this process, Liferay worked toward consolidating internal business systems, using Liferay DXP to unite Support, Liferay.com, Customer Portal, Marketplace, HubSpot and Salesforce, which resulted in the creation of Dossiera.

Reaching Your Customers More Effectively

As a customer reaches the end of a contract, the impending close of their lifecycle can be brought to the attention of a company so that an employee can reach out and encourage contract renewal. However, this awareness can cause issues when various departments are not coordinated with one another. As a result, sales representatives, marketing agents, customer support, consultants and more may all reach out to a customer on their own without knowing that other departments are doing the same. The result can be a bombardment with messages, leading to confusion, frustration and even a lost sale.

Dossiera, an internal workplace built in-house by Liferay that shows the full customer lifecycle, focuses on taking information from disparate systems and bringing them together to create meaningful insights that employees may not be able to create on their own. The system manages separate accounts and separate employees, with the finalized internal workplace showing the full customer lifecycle and the many different interactions experienced by a consumer. These various customer actions can show their unique interests concerning a company and what products and services may best meet their needs.

The lifecycles of the various services and products they have purchased are shown for greater insights into the future of a customer. The goal of these many different insights is to better equip employees with the ability to provide for accounts in timely, effective ways that are informed by many different viewpoints. Liferay is continuing to focus on how analytics, personalization, customer engagement scores and more can be used to further empower employees through Dossiera.

However, the insights needed to not only work efficiently, but work effectively, can be applied to any company through a better ability to both collect and understand customer data.

Insights Concerning Customer Renewal

As highlighted by the use of Dossiera, there are three major traits that have been correlated to the renewal likelihood of a customer:

  • Customer Profile: Company size, LTV, Tenure, Industry, Location
  • Customer Behavior: Interactions, Events, Content
  • Project Attributes: Deal Size, Duration, Issues, Sales Exec.

Interestingly, Dossiera insights showed that a customer’s tenure is correlated to renewal, with the longer they have been a customer resulting in a higher predicted probability of renewal. The continued loyalty of a customer can be seen as a self-perpetuating cycle, so long as they are receiving the services they desire. This bodes well for companies seeking long-term customer relationships and loyalty in an age of increasing competition.

In addition to the length of relationships, companies often wonder how the cost of services and products affect the chances of contract renewal. Specifically, does high cost lead to turnover? Liferay research showed that renewal amount may actually signal commitment, with the larger a deal size is, the higher the predicted probability of renewal. It’s possible that the scope of commitment within a deal, the more a company is invested in the long-term use of these services and products. Therefore, renewal becomes more likely.

Shifting Liferay’s Approach

Using these insights, Liferay was able to better understand the probability to renew for an improved ability to segment and strategize over the long term. By better understanding a target audience through tested and actionable data, companies across all industries can provide their customers with service, care and coordinated insights during not only the renewal phase, but throughout their contract timeline.

Learn More About How Liferay Can Help You

The age of digital transformation has arrived and is shifting how companies operate internally and interface with their target audience. Learn more about how transformation is possible through our insightful whitepaper.

Read “Digital Experience Platforms: Designed for Digital Transformation”   Matthew Draper 2017-12-20T00:27:47Z
Categories: CMS, ECM

The State of Liferay Community 2017: Results and Winner!

Liferay - Mon, 12/18/2017 - 13:17

The Liferay ecosystem is richer than ever, and our community members have never been as global. Each one of us has different interests and with all this diversity, it gets hard to understand the people behind our community.

This is where this survey comes in: we asked 28 questions, covering topics going from favorite projects all the way to events and user groups. In total we had 393 participants, which is truly amazing! Now, we're excited to share the results and feedback. Feel free to jump to a specific section below.

About

 

Relationship

 

"I'm a Liferay developer during almost 10 years and I really like the work you are doing. Please keep supporting the community and open source!"

 

Interests

 

"Liferay has been and will be part of my work life, DXP is a game changer. "

 

Interaction

 

"I would like to contribute more, but not sure how to get started."

 

Events

 

"The most important thing of a conference is the presence of the whole Liferay community and core engineers."

 

User Groups

 

"Small groups are highly appreciated with one on one interactions."

 

Prize Winner

In order to be as transparent as possible, we randomily selected a participant using code and recorded everything for you. Here it is!

Congratulations Shiv Darshan! You just got a $50 Amazon gift card and Star Wars™ LEGO set

Conclusions

Each one of these charts shows an opportunity for us to improve and make things better. Here are some of the primary takeaways:

  • Community members usually discover Liferay from an employer.
  • Most people have been using Liferay technologies for many years.
  • Documentation, blogs, and forums are extremely valuable information sources.
  • The number of women participating in the community is still very low.
  • Workshops, live demos, and road-map talks are very important to conferences.
  • User groups are still not very active and present in local communities.

Thank you everyone who took the time to participate. We will make sure to address all your incredibly valuable feedback and next year we will be back!

Zeno Rocha 2017-12-18T18:17:35Z
Categories: CMS, ECM

Big Data Course for KNIME Analytics Platform, Austin

Knime - Mon, 12/18/2017 - 04:41
Big Data Course for KNIME Analytics Platform, Austin oyasnev Mon, 12/18/2017 - 10:41 April 27, 2018 Austin

KNIME is hosting a Big Data Course for KNIME Analytics Platform at the KNIME offices in Austin, USA on April 27, 2018.

This one day Big Data Course for KNIME Analytics Platform focuses on processing and mining databases with Hadoop and Spark through KNIME. Learn how to interact with these tools based on an example: eliminating missing values by predicting their values based on other attributes.

Register Now

Course Content Monday, April 27, 2018
  • In-database processing with the KNIME database extension
  • Pre-processing on Hadoop with Hive
  • Data processing and machine learning with Spark
Course Fees
  • Big Data Course for KNIME Analytics Platform (1 day): € 750
Other Courses

The KNIME Team.

Categories: BI

Course for KNIME Server, Austin

Knime - Mon, 12/18/2017 - 04:41
Course for KNIME Server, Austin oyasnev Mon, 12/18/2017 - 10:41 April 25, 2018 Austin

KNIME is hosting a Course for KNIME Server at the KNIME offices in Austin, USA on April 25, 2018. We recommend to combine this course with the 2-day Course for KNIME Analytics Platform held April 23-24, 2018.

Course for KNIME Server dives into the details of KNIME Server and KNIME WebPortal and discusses them from three different points of view: the power user, the administrator, and the end user.
All tools and features designed for each one of these three personas are shown in detail and illustrated by means of interactive sessions and hands-on exercises.

Attendees learn how to exchange workflows and data between the server and the client, how to take advantage of the many server dedicated nodes and features when implementing a workflow, how to set access rights on workflows, data, and meta-nodes, share meta-nodes, execute workflows remotely and from the KNIME WebPortal, and how to schedule report and workflow executions, and more.

The course is designed not only for customers, partners, and the community, but also for anyone interested in finding out more about the KNIME commercial platform and its functionalities.

Register Now

Course Content Wednesday, April 25, 2018
  • KNIME Product Overview
  • Roles (Personas) involved in a Data Science Project
  • Introduction to the Use Case (Customer Segmentation)
  • KNIME Server Basic Features
  • KNIME Server Advanced Features
  • Summary and Q&A
Course Fees
  • Course for KNIME Server (1 day): € 250 per user
Other Courses

The KNIME Team.

Categories: BI

Text Mining Course for KNIME Analytics Platform, Austin

Knime - Mon, 12/18/2017 - 04:41
Text Mining Course for KNIME Analytics Platform, Austin oyasnev Mon, 12/18/2017 - 10:41 April 26, 2018 Austin

KNIME is hosting a Text Mining Course for KNIME Analytics Platform at the KNIME offices in Austin, USA on April 26, 2018.

This one day Text Mining Course for KNIME Analytics Platform is an intensive training focused on the processing and mining of textual data with KNIME using the Textprocessing extension. Learn how to read textual data in KNIME, enrich it semantically, preprocess, and transform it into numerical data, and finally cluster it, visualize it, or build predictive models. Text mining experience is not necessarily required for this training.

Register Now

Course Content Thursday, April 26, 2018
  • Introduction to KNIME
  • Reading and Importing Textual Data
  • Text Preprocessing, Semantic Enrichment, and Transformation
  • Text Classification
  • Visualization
  • Text Clustering
Course Fee
  • KNIME Text Mining Training (1 day): € 750
Other Courses

The KNIME Team.

Categories: BI

Course for KNIME Analytics Platform, Austin

Knime - Mon, 12/18/2017 - 04:41
Course for KNIME Analytics Platform, Austin oyasnev Mon, 12/18/2017 - 10:41 April 23 - 24, 2018 Austin

KNIME is hosting a Course for KNIME Analytics Platform at the KNIME offices in Austin, USA on April 23-24, 2018.

Course for KNIME Analytics Platform is an ideal opportunity for beginners, advanced users and KNIME experts to be introduced to KNIME, to learn how to use it more effectively, and how to create clear, comprehensive reports based on KNIME workflows.

Register Now

Course Content Day one – Monday, April 23, 2018 Morning:
  • Introduction to KNIME
  • Reading Data
  • Data Manipulation
Afternoon:
  • Data Vizualization
  • Data Mining
  • Exporting & Deployment
Evening:
  • Group Dinner
Day two – Tuesday, April 24, 2018 Morning:
  • Date and Time
  • Flow Variables
  • Workflow Control
  • External Tools
Afternoon:
  • Advanced Data Mining
  • Model Selection
  • Advanced Applications and/or BYOD (Bring Your Own Data)
Course Fees
  • Course for KNIME Analytics Platform (2 days): € 1'250
Other Courses

The KNIME Team.

Categories: BI

Cómo evaluar Plataformas Web

Liferay - Fri, 12/15/2017 - 08:09

El sistema de evaluación de Plataformas Web puede ser muy diferente dependiendo de la cultura de la organización y de la personalidad del equipo de gestión de proyectos. Diseñar un sistema de evaluación estandarizado te ayudará a simplificar el proceso de valoración y de compra, comparar distintas plataformas desde los mismos parámetros, así como generar un sistema de puntuación o valoración válidos y cotejables para futuros proyectos. A continuación, se enumeran cinco puntos para evaluar Plataformas Web, que además puedes utilizar para valorar cualquier otra solución de software que necesites comparar.

Consejo: Acelera tu proceso de evaluación descargando nuestra hoja de cálculo editable con los criterios de evaluación predefinidos. Incluye las categorías de criterios y de cálculos detallados. Descargar.

1.Definir los criterios de evaluación.


Definir los criterios de evaluación comienza por reunir todos los requerimientos al inicio del proyecto. Da respuesta a las solicitudes de tus usuario y divídelas en categorías claras, con una lista de funciones dentro de cada una. Estas características deberían ser fáciles de definir y de medir. Por ejemplo, "una buena interfaz web" no es un criterio válido. No obstante, sí que lo sería especificar que "es necesario que el sistema simplifique el desarrollo de páginas web aprovechando los temas, las reglas de acceso y los componentes web”.

Existen cinco áreas recomendadas para utilizarse como criterios de evaluación para valorar Plataformas Web:

  • Coste. Proveedores tradicionales como IBM o Oracle tienen plataformas costosas y complejas fórmulas de precios de mantenimiento y de soporte, y a menudo compiten con una amplia red de partners. Las plataformas open source pueden ofrecer opciones más asequibles con una red de partners especializados mucho más amplia, gracias al uso de estándares abiertos y metodologías de desarrollo comunes entre sus productos.
  • Riesgo. Determina un nivel de riesgo aceptable para costes a largo plazo, funcionalidades de integración, riesgo en el desarrollo del producto y la satisfacción del usuario final.
  • Control. Las compañías necesitan conseguir un equilibrio entre el control centralizado y el distribuido para agilizar la toma de decisiones y mantener un alto nivel de capacidad de reacción del equipo.
  • Capacidades del usuario final. A nadie le gusta una solución que es difícil de usar. Priorizar las soluciones que son intuitivas y que tienen una buena experiencia de usuario fomentará una mejor adopción de la herramienta. Esto es especialmente cierto para las soluciones que tienen una audiencia diversa de usuarios, como portales o herramientas de colaboración.
  • Diversidad. Las empresas pueden reducir el mantenimiento y el soporte si simplifican la revisión y el cumplimiento de las necesidades organizativas de gestión de productos y contenidos a un alto nivel, especialmente cuando las necesidades comunes y departamentales difieren.
2. Cuantifica los criterios.

Cuantificar el proceso de evaluación hace que la comparativa sea más fácil y más precisa. Cada proveedor debe ser evaluado de forma independiente, con los mismos criterios, y calificado en una escala numérica. A menudo, los stakeholders pueden aferrarse a una característica particular de una plataforma y la defenderán sin tener en cuenta la solidez y valor general de esa solución. La cuantificación de todos los criterios garantiza que está teniendo en cuenta y otorgando valor a todos ellos.

Puedes construir tu propio cuadro de criterios basándote en las necesidades de tu equipo, o buscar por algún ejemplo de plantilla online. Aquí te dejamos una Checklist, una guía que plasma e identifica las categorías críticas para calificar plataformas de sitios web y desglosar las características clave de cada una.

Independientemente de si construyes tu propia comparativa o de si utilizas una plantilla, lo importante es tener la capacidad para asignar y calificar esos valores de forma numérica. Una vez que cuentas con eso, tendrás la capacidad para conocer las fortalezas y debilidades de cada plataforma. Puedes comparar proveedores por categorías, por la calificación global total, o tener en cuenta los criterios que son más importantes para tu proyecto.

3. Determina Casos de Uso.

Durante el proceso de análisis inicial, los equipos de ventas y de marketing de los distintos proveedores probablemente te presentarán los distintos escenarios en los que pueden ser usadas sus plataformas. Hay dos maneras de filtrar para focalizarte en lo que es relevante para tu proceso de evaluación:

  • Escoge un caso de uso: Estrechando tu foco a un único caso de uso, puedes limitar los requerimientos que necesitas para el proceso de evaluación, y eliminar criterios menos importantes. Esto es especialmente útil si estás buscando una plataforma para un proyecto concreto que no necesita ser integrado con otros entornos.

  • Determina un planning: Calendariza tu proyecto antes de revisar las soluciones, después, prioriza las características que necesitarás durante las fases iniciales del proceso de implementación. Esto te garantizará que estás considerando funcionalidades que necesitarás en un futuro, sin sacrificar las funcionalidades que sabes que necesitas primero.

4. Comparar en distintos niveles

Existen tres niveles diferentes que deberías considerar durante el proceso de evaluación:

  • Puntuación general: después de haber consultado a los principales proveedores, revisa la puntuación total de cada uno. Por ejemplo, en nuestra Checklist, se trata del valor de la derecha, y el máximo de puntos que puede conseguirse son 1.465. Además, es recomendable revisar la distribución de las puntuaciones a lo largo de toda la tabla. Puede que un proveedor consiga la puntuación más alta pero tenga una puntuación menor en determinados aspectos que pueden tener una gran importancia para tu proyecto. Hacer este ejercicio te ayudará a tener una consistencia y una visión más certera de cada plataforma.
  • Puntuación por categorías: Cada plataforma también se puede dividir en categorías, por ejemplo: Portal, Colaboración, Administración de contenido web, etc. Al comparar puntuaciones en las categorías que son más importantes para tu proyecto, puedes obtener más información para hacer un juicio de valor. Ten en cuenta que un proveedor con la puntuación general más alta aún puede obtener la puntuación más baja en la categoría más importante para su proyecto.
  • Puntuación ponderada: Algunos criterios son más importantes para tu proyecto que otros. Cada proveedor tendrá puntos fuertes distintos: mientras uno obtendrá una buena puntuación en algunas cuestiones, otros tendrán su punto fuerte en otras. Pese a que la calificación global de un proveedor pueda ser alta, si no obtiene una buena puntuación para las características que son importantes para tu proyecto, ese valor no será representativo. Para ajustar el peso de estos valores en función de las prioridades, asigne distintos ponderaciones a cada fila una vez que completes la tabla de valoraciones. Utilizando como referencia la guía mencionada, los equipos del proyecto pueden usar ponderaciones de 1 a 5 para cada fila, y luego multiplicar para calcular el valor colocado en la columna más a la derecha para cada fila. Por ejemplo, si el proveedor califica "4" para una pregunta con un peso de 5, entonces el valor colocado en la columna de la derecha sería 20.
5. No descartar la evaluación cualitativa.

Después de que tu equipo finalice con el proceso de evaluación cuantitativo, deberías realizar una revisión cualitativa que complete el proceso. Esto debería incluir una revisión y discusión de las puntuaciones finales, así como una combinación de los siguientes:

  • Demos
  • Prueba de concepto

  • Trial de software

  • Referencias de clientes

  • Evaluaciones online

Para este tipo de consideraciones, es conveniente que se tenga en cuenta a audiencias de múltiples departamentos, con el objetivo de conocer las necesidades y preocupaciones de todos ellos.

Una mejor herramienta para la toma de decisiones.

Un proceso de evaluación no tiene la intención de definir un valor numérico que ayude a decantarse por una plataforma. Se trata de una herramienta para guiar a su equipo a pensar a en todas las funcionalidades de una plataforma y tomar un papel proactivo en la forma de evaluar las fortalezas y debilidades de cada uno. Al identificar, no solo sus requisitos, sino también las implicaciones entre los mismos, es mucho más probable que su empresa elija una plataforma de sitio web que se adapte a sus necesidades tanto a corto como a largo plazo.

Descarga nuestra plantilla de evaluación

¿Odias el tedioso trabajo de diseñar una hoja de cálculo? ¡Lo hacemos por ti! Nuestra plantilla editable incluye las categorías y cálculos planteados en este artículo.

Descargar la plantilla   Marta Dueñas González 2017-12-15T13:09:18Z
Categories: CMS, ECM
Syndicate content