AdoptOS

Assistance with Open Source adoption

Open Source News
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.
  • warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/mykidsin/public_adoptos_html/includes/unicode.inc on line 349.

SnapLogic Data Science brings self-service to machine learning

SnapLogic - Wed, 11/14/2018 - 07:30

Today, we announced the launch of SnapLogic Data Science, a visual self-service solution for the entire machine learning (ML) lifecycle. SnapLogic Data Science, together with SnapLogic’s award-winning integration platform, the Enterprise Integration Cloud, supports data sourcing, data preparation and feature engineering, and the training, validation, and deployment of machine learning models all in one platform.[...] Read the full article here. The post SnapLogic Data Science brings self-service to machine learning appeared first on SnapLogic.

Categories: ETL

SnapLogic November 2018 Release: Revolutionize your business with intelligent integration

SnapLogic - Wed, 11/14/2018 - 07:29

We are thrilled to announce the general availability of the November 2018, 4.15 release of the SnapLogic integration platform. This release introduces several new solutions including SnapLogic Data Science, SnapLogic API Management, and SnapLogic for B2B Integration. It also includes core platform enhancements and new feature-rich Snaps. These powerful new capabilities will enable CIOs and[...] Read the full article here. The post SnapLogic November 2018 Release: Revolutionize your business with intelligent integration appeared first on SnapLogic.

Categories: ETL

Liferay And...  Jackson

Liferay - Tue, 11/13/2018 - 18:27
Introduction

So often when discussing how to deal with dependencies, we're often looking for ways to package our third party jars into our custom modules.

There's good reason to do this. It ensures that our modules get a version of a third party jar that we've tested with. It also excludes ambiguity over where the dependency will come from, whether it is deployed and available or not, etc.

That said, there is another option that we don't really talk about much, even though it is still a viable one. Many third party jars are actually OSGi-ready and can be deployed as modules separately from your own custom modules.

Jackson, for example, is actually module jars on their own and can be deployed to Liferay just by dropping them into the deploy folder.

Dependencies Deployed as Modules

So why deploy a third party dependency jar as an OSGi module instead of just as an embedded jar?

Often it comes down to either a concern about class loaders or, less frequently, a (misguided) attempt to shrink general modules size. I usually say this is misguided because memory and disk consumption is cheap, and the problems (to be discussed below) often are not worth it.

So what about the class loader concern? Well, when you are using a system which uses class loaders to instantiate java classes, such as with Jackson and it marshaling JSON into Java objects with Jackson annotations, class loader hierarchies and the normal boundaries between OSGi modules can make general OSGi usage a challenge when the annotations are used in different bundles.

For example, if you have module A and module B and both have POJOs decorated with Jackson annotations, you could run into issues with the annotations. When performing a package scan for classes decorated with the annotations, if the annotation is loaded by a different class loader it is effectively a different class and may not be visible during annotation processing.

If your package is deployed as a standalone module, though, then all bundles sharing the dependency will pull from the same module and therefore the same class loader.

A downside of this, though, is with versioning. If you deploy Jackson 2.9.3 and 2.9.7, there are two competing versions available and can still lead to class loader issues when the different versions are used at the same time. In the case of just a single version deployed, then you have the typical concern of all modules stuck using an agreed upon version.

Is My Dependency OSGi Ready?

So the first thing you'll need to know is whether your third party dependency jar is an OSGi module or not.

The most complicated way to find out is by opening up your jar with a zip tool to look at the contents. If the jar is a bundle, the META-INF/MANIFEST.MF file will contain the OSGi headers like Bundle-Name, Bundle-SymbolicName, Bundle-Version, etc. Additionally you may have OSGi-specific files in the META-INF folder for declarative services.

An easier way is just to use one of the Maven repo search tools. When looking for jackson-core 2.9.6 in mvnrepository.com, you come across the page like https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.9.6: Under the Files section, it is shown as a bundle w/ the size. This means it is an OSGi-ready bundle. When not OSGi-ready, the search tools will typically show it as just a jar. This and the other Jackson jars are all marked as bundles, so I know I can deploy them as modules. Deploying Jackson as Modules So for a future "Liferay And..." blog post, I have need of Jackson as a module instead of as just a dependency, so in this post we're going to focus on deploying Jackson as modules. Sure this may not be necessary for all deployments or usage of Jackson, but it is for me. Okay, so our test is going to be to build a couple of modules w/ some POJOs decorated with Jackson annotations and a module that will be marshaling to/from JSON. In order to do this, we need to have the following Jackson modules deployed:

  • compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.6'
  • compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.6'
  • compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.6'
  • compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jdk8', version: '2.9.6'
  • compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.6'
  • compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-parameter-names', version: '2.9.6'
Download these bundle jars and drop them into the Liferay deploy folder while Liferay is running. The bundles will deploy into Liferay and you'll see the messages in the log that the bundles are deployed and started. Building Test Modules So in the referenced Github repo, we'll build out a Liferay workspace with three module projects:
  1. Animals - Defines the POJOs with Jackson annotations for defining different pet instances.
  2. Persons - Defines a POJO for a person to define their set of pets.
  3. Mappings - Services based upon using Jackson to marshal to/from JSON.
  4. Gogo-Commands - Provides some simple Gogo commands that we can use to test the modules w/o building out a portlet infrastructure.
The Github repo is: https://github.com/dnebing/liferay-and-jackson The animals and persons modules are nothing fancy, but they do leverage the Jackson annotations from the deployed OSGi Jackson modules. The mappings module uses the Jackson ObjectMapper to handle the marshaling. It is capable of processing classes from the other modules. The gogo module contains some simple gogo shell commands: Command Description jackson:createCatCreates a Cat instance and outputs the toString representation of it. Args are [name [breed [age [favorite treat]]]]. jackson:createDogCreates a Dog instance and outputs the toString representation of it. Args are [name [breed [age [likes pigs ears]]]]. jackson:catJsonLike createCat, but outputs the JSON representation of the cat. jackson:dogJsonLike createDog, but outputs the JSON representation of the dog. jackson:catParses the given JSON into a Cat object and outputs the toString representation of it. The only argument is the JSON. jackson:dogParses the given JSON into a Dog object and outputs the toString representation of it. The only argument is the JSON. For the cat and dog commands, to pass JSON as a single argument, enclose it in single quotes: jackson:cat '{"type":"cat","name":"claire","age":6,"breed":"house","treat":"filets"}' Conclusion Seems like an odd place to stop, huh? I mean, we have identified how to find OSGi-ready modules such as the Jackson modules, we have deployed them to Liferay, and we have built modules that depend upon them. So why introduce Jackson like this and then stop? Well, it is just a preparatory blog for my next post, Liferay And... MongoDB. We'll be leveraging Jackson as part of that solution, so starting with the Jackson deployment is a good starting point.  See you in the next post! David H Nebinger 2018-11-13T23:27:00Z
Categories: CMS, ECM

Hacktoberfest Celebrates 5th Anniversary

Open Source Initiative - Tue, 11/13/2018 - 07:25

Five years ago the community team at DigitalOcean wanted to create a program to inspire open source contributions. That first year, in 2014, the first Hacktoberfest participants were asked for 50 commits, and those who completed the challenge received a reward of swag. 676 people signed up and 505 forged ahead to the finish line, earning stickers and a custom limited-edition T-shirt. This year that number is an astounding 46,088 completions out of 106,582 sign-ups. We’ve seen it become an entry point to developers contributing to open source projects: much more than a program, it’s clear that Hacktoberfest has become a global community movement with a shared set of values and passion for giving back. To learn more about the results from the 5th anniversary of Hacktoberfest, please check this blog post from DigitalOcean: https://blog.digitalocean.com/a-review-of-hacktoberfest-year-5/ The Open Source Initiative would like to thank DigitalOcean for not only for being a sponsor of the OSI and for hosting our website, but most importantly for creating such an inspiring program like Hacktoberfest. Happy 5th Anniversary, Hacktoberfest!

Categories: Open Source

Get that old school page editing touch back again

Liferay - Tue, 11/13/2018 - 04:56

At this years Unconference at DEVCON in Amsterdam, Victor Valle kept a session about changing the look-and-feel of the portal administration. Things like removing the default product menu and creating your own. I missed that discussion because so many other interesting discussions were going on, so I have no idea if someone brought this up. In this blog article, I'm not going to do anything "drastic" like like removing a side menu. I just want to show you how easy it is to get something back which some of us missed since version 6.2.

I've heard some people complain about the way the page editing works since version 7.0, and it seems like themelets are still pretty much an underrated or unknown addition to Liferay theming. I hope this blog will tackle both.

By default you'll have to hover over a portlet or widget to get the configuration options:

Nothing wrong with it. The page is displayed as anyone without editing rights would see the page. No need to toggle that icon which shows/hides the controls. But for those who have to do a lot of page editing or widget configuration, ... every second counts. We just want to click on the ellipsis icon to configure that widget without having to hover over it first.

Some of us want this:

There are different ways to get this toggle controls feature back

After all, the controls icon did not disappear. It only becomes visible when your screensize is small enough. So it's all a matter of tweaking the styles.

Option 1: Portlet decorators

You can easily add your own portlet decorator and make it the default one in your theme. You just need to add the custom decorator in the  look-and-feel.xml of your theme:

<portlet-decorator id="show-controls" name="Show Controls"> <default-portlet-decorator>true</default-portlet-decorator> <portlet-decorator-css-class>portlet-show-controls</portlet-decorator-css-class> </portlet-decorator>

Then you will want to add some css to the theme so the toggle controls icon is displayed at all time. Toglling the icon will add a css class "controls-visible" to the body element. This is easy, just display the "portlet-topper" everytime "controls-visible" is present.

Why this option is bad for this purpose: I believe portlet decorators are meant for styling purposes. How do you want the user to see the widget when you select a certain decorator. When you want to use portlet decorators for this purpose and you want to display widgets in different ways, with(out) borders or titles... This means you'll lose the controls anyway when you assign a different decorator to a widget. I bet you'll say: "Just put the extra styles on every widget". So just forget I even brought this up.

Option 2: Add some css and js

We'll add the custom css to the theme:

/* old school portlet decorators, don't mind the shameless usage of !important */ .control-menu .toggle-controls { display: block !important; } .controls-visible.has-toggle-controls { .portlet-topper { display: -webkit-box !important; display: -moz-box !important; display: box !important; display: -webkit-flex !important; display: -moz-flex !important; display: -ms-flexbox !important; display: flex !important; position: relative; opacity: 1; transform: none !important; } section.portlet { border: 1px solid #8b8b8b; border-radius: 0.5rem; } } .controls-hidden { .portlet-topper { display: none !important; } }

We're not there yet. We'll need to put a "has-toggle-controls" class on the body element because it seems "controls-visible" is there by default, even when you're not logged in. And in this case I want to display a border around the portlet when the controls are active. So I'll be setting my own css class like this inside main.js:

var toggleControls = document.querySelector('.toggle-controls'); if (toggleControls !== null) { document.body.classList.add('has-toggle-controls'); }

But what if we had lots of different themes. Are we really going to add the same code over and over again? And what if business decides to add a box-shadow effect after a few weeks?

Option 3: Themelets

A themelet is an extension of a theme. You can extend all your themes with the same themelet. When some style needs to change, you just edit the themelet and rebuild your themes. This will require you to use the liferay-theme-generator. But I bet everyone does by now, right? More information on how to build and use themelets. You can find the themelet I wrote on github. Please be sure your theme's _custom.scss imports the css from themelets: /* inject:imports */ /* endinject */ And your portal_normal.ftl should contain: <!-- inject:js --> <!-- endinject --> Conclusion When changing the behaviour or design of certain aspects which are not design (in the eye of the end users or guest users) related, I think its always better to go with themelets. You'll rarely come across a portal with only one theme. So using themelets will make it so much easier to maintain your themes. Michael Adamczyk 2018-11-13T09:56:00Z

Categories: CMS, ECM

Save time and prevent data-mapping errors with Vtiger’s multi-module picklists

VTiger - Tue, 11/13/2018 - 03:53
Imagine a scenario where a set of values need to be common to a couple of picklists across different objects or modules. For instance, the values for contact status need to be “Active”, “Inactive”, “Positive”, “Negative” or “Neutral” across two different modules namely – the Contact Module and the Opportunity Module. To make this happen, […]
Categories: CRM

CiviCRM Version 5.7 - Candidate for Extended Security Release

CiviCRM - Mon, 11/12/2018 - 16:07

The first Wednesday of the month is an important day for the CiviCRM community. It’s the day where a new, scheduled monthly release drops. These normally include bug fixes, minor features changes and improvements. Nothing earth shattering (hopefully). Upgrades are typically routine and easy. For many, this is a fairly painless process to manage, especially as the ease of upgrade and release reliability have improved over the years. 

Categories: CRM

The reason we moved to 7zip bundles

Liferay - Mon, 11/12/2018 - 14:51

As some of you may have already discovered, 7.1 GA2 was released as a 7zip bundle instead of the typical zip bundle. This probably caused a ton of issues. Even our own Dev Tools are not yet equipped to handle 7z files since all the events took up our time.

I will provide you with the reasons why we had to make this move and hopefully, everyone will come to the conclusion that this was the best decision, albeit, the communication could have been handled significantly better.

The original goal that led to providing 7z bundles was to improve startup times. We discovered that if we prepopulate the OSGi state, we were able to significantly reduce startup times by 2-3 times. As we began our testing, our zip bundles were not preserving timestamps correctly. They were rounding our timestamps to the nearest seconds which invalidated our OSGi state. We also found that our bundles had grown to 1.2 gigabytes!

This improvement imposed 2 requirements:
  • maintain the original timestamp
  • significantly increase the number of duplicate files.

We began to look for solutions. Naturally, tar.gz was the first solution that came to mind. It would easily preserve the timestamps but it did not solve the file size issue. While some people may find a large download acceptable, we did not believe that it would be appropriate for some of our use cases. As a result, someone suggested that we investigate 7zip because 7zip will actually detect for duplicate files and treat them as a single file during compression. This significantly brought down the file size from 1.2 gigabytes to 400 megabytes. It was the perfect solution for us. So this is why we have ultimately decided to use 7zip instead of zips. 

Since our initial development, we have also fixed the duplicate file issue. This means that tar.gz is also viable as a solution (though the bundles are slightly larger at 600 megabytes). From now on, we will be providing 7zip bundles and also tar.gz bundles. Internally we will be using 7zip because ultimately that 200-megabyte difference is still too significant for our use cases, but for everyone else, you guys can decide what works best for you.  

David Truong 2018-11-12T19:51:00Z
Categories: CMS, ECM

CiviCRM 5.7.0 release

CiviCRM - Mon, 11/12/2018 - 14:00
CiviCRM version 5.7.0 is now ready to download.  RELEASE NOTES: Big thanks to Andrew Hunt from AGH Strategies for putting up together release notes for this version.  The release notes for 5.7.0 can be accessed here.   SPECIAL THANKS:
Categories: CRM

Simplifying Data Warehouse Optimization

Talend - Sat, 11/10/2018 - 13:04

When I hear the phrase “Data Warehouse Optimization”, shivers go down my spine.  It sounds like such a complicated undertaking.  After all, data warehouses are big, cumbersome and complex systems that can store terabytes and even petabytes of data that people depend on to make important decisions on the way their business is run.  The thought of any type of tinkering with such an integral part of a modern business would make even the most seasoned CIO’s break out into cold sweats. However, the value of optimizing a data warehouse isn’t often disputed.  Minimizing costs and increasing performance are mainstays on the “to-do” lists of all Chief Information Officers.  But that is just the tip of the proverbial iceberg.  Maximize availability.  Increase data quality.  Limit data anomalies.  Eliminate depreciating overhead.  These are the challenges that become increasingly more difficult to achieve when stuck with unadaptable technologies and confined by rigid hardware specifications. The Data Warehouse of the Past Let me put it into some perspective.  Not long ago many of today’s technologies (i.e. Big Data Analytics, Spark engines for processing and Cloud Computing and storage) didn’t exist,  yet the reality of balancing the availability of quality data with the efforts required to cleanse and load the latest information proved a constant challenge.  Every month, IT was burdened with loading the latest data into the data warehouse for the business to analyze.  However, often the loading itself took days to complete and if the load failed, or worse, the data warehouse became corrupted, recovery efforts could take weeks.  By the time last month’s errors were corrected, this month’s data needed to be loaded.  It was an endless cycle that produced little value.  Not only was the warehouse out-of-date with its information, but it was also tied up in data loading and data recovery processes, thus making it unavailable to the end user.  With the added challenges of today’s continuously increasing data volumes, a wide array of data sources and more demands from the business for real-time data in their analysis, the data warehouse needs to be a nimble and flexible repository of information, rather than a workhorse of processing power. Today’s Data Warehouse Needs In this day and age, CIO’s can rest easy knowing that optimizing a data warehouse doesn’t have to be so daunting.  With the availability of Big Data Analytics, lightning-quick processing with Apache Spark, and the seemingly limitless and instantaneous scalability of the cloud, there are surely many approaches one can take to address the optimization conundrum.  But I have found the most effective approach to simplifying data warehouse optimization (and providing the biggest return on investment) is to remove unnecessary processing (i.e. data processing, transformation and cleansing) from the warehouse itself.  By removing the inherent burden of ETL processes, the warehouse has nearly instantaneously increased availability and performance.  This is commonly referred to as “Offloading ETL”.  This isn’t to say that the data doesn’t need to be processed, transformed and cleansed.  On the contrary, data quality is of utmost importance.  But relying on the same systems that serve up the data to be responsible for processing and transforming the data is robbing the warehouse of its sole purpose; providing accurate, reliable and up-to-date analysis to end-users in a timely fashion, with minimal downtime.  By utilizing Spark and it’s in-memory processing architecture, you can shift the burden of ETL onto other in-house servers designed for such workloads. Or better yet, shift the processing to the cloud’s scalable infrastructure and not only optimize your data warehouse, but ultimately cut IT spend by eliminating the capital overhead of unnecessary hardware. Talend Big Data & Machine Learning Sandbox In the new Talend Big Data and Machine Learning Sandbox, one such example illustrates how effective ETL Offloading can be.  Utilizing Talend Big Data and Spark, IT can work with business analysts to perform Pre-load analytics – analyzing the data in its raw form, before it is loaded into a warehouse – in a fraction of the time of standard ETL.  Not only does this give business users insight into the quality of the data before it is loaded into the warehouse, it also allows IT a sort of security checkpoint to prevent poor data from corrupting the warehouse and causing additional outages and challenges. Optimizing a data warehouse can surely produce a fair share of challenges.  But sometimes the best solution doesn’t have to be the most complicated.  That is why Talend offers industry leading data quality, native Spark connectivity and subscription-based affordability, giving you a jump-start on your optimization strategy.  Further, Data Integration tools need to be as nimble as the systems they are integrating.  Therefore, leveraging Talend’s future-proof architecture means you will never be out of style with the latest technology trends; giving you piece of mind that today’s solutions won’t become tomorrow’s problems. Download the Talend Big Data and Machine Learning Sandbox today and dive into our cookbook The post Simplifying Data Warehouse Optimization appeared first on Talend Real-Time Open Source Data Integration Software.

Categories: ETL

4 Ways You Should be Using the Talend tMap Component

Talend - Fri, 11/09/2018 - 12:36

At Talend one of my “Shadow IT” jobs is reporting on the component usage. If you have ever used Talend Studio (either the open source Talend Open Studio or the commercial version you most likely know the component tMap.  It is the most used component by a long shot. Why? Simply put, it’s because it is extremely versatile and useful.  When I was first asked to write this article I thought, “Why not, this will be easy.”  But, as I started actually going about picking out use cases I quickly realized that there are so many more than just 4 to choose from! I actually challenge everyone to respond and tell me below what you think the top features are of the tMap component. I would love to hear from you. I will start out by listing the most obvious but most needed and then get into some more advanced uses.  (I will try and sneak a couple in together so I can have more than 4, hopefully, our editor doesn’t catch it.) Editors note: I did catch it, but that’s just fine Mark. #1 Mapping, of course.  The tMap’s most basic use is to map inputs to outputs.  This can be as simple as Source fields to Target fields of the data integration job.  It can also be from some other input components like aggregators, matching or data quality components.  With the tMap you can also limit the fields mapped from left to right, basically filtering unneeded columns.  You can create new columns coming out of the tMap, say for example adding sequence keys, or concatenating multiple input columns into a new column, for example address fields into one column to make a single mailing data field.   This leads into the next big use case I want to cover…. #2 Expression Builder.  Within the tMap on any column or variable you can open the expression builder wizard where you get access to hundreds of Talend functions, and if you can’t find a Talend function that meets your needs then you can fall back on a native Java function (don’t fear, if you don’t know Java just Google it). If you happen to know some Java, you can easily build custom Java routines which will then be available within the expression builder.   Also, expression builder allows you do complex math on multiple fields if needed. You can extract parts of dates, do data conversions, even case statements to build in “what if” logic.  The same conditional statements can be used to determine if a row should pass through the tMap at all, acting as a filter.  As you can see with the tMap Expression Builder you get great transformation powers. #3 Lookups.  The tMap is where you can do what many Data Integration specialists refer to as “lookups” on data. For those unfamiliar, this is basically joining data from one source to another source.  The tMap has a lot of functionality on lookups, like inner join or outer join, reject if join is not found, cache the lookup data and much more.  Lookups are critical to data transformation process as you often need to pull in reference data or get expanded views of records.  With Talend the lookup source can be anything that can be sourced into a Talend job.  This has almost endless possibilities.  To illustrate, let’s imagine a multi-cloud scenario quickly. Let’s say you have customer data in AWS on S3 and some other critical data on Azure Blob storage. in a single Talend job using tMap and lookups you can easily join the two sources together and write your data anywhere you need, like say Google BigQuery just to be crazy! #4 Route Multiple Outputs.  The tMap can only have one input (not counting Lookups) but you can have multiple outputs with any number of columns as outputs on each stream.  This becomes a fast and powerful way to route errors down a different flow or to just duplicate the data flows to different streams one flow can go to an aggregation component while another output could go direct to your target outputs and a third have a conditional statement looking for errors.  All this becomes extremely useful as your data flows become complex with multiple outputs, error processing and conditional outputs. Conclusion There you have it, a quick and (hopefully) helpful introduction to our most popular component in Talend. If you want some more tMap knowledge, let me know in the comments below and I’ll spin up my next article around some more advanced mapping functionalities. Happy connecting!   The post 4 Ways You Should be Using the Talend tMap Component appeared first on Talend Real-Time Open Source Data Integration Software.

Categories: ETL

Webinar #Giving Tuesday (in Spanish) - Prepara tu campaña con CiviCRM

CiviCRM - Fri, 11/09/2018 - 05:09

Te invitamos a nuestro próximo webinar el día 13 de noviembre a las 11h

¿Has lanzado tu campaña de #GivingTuesday? ¿Has definido tu estrategia de comunicación? Si aún no lo has hecho o si lo has hecho, pero tienes dudas o quieres hacer tu campaña más atractiva, regístrate a nuestro webinar gratuito en el que trataremos los siguientes puntos:

Categories: CRM

Online Training: Contact Management for New Users rescheduled for November 20th

CiviCRM - Thu, 11/08/2018 - 14:36

Are you new to CiviCRM and need to learn the basics of contact management? want to know more about relationships, searching, groups & tags and how to create an activity report?

Categories: CRM

It’s Official! Talend to Welcome Stitch to the Family!

Talend - Wed, 11/07/2018 - 16:12
The Acquisition

Today, Talend announced it has signed a definitive agreement to acquire Stitch, a self-service cloud data integration company that provides an exceptionally quick, easy, and intuitive experience in modern cloud environments. With Stitch, Talend will be able to provide both SMB and enterprise customers with a highly efficient way to move data from cloud sources to cloud data warehouses and buy in a frictionless manner. As companies standardize on using the cloud for analytics, Talend Cloud has become a compelling solution for customers of all sizes to meet their complete data and application needs. We have developed Talend Cloud into the ideal choice by bringing together a broad range of functionality in one platform – from native big data and embedded data quality to enterprise-level CI/CD capabilities and data governance. Now, with the addition of Stitch, Talend customers have an even more comprehensive tool to complete their cloud-first and digital transformation mission. Why Stitch? To improve customer experiences, companies need to collect and analyze vast amounts of data across cloud and on-premises systems. When we look deeper at the challenge, it is often the data analysts and business analysts to data engineers who want to want to collect data from their cloud apps, such as Salesforce, Marketo and Google Analytics, and put it into a cloud data warehouse such as Amazon Redshift and Snowflake. And when we look across a company, each department, from marketing to finance to HR to manufacturing has this need to collect more data and derive more insight. Unfortunately, many companies struggle to efficiently collect data which means they cannot reach their data-driven potential. There may be an IT bottleneck, it may take time to get the systems up and running, or the line of business may be doing it with inefficient hand-coding. This is the problem that Stitch addresses, it provides self-service tools, in the cloud, that automate loading data into cloud data warehouses. And the process of getting started and loading data just takes minutes. So now anyone in a company can easily and quickly load data into a cloud data lake or data warehouse. At Talend, we saw this emergence of a new data integration category and how it would immediately benefit our customers. Talend provides tools that address all types of integration complexity, where you build data pipelines to collect, govern, transform and share data.  Stitch provides a complementary solution that will enable many more people in an organization to collect more data, which can then be governed, transformed and shared with Talend, which will mean faster and better insight for all. Stitch is Available for Free Trial Now Over the next few months, we will build out more features and services that are part of our focus on addressing any integration use cases by connecting any data and application with Talend Cloud in a seamless and frictionless manner. Stitch is available for purchase or evaluation today. Sign up for a free trial at https://www.stitchdata.com/. For complex integration use cases, try Talend Cloud for 30 days for free at https://cloud.talend.com/ The post It’s Official! Talend to Welcome Stitch to the Family! appeared first on Talend Real-Time Open Source Data Integration Software.

Categories: ETL

Prepare your Google Ads campaigns for Black Friday and Cyber Monday

PrestaShop - Wed, 11/07/2018 - 05:27
Black Friday and Cyber Monday is about to come and it will bring a lot of conversions for your stores!
Categories: E-commerce

COSCon Bridges East & West, Open Source Powers Now & Future

Open Source Initiative - Tue, 11/06/2018 - 15:50

The OSI was honored to participate in the 2018 China Open Source Conference (COSCon'18) hosted by OSI Affiliate Member KAIYUANSHE in Shenzhen, China. Over 1,600 people attended the exciting two-day event, with almost another 10,000 watching via live-stream online. The conference boasted sixty-two speakers from twelve countries, with 11 keynotes (including OSI Board alum Tony Wasserman), 67 breakout sessions, 5 lightning talks (led by university students), 3 hands-on camps, and 2 specialty forums on Open Source Education and Open Source Hardware.

COSCon'18 also served as an opportunity to make several announcements, including the publication of "The 2018 China Open Source Annual Report", the launch of "KCoin Open Source Contribution Incentivization Platform", and the unveiling of KAIYUANSHE's "Open Hackathon Cloud Platform".

Since its foundation in October of 2014, KAIYUANSHE has continuously helped open source projects and communities thrive in China, while also contributing back to the world by, "bringing in and reaching out". COSCon'18 is one more way KAIYUANSHE serves to: raise awareness of, and gain expereince with, global open source projects; build and incentivise domestic markets for open source adoption; study and improve open source governance across industry sectors; promote and serve the needs of local developers, and; identify and incubate top-notch local open source projects.

In addition to all of the speakers and attendees, KAIYUANSHE would like to thank their generous sponsors for all of their support in making COSCon'18 a great success. 2018 China Open Source Annual Report - Created by KAIYUANSHE volunteers over the past six months, the 2018 Open Source Annual Report describes the current status, and unique dynamics, of Open Source Software in China. The report provides a global perspective with contributions from multiple communities, and is now available on GitHub: contributions welcome. KCoin - Open Source Contribution Incentivization Platform - KCoin, an open source, blockchain-based, contribution incentivization mechanism was launched at COSCon'18. KCoin is curently used by three projects including, KFCoding--a next generation interactive developer learning community, ATN--an AI+Blockchain-based open source platform, and Dao Planet--a contribution-based community incentive infrastructure. Open Hackathon Platform Donation Ceremony - Open Hackathon Platform is a one-stop cloud platform for hosting or participating online in hackathons. Originally developed by and run internally for Microsoft development, the platform was officially donated to KAIYUANSHE by Microsoft during the conference. Since May of 2015 the open source platform has hosted more than 10 hackathons and other collabrative development efforts including hands-on camps and workshops, and is the first project to be contributed by a leading international corporation to a Chinese open source community. Ulrich Homann, Distinguished Architect at Microsoft who presided over the dedication offered, “We are looking forward to contributions from the KAIYUANSHE community which will make the Open Hackathon Cloud Platform an even better platform for your needs. May the source be with you!” Open Source 20-Year Anniversary Celebration Party - Speakers, sponsors, community and media partners, and KAIYUANSHE directors and officers came together to celebrate the 20-year anniversary of Open Source Software and the Open Source Initiative. The evening was hosted by OSI Board Director Tony Wasserman, and Ross Gardler of the Apache Software Foundation, who both shared a few thoughts about the long journey and success of Open Source Software. Other activities included, a "20 Years of Open Source Timeline", where attendees added their own memories and milestones; "Open-Source-Awakened Jedi" cosplay with Kaiyuanshe directors and officers serving OSI 20th Anniversary cake as Jedi warrior's (including cutting the cake with light sabers!). The celebration also provided an opportunity to recognize the outstanding contributions to KAIYUANSHE and open source by two exceptional individuals. Cynthia Xin and Junbo Wang were both awarded the "Open Source Star" trophy. Cynthia was recognized for her work as both the Event Team Lead and Community Partnership Team Lead, while Junbo Wang, was recognized for contributions as the Open Hackathon Cloud Platform Infrastructure Team Lead, and KCoin Project Lead. "May the source be with you!" Fun for all at the 20th Anniversary of Open Source party during COSCon'18.   Other highlights included:

  • A "Fireside Chat" with Nat Friedman, GitHub CEO, and Ted Liu, Kaiyuanshe Chairman
  • Apache Project Incubation
  • Implementing Open Source Governance at Scale
  • Executive Roundtable: "Collision of Cultures"
  • 20 years of open source: Where can we do better?
  • How to grow the next generation of university talent with open source.
  • Open at GitLab: discussions and engagement.
  • Three communities--Open Source Software (OSS), Open Source Hardware (OSHW) and Creative Commons (CC)--on stage, sharing and brainstorming.
  • Made in China, "Xu Gu Hao": open source hardware and education for the fun of creating!
Former OSI Board Director Tony Wasserman presents at COSCon'18   COSCon'18 organizers would like to recognize and thank their international and domestic communities for their support, Apache Software Foundation (ASF), Open Source Initiative (OSI), GNOME, Mozilla, FreeBSD and another 20+ domestic communities. As of Oct. 23rd, there were more than 120,000 viewerships from the retweet of the articles published for the COSCon'18 by the domestic communities and more retweets to come from the international communities. We are grateful for these lovely community partners. The board of GNOME Foundation also sent a greeting video for the conference. Many attendees also offered their thoughts on the event... COSCon was a great opportunity to meet developers and learn how GitHub can better serve the open source community in China. It is exciting to see how much creativity and passion there is for open source in China. ---- Nat Friedman, CEO, GitHub COSCon is the meetup place for open source communities. No matter where you are, on stage or in the audience crowd, the spirits of openness, freedom, autonomy and collaboration run through the entire conference. Technologies rises and falls, only the ecosystem sustains over the community. ---- Tao Jiang, Founder of CSDN When I visited China in 2015, I said "let's build the bridge together", in 2018 China Open Source Conference, I say "let's cross the bridge together!" ---- Ross Gardler, Executive Vice President, Apache Software Foundation The conference was an excellent opportunity to learn about "adoption and use of FOSS from industry leaders in China and around the world." ---- Tony Wasserman, OSI Board Member Alumni, Professor of Carnegie Mellon University I'm very glad to see the increasing influence power of KAIYUANSHE and wish it gets better and better. ---- Jerry Tan, Baidu Open Source Lead & Deep Learning Evangelist It is a great opportunity to share Microsoft’s Open source evolution with the OSS community in China through the 2018 ConsCon conference. I am honored to officially donate the Microsoft Open Hackathon platform to the Kayuanshe community. Contributing over boundaries of space and time is getting more important than ever – an open platform like the Microsoft Open Hackathon environment can bring us together wherever we are, provide a safe online environment enabling us to solve problems, add unique value and finally have lots of fun together. ---- Ulrich Homann,Distinguished Architect, Microsoft I was impressed by the vibrant interest in the community for OSS and The Apache Software Foundation, particularly by young developers. ---- Dave Fisher, Apache Incubator PMC member & mentor Having the China Open Source Conference is a gift for the 20-year anniversary of the birth of open source from the vast number of Chinese open source fans. In 2016, OSI officially announced that Kaiyuanshe becomes an OSI affiliate member in recognizing Kaiyuanshe's contribution in promoting open source in China. Over the years, the influence of Kaiyuanshe has been flourishing, and many developers have participated & contributed to its community activities. In the future, Huawei Cloud is willing to cooperate with Kaiyuanshe further to contribute to software industry growth together. ---- Feng Xu, founder & general manager of DevCloud, Huawei Cloud
Categories: Open Source

Liferay Portal 7.1 CE GA2 Release

Liferay - Mon, 11/05/2018 - 23:00
What's New Downloads Download the release now at: https://www.liferay.com/downloads-community New Features Summary Web Experience:  Fragments allow a content author to create small reusable content pieces. Fragments can be edited in real time or can be exported and managed with the tooling of your choice. Use content pages from within a site to have complete control over the layout of your pages.  Navigation Menus let's you create site navigation in new and interesting ways and have full control over the navigations visual presentation.   Forms Experience: Forms can now have complex grid layouts, numeric fields and file uploads. They now include new personalization rules that let you customize the default behavior of the form. Using the new Element Sets, form creators can now create groups of reusable components. Forms fields can now be translated into any language using any locale and can also be easily duplicated.   Redesigned System Settings: System Settings have received a complete overhaul. Configuration options have been logically grouped together making it easier than ever before to find what's configurable. Several options that were located under Server Administration have also been moved to System Settings.   User Administration: The User account form has been completely redesigned. Each form section can now be saved independently of each other minimizing the chance of losing changes. The new ScreensNavigationEntry let's developers add custom forms under user administration. Improvements to Blogs and Forums: Blog readers a can now un-subscribe to notifications via email.  Blog authors now have complete control over the friendly URL of the entry.  Estimated reading time can be enabled in System Settings and will be calculated based on time taken to write an entry. Blogs also have a new cards ADT that can be selected from the application configuration.  Videos can now be added inline while writing a new entry from popular services such as: Youtube, Vimeo, Facebook Video, and Twitch. Message boards users can now attach as many files as they want by dragging and dropping them in a post. Message boards also has had many visual updates.   Workflow Improvements: Workflow has received a complete UI overhaul. All workflow configuration is now consolidated under one area in the Control Panel. Workflow definitions are now versioned and previous versions can be restored. Workflow definitions can now be saved in draft form and published live when they are ready. Infrastructure: Many improvements have been incorporated at the core platform level, including ElasticSearch 6.0 support and the inclusion of Tomcat 9.0.  Documentation Official Documentation can be found on Liferay Developer network.  For information on upgrading, see the Upgrade Guide. Bug Reporting If you believe you have encountered a bug in the new release you can report your issue on issues.liferay.com, selecting the "7.1.0 CE GA2" release as the value for the "Affects Version/s" field. Getting Support Support is provided by our awesome community. Please visit our community website for more details on how you can receive support. Liferay and its worldwide partner network also provides services, support, training, and consulting around its flagship enterprise offering, Liferay DXP. Also note that customers on existing releases such as 6.2 and 7.0 continue to be professionally supported, and the documentation, source, and other ancillary data about these releases will remain in place. Jamie Sammons 2018-11-06T04:00:00Z
Categories: CMS, ECM

Mitigating RichFaces 4.5.17.Final EOL Vulnerabilities

Liferay - Mon, 11/05/2018 - 18:16
Mitigating RichFaces 4.5.17.Final EOL Vulnerabilities

If you are using RichFaces, you should be aware that Code White has discovered some remote code execution vulnerabilities in the component library. Unfortunately, since RichFaces has reached end-of-life status, these vulnerabilities will not be fixed. Thankfully there two easy options to mitigate these vulnerabilities:

  1. Migrate to Alberto Fernandez’s fork of RichFaces. Alberto has fixed the known security vulnerabilities and other issues with RichFaces, so you should be able to upgrade to his latest release with little trouble: <dependency> <groupId>com.github.albfernandez.richfaces</groupId> <artifactId>richfaces</artifactId> <version>4.6.5.ayg</version> </dependency>
  2. Disable resource serialization. RichFaces has a whitelist of classes that it will deserialize. By setting the whitelist to empty you can avoid this remote code execution vulnerability. Just add the following content to a file named src/main/resources/org/richfaces/resource/resource-serialization.properties in your Maven or Gradle project: # Disable resource serialization to disallow remote code execution: # CVE-2013-2165, RF-14310, CVE-2015-0279, RF-13977, and RF-14309. # See https://codewhitesec.blogspot.com/2018/05/poor-richfaces.html for more details. whitelist=
The Liferay Faces team has used the second mitigation method to protect our RichFaces demos and archetypes. We have released new versions of our RichFaces archetypes with the mitigation included. Please see the release notes for more details. Kyle Joseph Stiemann 2018-11-05T23:16:00Z
Categories: CMS, ECM

Mass Emailing using Mosaico online training session - November 7th

CiviCRM - Fri, 11/02/2018 - 16:37

Join Cividesk for this NEW online training session that will introduce the basic concepts of CiviMail and how to use the new Mosaico extension to create a professional and responsive newsletter. 

Click here to register for this one hour training session on November 7th at 10 am MT/11 am CT/12 pm ET.

Categories: CRM

For a more conspicuous SPA loading indicator

Liferay - Thu, 11/01/2018 - 17:15

// The french version of this article can be found here: Pour un indicateur de chargement SPA plus visible. Since version 7.0 of Liferay, you surely noticed the apparition of a thin loading bar on top of screen, after most of user actions. This loading bar is part of the new SPA (Single Page Application) mode of Liferay, supported by the Senna.js framework. Unfortunately, this bar is so inconspicuous that most users do not see it. In general, without a visual feedback related to their action, they reiterate their action several times, which often lengthens the waiting time. In the end, users are often unnecessarily frustrated just because this load indicator is not visible enough. Fortunately, it's quite simple to fix this with a few lines of CSS in a custom theme, because this loading bar is just a single HTML tag on which a CSS class is dynamically applied. <div class="lfr-spa-loading-bar"></div> As a starting point, we can consider the superb loaders provided by Luke Haas in his project Single Element CSS Spinners. Just make some adaptations to get a CSS loader compatible with Liferay: /* Reset properties used by the original loader */ .lfr-spa-loading .lfr-spa-loading-bar, .lfr-spa-loading-bar { -moz-animation: none 0 ease 0 1 normal none running; -webkit-animation: none 0 ease 0 1 normal none running; -o-animation: none 0 ease 0 1 normal none running; -ms-animation: none 0 ease 0 1 normal none running; animation: none 0 ease 0 1 normal none running; display: block; -webkit-transform: none; -moz-transform: none; -ms-transform: none; -o-transform: none; transform: none; background: transparent; right: initial; bottom: initial; } /* Pure CSS loader from https://projects.lukehaas.me/css-loaders */ .lfr-spa-loading .lfr-spa-loading-bar, .lfr-spa-loading .lfr-spa-loading-bar:after { border-radius: 50%; width: 10em; height: 10em; z-index: 1999999; } .lfr-spa-loading .lfr-spa-loading-bar { margin: 60px auto; font-size: 10px; text-indent: -9999em; border-top: 1.1em solid rgba(47, 164, 245, 0.2); border-right: 1.1em solid rgba(47, 164, 245, 0.2); border-bottom: 1.1em solid rgba(47, 164, 245, 0.2); border-left: 1.1em solid #2FA4F5; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation: load8 1.1s infinite linear; animation: load8 1.1s infinite linear; } @-webkit-keyframes load8 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes load8 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } /* Positionning */ .lfr-spa-loading .lfr-spa-loading-bar { position: fixed; top: 50%; left: 50%; margin-top: -5em; margin-left: -5em; } Once the custom theme is applied we get a loader clearly visible that no user can miss: This snippet support Liferay 7.0 and 7.1 and is also available on gist. If you also have tips to improve the UX of a portal Liferay, feel free to share them in the comments of this post or in a dedicated blog post. Sébastien Le Marchand Freelance Technical Consultant in Paris Sébastien Le Marchand 2018-11-01T22:15:00Z

Categories: CMS, ECM
Syndicate content