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.
  • 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.
  • 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.

Membership Renewal online training: February 12th at 9 am MT/10 am CT/11 am ET

CiviCRM - Fri, 02/08/2019 - 17:28

Learn how to manage membership renewals in CiviMember in the online session brought to you by Cividesk, "Managing a Membership Renewal Campaign".

Categories: CRM

Snowflake and SnapLogic: An unstoppable combination

SnapLogic - Thu, 02/07/2019 - 07:55

I have had the privilege of working for two of the most successful technology companies in the data space – Snowflake Computing [data warehousing as a service (DWaaS)] and SnapLogic [integration platform as a service (iPaaS)]. These experiences have been really valuable in shaping me as a data professional. As a result of working for[...] Read the full article here. The post Snowflake and SnapLogic: An unstoppable combination appeared first on SnapLogic.

Categories: ETL

Spinning up Cloud-scale Analytics is now Even More Compelling with Talend and Microsoft

Talend - Thu, 02/07/2019 - 07:30

Today, we’re excited to share two announcements that make adopting Microsoft Azure SQL Data Warehouse (ADW) a no-brainer.

First, ADW significantly increased the lead over the competition with the new price-performance benchmarks published by GigaOm, showing exponential price-performance improvements over similar solutions. This should be especially interesting to large enterprises with legacy, on-premises data warehouse deployments that can benefit from the best-in-class performance, security, and unmatched cost advantages of Azure SQL Data Warehouse. Second, Stitch Data Loader, our recent addition to help support our small and mid-market customers, now supports Microsoft Azure SQL Data Warehouse destinations. With Stitch Data Loader, customers can load 5 million rows/month into Azure SQL Data Warehouse for free, or scale up to an unlimited amount of rows with a subscription. All across the industry, there is a rapid shift to the cloud. Utilizing fast, flexible, and secure cloud data warehouse is an important first step in that journey. With Microsoft Azure SQL Data Warehouse and Stitch Data Loader companies can get started faster than ever. The fact that ADW can be up to 14x faster, and 94% less expensive than similar options in the marketplace, should only help further accelerate adoption of cloud scale analytics by customers of all sizes. An intro to Microsoft Azure SQL Data Warehouse Azure SQL Data Warehouse is a fully managed cloud data warehouse for enterprises of any size that combines lightning-fast query performance with industry-leading data security. With ADW, users are billed for compute and storage resources independently. You can increase storage when you need to without being forced to increase compute capacity simultaneously, so you pay for only what you need. Azure SQL Data Warehouse’s elastic scalability also makes it fast and cost-effective to scale compute and storage resources with latency measured in seconds or minutes. That means you no longer have to perform the preload transformations required with ETL. Instead, you can load all of your raw data into your data warehouse, then define transformations in SQL and run them in the data warehouse at query time. This new sequence has changed ETL into ELT. Building pipelines to the cloud with Stitch Data Loader The Stitch team built the Azure SQL Data Warehouse integration with the help of Microsoft engineers. The solution leverages Azure Blob Storage and PolyBase to get data into the Azure cloud and ultimately loaded to SQL Data Warehouse. We take care of all issues with data type transformation between source and destination, schema changes, and bulk loading. To start moving data, just specify your host address and database name and provide authentication credentials. Stitch will then start loading data from all of your sources in minutes. Stitch Data Loader enables Azure SQL Data Warehouse users to analyze data from more than 90 data sources, including databases, SaaS tools, and ad networks. We also sponsor and integrate with the Singer open source ETL project, which makes it easy to get additional or custom data sources into Azure SQL Data Warehouse. Stitch’s destination switching feature also makes it easy for existing Stitch users to take their existing integrations and start loading them into Azure SQL Data Warehouse right away. Going further with Talend Cloud and Azure SQL Data Warehouse What if you’re ready to scale out your data warehousing efforts and layer on data transformation, profiling, and quality? Talend Cloud offers many more sources as well as more advanced data processing and data quality features that are available within the ADW and the Azure Platform. With over 900 connectors available, you’ll be able to move all your data, no matter the format or source. With data preparation and additional security features built-in, you can get Azure-ready in no time. Take Uniper for instance. Using Azure and Talend Cloud, they built a cloud-based data analytics platform to integrate over 100 data sources including temperature and IoT sensors, from various external and internal sources. They constructed the full flow of business transactions — spanning market analytics, trading, asset management, and post-trading — while enabling data governance and self-service, resulting in reduced integration costs by 80% and achieving ROI in 6 months. What next?

Learn more about how you can use Stitch and Azure SQL Data Warehouse to build your data analytics stack. The post Spinning up Cloud-scale Analytics is now Even More Compelling with Talend and Microsoft appeared first on Talend Real-Time Open Source Data Integration Software.
Categories: ETL

CiviCRM 5.10.0 release

CiviCRM - Thu, 02/07/2019 - 07:18
CiviCRM version 5.10.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.10.0 can be accessed here.   SPECIAL THANKS:
Categories: CRM

How to build an API strategy in five easy steps

SnapLogic - Wed, 02/06/2019 - 17:51

By now, most companies understand that if they do not embrace digital ecosystems, they will trail behind those that do. Imagine an airline refusing to share its flight schedules and pricing data with third-party travel sites – an exchange that is common in the travel industry and that typifies a digital ecosystem. Such an airline[...] Read the full article here. The post How to build an API strategy in five easy steps appeared first on SnapLogic.

Categories: ETL

How Euronext is Utilizing Real-Time Data to Become a “Data Trader”

Talend - Tue, 02/05/2019 - 19:36

Following its split from the New York Stock Exchange in 2014, Euronext became the first pan-European exchange in the eurozone, fusing together the stock markets of Amsterdam, Brussels, Dublin, Lisbon, and Paris. Euronext uses Optiq, an incredible trading platform, which is the active memory of 100 TB transactions, with systems that practically work in nanoseconds. But for analytics, sometimes Euronext had to wait six to twelve hours after market close on days with important events before they could send the data to business units and clients. Also, Euronext’s storage needs continued to grow, especially following several acquisitions and with regulators, expecting that Euronext store more and more data. Migrating to a Governed Cloud Euronext chose Talend Big Data to absorb real-time data in an AWS data lake, including internal data from its own trading platform and external data, such as from Reuters and Bloomberg. In an ultra-regulated world, Talend Data Catalog has also proven to be highly adept at meeting the challenges of data lake governance and regulatory compliance. “In the stock exchange sector, we follow three watchwords: integrity, because it is impossible to lose a single order; permanent availability; and governance in a highly-regulated market. Talend has met these expectations.” – Abderrahmane Belarfaoui, Chief Data Officer Making the Most of Stock Market Data Beyond the improved architecture, the migration is also positioning Euronext to become a “data trader.” In fact, the sale of data already brings in 20% of Euronext’s revenues. Traders actually sell, buy, and make their investment decisions in milliseconds. They have a huge appetite for aggregated data in real time. In addition to clients, this project also involves giving data scientists and business units self-service access to this data, which they can analyze in data sandboxes for tasks such as market monitoring. Watch the full case study below:  The post How Euronext is Utilizing Real-Time Data to Become a “Data Trader” appeared first on Talend Real-Time Open Source Data Integration Software.

Categories: ETL

Affirmation of the Open Source Definition

Open Source Initiative - Tue, 02/05/2019 - 11:07

PALO ALTO, Calif. - Feb. 5, 2019 -- In 1799 the kilogram was defined as the mass of a litre of water. In 1889, metal cylinders of the precise identical mass were created as reference objects.

In the hundreds of years since, the physical nature of the metal caused those cylinders no longer to reflect the identical mass as defined. In order to ensure the integrity of a vital unit of measurement, the kilogram was redefined as the same mass but simply expressed in terms of fundamental and invariable physical constants.

Without this single, standard definition of this or other fundamental units, commerce as we know it would not be possible. There is no trust in a world where anyone can invent their own definition for units, items, and concepts on which others rely, and without trust there is no community, no collaboration, and no cultural or technological development.

In exactly the same way, the term "open source software" was coined in 1998 as software that provides a set of precise freedoms and benefits, including but not limited to the freedoms to run, study, redistribute, and improve the software on which you rely . These benefits are codified in the Open Source Definition (OSD), which is based on the Debian Free Software Guidelines. The Open Source Initiative, its members, affiliates, and sponsors, promote and protect this fundamental definition through software license review and approval. Without this single, standard definition of "open source," software development as we know it would not be possible. There is no trust in a world where anyone can invent their own definition for open source, and without trust there is no community, no collaboration, and no innovation. Recently there have been efforts to undermine the integrity of open source by claiming there is no need for a single, authoritative definition. These efforts are motivated by the interests of a few rather than the benefit of all, and are at odds with the principles that have so demonstratively served us  well in the past decades. If allowed to continue, these efforts will erode the trust of both users and contributors, and hinder the innovation that is enabled by open source software, just as surely as having multiple definitions of a kilogram would erode and undermine commerce. We, the undersigned, affirm our commitment to the Open Source Definition. We acknowledge its importance to the development of the software on which we rely to operate our businesses and organisations. We pledge to guard and maintain the Open Source Definition and we recognize the Open Source Initiative as the steward of the Open Source Definition. Open Source Initiative, Board of Directors [Add your organization's name to our growing community protecting open source software, development and communities: contact us now.) American International University West Africa, The GambiaApereo FoundationAssociation Francophone des Utilisateurs de Logiciels LibresAssociazione LibreItaliaBigBlueButton, Inc.California Association of Voting OfficialsCreative CommonsDebian ProjectDemocracyLabDrupal AssociationEclipse FoundationJournal of Open Source SoftwareKaiyuansheKDE e.V.Linux Australia, Inc.Linux Professional InstituteLinuxFest NorthwestMozilla FoundationNew Zealand Open Source SocietyOdoo Community AssociationOpen Source Matters, Inc. (Joomla)Open Source SwedenOpenProject GmbHOW2 ConsortiumPlone FoundationPowering PotentialPuerto Rico Python Interest GroupPython Software FoundationRensselaer Center for Open SourceSnowdrift.coopsysarmyThe Document FoundationThe Perl FoundationTiki Wiki CMS GroupwareTYPO3 AssociationXerte Project

Categories: Open Source

Analyzing Activity in Liferay Forums 

Liferay - Tue, 02/05/2019 - 04:14

Hello Liferay Community Members!

From 2007 – 2018, over 30,000 members made over 130,000 comments in the Liferay community forums. As the community discussions have recently moved to a new platform, this is a good time to analyze the great exchange of information over the past 12 years. 

In this article, I use data science (Python Pandas and Python’s Natural Language Toolkit  - NLKT) on the Liferay forums to show how analyzing forum data can increase your understanding of your own online communities and enable you to make better operational and strategic decisions. 

DATA DESCRIPTION

I started with a raw file of all of the forum data. With some data cleaning, I created a file containing the details of every forum message. 

To visualize the final 5 rows of the file, I used the command forums.tail(5) .  

Note: No names or personal details appear here. The original forum postings and member profiles are public, so this is an extra cautionary step.

Let's explore the data to learn more about this member journey.

EXPLORING THE DATA WITH FUNCTIONS AND PLOTS: ANALYZING THE MEMBER JOURNEY

Understanding the member journey over time allows us to understand how users evolve and how to best engage them during this process.

To reproduce the questions and answers of a single discussion thread, I used forums.loc[forums.threadId==103912609].head(5) to filter by the “threadId”, which produced the following results:

It appears that experienced members are trying to assist the newbies.  Indeed, a central goal of the forums is to help members advance in their journey from novices to experts.

As Jamie Sammons, Developer Advocate at Liferay, Inc. says:

“Most contributors usually being within the Liferay community as a consumer reading the documentation, reading the forums and Slack.  For many the first step to active involvement is to receive help within the forums by asking questions specific to their environments. Most contributors who begin helping others usually start this way and then when they feel they are learning the ropes then sometimes even feel obligated to help others to pay back the support they received.”

ANALYZING MEMBER LIFESPANS

Do typical members just post once, or do they remain active over a longer period?  I calculated how long the users remained active by grouping each user’s posts together and then computing the difference in time between the first and last post. I only included members who started posting before 2015, since the newest members are likely still active.

I used a powerful “groupby” feature in Python to create this data frame. You can see the details in GitHub; an example of my results appears below. What was the distribution of members’ lifespans? The plot below demonstrates that almost 800 members had a life span of 1 day, with a large drop off in frequency thereafter.   I was also interested in understanding the veteran members. I zeroed in on the veterans’ lifespans by changed the scale on the graph above from days to years.  This chart shows that 1800 members had forum lifespans of 1-2 years. The bottoming out after 2 or 4 years is not surprising, as developers often have Liferay projects that last 2-4 years, after which they move on to other projects or companies. As Jamie Sammons, Developer Advocate at Liferay, Inc. says: “Most of the time what happens is the developer works for a consulting company and moves on to a new project or the developer may change jobs altogether.  In a few cases the developer works for a SI or partner company and they simply have a massive workload due to good business and simply cannot find time to contribute.”   With this data in hand, community managers can initiate a special outreach campaign after a member writes 1 post, and send personalized messages to new members, encouraging continuing engagement. Perhaps they could even award new members points in a “gamification” system to foster further interaction.  USING NATURAL LANGUAGE PROCESSING (NLP) TO UNDERSTAND THE COMMUNITY Word clouds are visualizations of content, and they can be used to improve members’ experiences in the community.  For example, posts on the topics identified through the word cloud can appear in the members’ activity feed, making the feed more relevant and engaging. It is helpful to understand the popular topics of the entire community as well. The chart below contains the word counts from the subject lines of every discussion in Liferay’s “Announcements” and “Development” forum categories.   The “?" and word "how" that appear in the Development category makes sense, as members typically ask other members technical or product-related questions (the trigram below further corroborates this).   In the Announcements category, the “!” often appears, indicative of members celebrating successes (e.g., “Congrats on the sale!).   Development Category Trigrams: NLP can also help with routine, but essential, community management operations.  In “What’s Next for the Liferay Community,” Liferay’s CEO describes one of their community management challenges:   “Although [the] numbers can show how vibrant this community is, we know we can do better, especially when it comes to the number of unanswered questions.” Using NLP, one approach is to optimize the expert assignments by category. Using the code below, I explored common words in the large “development” category that could be used to form smaller, more management discussion categories.   long_words = [word for word in words if               len(word) > 2 and word not in stoplist] fdistLong = nltk.FreqDist(long_words) fdistLong.most_common(50) It is clear that there are some good candidates here for topics that can be separated out to form new sub-groups: 1.    Portlet  2.    JSP  3.    Builder 4.    Theme  5.    Database Lexical dispersion plots are a way to visualize trending topics in the forums, allowing community managers to strategically introduce new subjects or create new discussions on existing popular issues.  The below plot indicates that the community talked intensely about “6.1” (presumably, a version of Liferay), with an overlap of “6.1” and “6.2” as “6.2” was released. mytext = nltk.Text(words)  mytext.dispersion_plot(["6.1","6.2"]) Below is an analysis of some other topics in the top 50 list: mytext.dispersion_plot(["jsp","database","struts","image"]) The above functions and visualizations are just the tip of the iceberg; there is much more that can be discovered by analyzing user behavior and the content itself. Yet even the relatively basic but thoughtful data science techniques I have demonstrated can help you strategically analyze and improve your community management.     About the author:   Adam Zawel is Vice President of Strategy with Leader Networks – a research and consulting firm. Adam Zawel 2019-02-05T09:14:00Z

Categories: CMS, ECM

Never get into trouble with 'Unresolved requirement' again

Liferay - Tue, 02/05/2019 - 00:02

       If you are a new to liferay 7.x platform since liferay had migrate to OSGi platform, you must have meet the error Unresolved requirement: Import-Package  when deploying your bundles, i have a easy solution for you —— 'Take a look at your bundle's MANIFEST.MF'.

      When you deploying your bundle to liferay portal, the OSGi container will resolve your bundle's MANIFEST.MF that contains all the dependencies relationship. If your MANIFEST file have declare a import package that doesn't exist in OSGi runtime or can't be found by OSGi classloader, you will get this ` Unresolved requirement ` message. I have some use cases for you.

1. If you want to import a third-party dependency, you may consider compileOnly  or compile  in the first time. But i'm sorry that it only help you to pass the java compile time, however, OSGi knows nothing about to find your dependency during it's runtime. Then we introduce compileInclude  configuration in gradle plugin.

it will help you to package the `compileInclude` dependencies into the jar's lib   folder and set a Bundle-ClassPath  property to MANIFEST, then the OSGi classloader can locate it.

2. You may encounter some weird problems when using some specific dependencies.

dependencies {

      compileInclude group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'

}

But you will get a error message :

Unresolved requirement: Import-Package: org.apache.avalon.framework.logger

Why it would happen since I never introduce this? Remember the solution i said? Take a look at your jar's MANIFEST.MF, you will find that it actually contains the import-package org.apache.avalon.framework.logger . It was introduced because the http client dependency that has import this package thus the bnd tool(The OSGi bundle builder) will automatic add this package. so you can exclude this import package in bnd.bnd.

Import-Package: \

  !*avalon*,\

  \

  *

3.The Unresolved import package also could happen on when you haven't pulling third-party dependencies that i met before. If you are developing a fragment bundle(such as  com.liferay.portal.search.web  ) to override the liferay bundle, and the file /META-INF/resources/custom/facet/view.jsp   to modify, although you haven' t modify this file , you can still get the unresolved import error

`Unresolved requirement: Import-Package: com.liferay.portal.search.web.internal.custom.facet.display.context`

this package is a internal package that means it don't want to be exposed to outside, and your fragment just want to import that. so your can safely exclude this import package in bnd.bnd, and the MANIFEST won't contain this import declaration. Will this result in a NoClassDefFoundError  during runtime? No, it won't, because the host bundle and the fragment bundle shared the same class loader to load this package's class.

Below is the order about OSGi load class, I hope it could help you to understand the resolving process:

Charles Wu 2019-02-05T05:02:00Z
Categories: CMS, ECM

January 2019 License-Review Summary

Open Source Initiative - Mon, 02/04/2019 - 16:57

In January, the License-Review mailing list discussed:

  • the new license review process
  • Server Side Public License, Version 2 (SSPL v2)
  • Convertible Free Software License, Version 1.3 (C-FSL v1.3)
    • What are the problems with Original Authors?
    • How is the C-FSL different from CLAs or permissive licenses?
    • Why is the publication requirement a problem?
    • Can the C-FSL be OSI-approved?
  • Convertible Free Software License, Version 1.4 (C-FSL v1.4)

The corresponding License-Discuss summary is online at https://opensource.org/LicenseDiscuss012019 and covers discussion on the opensource.dev info site, Open Data, “intimacy” in open source licenses, relicensing and maintainer–community dynamics, and VanL's upcoming license. License Committee Report Richard Fontana provides the license committee report [1,2]. The new license review process has been adopted, and will apply for ongoing reviews. Simon Phipps clarifies that the OSI Board will handle review decisions like any other board vote, but taking into account the advice and discussion on the license-review mailing list Phipps confirms that this new process means that “Stallman's four freedoms are an assumed precondition for evaluation.” OSI-approved licenses should be fine for general use, and ensure a level playing field. SSPL v2: the discussion is ongoing. The board will decide on 2019-02-18. C-FSL v1.3: approval of the previous version was withheld, and version 1.3 was submitted. The board will decide on 2019-02-18. Bruce Perens suggests that both licenses should be rejected: The new version of the C-FSL just seems to package the same discriminatory terms in different words. And the SSPL only receives comments on how it conflicts with Open Source principles or comments that argue that such a license is necessary, without proposing a solution to these conflicts. Server Side Public License, Version 2 Eliot Horowitz (MongoDB) announces that MongoDB is working towards a new revision of the SSPL. Horowitz clarifies that the focus on “service” is intended to cover multiple facets: not only offering a network service, but also offering services that derive their value from the software or services that provide the functionality of the software. Horowitz claims that the source disclosure requirements are narrower under the SSPL (only when offering the software as a service) than under the AGPL (when users interact with modified versions of the software) because he considers it to be easier to determine the purpose of the use of the software than to determine whether the software has been modified (Note: hmm). Gil Yehuda appreciates the clarifications of the SSPL over the AGPL, but notes that the SSPL only seems to be OSD-compliant for most users – but not all. Bruce Perens sees the SSPL as incompatible with OSD #9 “License must not restrict other software” because the SSPL requires the disclosure of software that is aggregated with but not derivative or part of the SSPL-covered software. “I wrote #9 into the OSD to prohibit exactly this sort of conduct. Exactly. The text is really clear.” Horowitz asserts that the goal of the SSPL is not to prevent commercial use in order to sell enterprise licenses, merely to protect “innovative open source software” (read: MongoDB's own hosted offering) from exploitation (read: competition) by large cloud vendors. John Cowan finds this confusing: why would MongoDB be fine with users installing MongoDB on servers in the cloud, but not with cloud providers offering managed services? The cloud provider would get paid either way. Vadim Tkachenko views MongoDB's stance as hypocritical: they want to suppress competitors to their business model, while still painting themselves as an Open Source company because that drove adoption of MongoDB by developers. Rob Landley notes that license or governance changes often result in more successful forks, as in the case of XFree86/X.Org. MongoDB's license change to the SSPL has already caused it to be dropped by Linux distros, and compatible replacements (e.g. from Amazon) or maintained forks (e.g. from Percona) are already available. “OSI aside, the community seems to have pretty clearly spoken.” However, Nigel Tzeng cautions that this is a matter of long-term investment. MongoDB will certainly continue to invest into their core product, whereas forks might not see comparable effort. Carlo Piana insists that the review should focus on the legally binding license text, not on MongoDB's intention. However, this also means that Horowitz' clarifications are irrelevant unless they become part of the license. Convertible Free Software License, Version 1.3 Elmar Stellnberger submits a completely rewritten version of the license [1,2]. The goal of this license is that maintainers of an open source project are free to change the license of the project, and can integrate any downstream modifications. Without the C-FSL, the project license could only be changed if the project uses a permissive license, if all copyright holders consent, or if all contributors signed a Contributor License Agreement (CLA) – but none of these ensure that downstream modifications are available under the same license. The C-FSL is therefore a copyleft license where contributors give designated “Original Authors” special relicensing rights. The idea of this license in general and the rewrite for the third version specifically are viewed quite critically on the mailing list. Carlo Piana recognizes “substantial effort to overcome most of the criticisms to the original version” but is frustrated with the apparent lack of understanding Stellnberger shows for this criticisms. Bruce Perens isn't satisfied at all: “When you request a “rewrite” of a license with a fundamental goal that is in conflict with the OSD, you are likely to get a rewritten license with the same problem as the original. And in this case we did.” Similarly, Brendan Hickey finds that the rewrite “doesn't address fundamental objections raised in the last version. […] There's nothing wrong with proprietary software, just don't call it open source.” There are three major criticisms of the C-FSL: 1) The special role of Original Authors is discriminatory, as argued by Brendan Hickey: “This is conceptually incompatible with the OSD. Any license that implements this is non-free.” 2) The C-FSL is trying to do copyright assignments in disguise. 3) The license imposes an onerous publication requirement for all changes. Carlo Piana provides an excellent analysis of the biggest problems with the license. What are the problems with Original Authors? Under the C-FSL, Original Authors can be appointed to act as the “effective copyright holders“. These can relicense the software by themselves, without having to acquire individual consent from all copyright holders – contributors have given implicit consent in advance. It is not clear what the rules of consensus among Original Authors are (majority vote?). These Original Authors are just a subset of all copyright holders, which disenfranchises other contributors. Simon Phipps points out that while there is precedent for asymmetric licenses, each half must still effectively be an OSI-approved license. (Note: Asymmetry was debated but ultimately removed during the approval process of the Upstream Compatibility License in 2016–2017.) Forks can assign their own Original Authors only if the fork is at least 65% different – a very high threshold. This deprives the forked project of their rights in the code. Stellnberger's intention for this hurdle is that it prevents two concurrent groups of Original Authors. But the freedom to fork is exactly what Open Source is about! Rob Landley writes a long email which traces through xfree96 and early Linux history, highlighting the differences between project forks and community forks and why a fork can be good for the community: “what this license is trying to do with its “original developers” nonsense does not match reality, even a little. […] It is conceptually broken.” Bruce Perens agrees: the C-FSL not only violates the OSD, it is also bad for the community. A separate thread ensues with numerous examples of relicensing, forks, and maintainer–community dynamics (Note: covered in the License-Discuss summary). The Original Authors can always appoint more Original Authors. But this doesn't guarantee that the Original Authors hold a significant copyright stake in the work. The concept of authorship also gets muddy when code from another project is included. Brendan Hickey notices that this allows the 65% rule to be circumvented, for example by including a huge third party library, or by including only a tiny part of the C-FSL covered code. Rob Landley points out that licenses don't determine who the copyright holder is, but what the copyright holders allow other people to do. This spawns a small discussion about the role of joint authorship in Open Source [1,2]. How is the C-FSL different from CLAs or permissive licenses? The goal of this license is that the maintainers can easily relicense the project, without having to deal with CLAs. If the CLAs and the C-FSL are criticized so much why not also permissive licenses, Stellnberger asks? Permissive licenses effectively allow anyone to relicense the code, whereas the C-FSL assigns this right to the Original Authors (see above criticism). Carlo Piana notes that contributors can refuse to sign a CLA in which case their changes cannot be merged into the upstream project, but contributors cannot refuse the C-FSL because it applies implicitly as soon as the changes are made. Brendan Hickey [1,2] points out that Project Harmony can be used for standard-ish CLA templates. In any way, allowing a maintainer team to do arbitrary relicensing is not a problem for Open Source to solve. Note: a further problem with allowing arbitrary relicensing is that contributors do not know up front which rights may be licensed. Contributors must therefore assume that they retain no rights except those explicitly licensed back through the C-FSL. A CLA at least explicitly enumerates which rights are licensed, and says whether they are licensed exclusively. The C-FSL's implicitness might be a problem if a jurisdiction's copyright laws require a specific contract form for these right transfers. Why is the publication requirement a problem? Carlo Piana notices that any changes to a C-FSL covered work must be published within a month, even incomplete or buggy changes. This violates the author's right to decide whether to publish at all. This is APPROPRIATION, plain and simple. So any changes I make, whether or not released to the public, are contributed with an equivalent of an assignment, granting rights over the derivative code, including the copyright of the developer, which are not available to the developer and there is no way to avoid it. Elmar Stellnberger responds that the publication requirement for buggy changes was not intentional. And isn't such a publication obligation similar to the Vim or Affero licenses? (Note: Nope. While Vim has a publication requirement, it also has an alternative GPLv2+ relicensing clause. And the AGPL doesn't require publication except when the software is conveyed or made available to users over a network.) Nigel Tzeng sees this publication requirement as a deal killer. All changes would have to be in public repositories. And because it would be extremely easy to be non-compliant, the C-FSL is a license trap. Can the C-FSL be OSI-approved? Brendan Hickey points out that the Debian Project has long argued that the C-FSL violates the DFSG, so OSI will hopefully not decide differently. Carlo Piana suggests that the license might become OSD-compliant if the CLA-like aspect only triggers on contribution to the upstream project, not as soon as the code is modified. “I expected something in this direction with the new license, conversely I only see stubborn rewording that makes it more hard to lay persons to spot how the license in practice work.” Elmar Stellnberger rejects this suggestion: “That would lead the whole clause of original authors ad absurdum” and make it too easy for other people to relicense the project. Convertible Free Software License, Version 1.4 Elmar Stellnberger submits the next revision of the C-FSL. Lukas Atkinson summarizes the changes: minor clarifications and a closed loophole. But no progress regarding the fundamental criticism has been made, so that further review seems pointless.

Categories: Open Source

January 2019 License-Discuss Summary

Open Source Initiative - Mon, 02/04/2019 - 16:57

In January, the License-Discuss mailing list discussed:

  • the opensource.dev info site
  • Open Data
  • “intimacy” in Open Source licenses
    • process and interface boundaries
    • corresponding Source
    • is it a problem that the FSF introduced a new word?
    • making sense of the law, and bright lines
    • licensor expectations
  • relicensing and maintainer–community dynamics
  • VanL's upcoming copyleft license

The corresponding License-Review summary is online at https://opensource.org/LicenseReview012019 and covers discussion on the SSPL v2 and the C-FSL. opensource.dev Chris DiBona (Google) announces https://opensource.dev/, an info page about Open Source by Google. It seems to be aligned with OSI interpretation and receives general praise and appreciation from the list. Christopher Sean Morrison lauds the good collection of resources about Open Source, and notes how accessible it is to new developers and non-developers as well. The opensource.dev site links to the OSI's licenses page. There is some discussion whether the EPL and CDDL should really be on that list of popular licenses. While no one disagrees on the CDDL, Mike Milinkovich (Eclipse Foundation) points out that the many Eclipse projects are a strong community that uses the EPL – though some might disagree that a foundation is a community. Open Data Christopher Sean Morrison announces that the US has signed a new open data law into effect. Gil Yehuda wonders whether there is a widely accepted definition of Open Data, similar to the OSD and the Four Freedoms for software? Sander van der Waal (Open Knowledge Foundation, OKFN) points to the OKFN's https://opendefinition.org which was inspired by the OSD. The OKFN also offers a license review process for Open Data licenses. However, version 4 of the Creative Commons licenses might make special Open Data licenses unnecessary. (Note: for example, CCv4 also considers database rights.) AFL "attribution notice" Antoine Thomas (PrestaShop) asks for clarification how derivative works should provide attribution under the Academic Free License. No one responded on-list :( Intimacy in Open Source Gil Yehuda asks what the (A)GPLv3 means by “intimate data communication”. For example, would a database client/driver not have intimate communication with its database server? Or are they completely separate works? Lawrence Rosen also raises the issue how this interacts with API copyrightability and what this means for network copyleft like AGPL and SSPL. Extensive discussion ensues. Process and interface boundaries John Cowan argues that communication is intimate when data structures are shared in memory. Shelling out would not count as intimate because that uses the software's standard interface. (Note: while the conclusion seems correct, the GPL defines Standard Interfaces more narrowly.) Luis Villa agrees with Cowan and even suggests that communication via a well defined interface cannot be intimate. Nicholas Weinstock thinks that this viewpoint makes sense and can explain why/when downstream users are subject to the (A)GPL, but wonders whether this would go against the “Torvalds Exception” (a statement that user space programs are not derivative of the Linux kernel). Bruce Perens confirms Weinstock's understanding that copyleft affects downstream use, but notes that the Torvalds Exception isn't so much an exception as a clarification of what the GPL is saying anyway. Perens cautions that if APIs are indeed copyrightable (cf Oracle v Google) then dynamic linking does not insulate downstream users from GPL-covered code. In general, Perens subscribes to the idea that intimacy does not apply when using a public API: “The programmers intended for you to use the API to connect to other programs” and “Intimacy requires intrusion into the internals of the program beyond the API published for programmers to use.” But with API copyrightability, “intimacy is not required for the creation of a derivative work” and a software would be derivative “even if it only uses the library's published API.” Weinstock points out that the distinction between internal and external APIs is not clear, for example when a fork could expose previously-internal APIs. Corresponding Source Lukas Atkinson notes that the GPL only talks about intimate communication as an example for what must be included in the software's Corresponding Source. The Corresponding Source must include everything necessary to build, install, and run the software, i.e. any upstream dependencies. Talking about intimate communication or different kinds of linking is pointless when looking at downstream usage of the software: the GPL does not and cannot define what counts as a derivative work, because that is the job of copyright law. Nicholas Weinstock asks whether this means that a GPL application is forbidden from relying on incompatibly-licensed libraries, and whether non-necessary libraries would not be intimate. Bruce Perens agrees with Atkinson's understanding of Corresponding Source and confirms that dependencies of GPL software must use a compatible license. Perens adds that the GPL Additional Permissions mechanism can be used to avoid some incompatibilities. Is it a problem that the FSF introduced a new word? There is some discontent that the GPLv3 introduces the term “intimate” which has no definition within the license or in legal usage. Such a vague word brings legal uncertainty, and might discourage (A)GPL use. Therefore, many people would like to see a clear statement from the FSF on the meaning of this word, in particular on when two programs perform intimate communication. Bruce Perens explains why that is not going to happen: The GPL tries to discourage license circumvention attempts, so it will not use narrow language. As a matter of strategy, the FSF does not issue such clarifications because that would limit them. They want to be able to use the maximal interpretation available in a jurisdiction. Scott Peterson points at the GPL FAQ for examples that discuss intimacy and at the GPLv3 rationale documents. The license draft had originally talked about “complex” data communication, but that was considered to suggest incorrect interpretations: “Intimate” is the most useful term we know to describe the kind of convoluted interaction and deep knowledge that suggest that one part is specifically designed to require another part. Lawrence Rosen is sceptical about the legal relevance of “convoluted interaction” and “deep knowledge” and thinks that the concept of Corresponding Source was “the worst mistake of GPLv3 drafting.” John Cowan thinks that “designed to require” is a useful test. Cowan points to the CLISP, which became available under the GPL because it required the readline library. But things get murky when considering alternative implementations: was a program using an alternative implementation designed to require the (interface of the) GPL-covered program? The FSF seems to think so, leading to proliferation of different APIs and compatibility wrappers. Making sense of the law, and bright lines When talking with engineers, Nicholas Weinstock has also hear some other ideas on what intimacy could mean here: Maybe two programs are intimate if their interaction was developed together? Or “intimate” could refer to categories of data rather than to the mechanism of communication? Bruce Perens cautions that legal topics don't necessarily make sense for engineers. License compliance is required “whether or not it fits with conventional process in your industry.” Instead of trying to find ways to combine copyleft with proprietary code, the better approach is to architect the software to keep them clearly apart. Rick Moen concurs: whether a work is derivative is for caselaw to decide, not for engineers or licenses. And there is little reason to think that courts would be impressed by coder's ideas regarding internal or external APIs, or different kinds of linking. This isn't just about the GPL but about using any kind of copyrighted material. The solution is to either hire legal help, pay for license exceptions, or to just stay away from areas of controversy. John Cowan notes that the industry usage of a word might very well be relevant before a court, but unfortunately “intimate” has no industry usage. Lawrence Rosen would like more clarity on technical architectures that safely allow use of copyleft interfaces. “No FOSS license that prohibits that is truly open source!” Bruce Perens seems a bit fed up with that attitude: some licenses clearly intend to prevent combination with proprietary software. “There is nothing about Open Source that says they have to give a free ride to anyone”. Suitable architectures clearly avoid derivative works and keep a “bright line” that would be “extremely clear to any court.” Gil Yehuda thinks that if creating a compliant architecture requires a lawyer, that is a problem with the license. (Note: but this discussion is about architectures that avoid the need for license compliance!) No license can be simple, as Perens points out, because these legal documents rest on a huge body of case law. And even simple documents can have complicated results, for example an implied patent grant in the BSD license. Great Expectations Gil Yehuda thinks it is important to distinguish two separate motivations for using copyleft: some want Free Software, but others want to a license that is permissive enough to see their software be widely adapted, but still sufficiently restricted to convert some users to commercial licenses. There's nothing wrong with dual licensing (in fact, Bruce Perens considers dual licensing to be beneficial because it funds the production of more Open Source software) but it is unsurprising that there will be misunderstanding and frustration when dual-licensing businesses use Free Software licenses. For example, Lawrence Rosen repeatedly suggests his OSL 3.0 as a less extreme network-copyleft license than the AGPL. Rosen reminds that Open Source is more than the GPL. Many other licenses are being proposed because the GPL doesn't fulfil those licensor's motivations. “Perhaps we should consider the intent of the SSPL licensors and help them create or use an alternative non-GPL license?” Bruce Perens notes that the SSPL goes far beyond the OSL as well. He writes: “Unfortunately, a lot of what these companies want to do can't be achieved as Open Source, and it is best that all sides understand that and go on.” Relicensing and Maintainer–Community Dynamics Out of the C-FSL discussion on the license-review list, a discussion forms about historical examples of maintainer–community dynamics, forks, and license changes. For context, the C-FSL gives some Original Authors the right to change the licensing of the code, without having to get extra permission from all copyright holders. The typical mechanism for license changes is to contact all copyright holders. If a few copyright holders reject the change, their contributions can be removed. And this is workable, as history points out: Dungeon Crawl, Toybox, Mozilla, OpenSSL, OpenStreetMap are mentioned by Brendan Hickey and Rob Landley. Rob Landley writes an epic email with lots of project histories. A fork is not necessarily an alternative version of some project, but could also be a new project that an existing community rallies around. For example, Linux could be interpreted as a fork of the Minix community. Of particular interest is XFree86, which suffered a relicensing by its management. But: “The code survived, forked under new maintainership and a new name, with many of the same developers and inheriting pretty much all the users.” Looking forward, Landley asks: “The bad things happened anyway. What methods of organization survived the bad things?” Bruce Perens notes: “It is definitively a really good and important feature of Open Source licenses that developers can abscond from bad management.” For the C-FSL, this means that it might be a very bad idea to give one group of maintainers too much power with the intention of preventing forks. For MongoDB's relicensing, it remains to be seen whether the community stays with the original project or moves to forks. John Cowan cautions that forks can have many fates: while some might eat their parent and inherit the name (like GCC 3) or eat their parent under a different name (like LibreOffice) some also just fizzle out (like Drizzle from MySQL). But “Open-source software doesn't necessarily entail open-source development”. If the software is maintained cathedral-style rather than by a community, then giving the original developers special rights might not be a big deal. (Note: but what if the original maintainers cease to be good stewards? See XFree86 above.) Developing a new Open Source License Van Lindberg [1,2] announces that he is drafting a new open source license for Holo Ltd. and will submit it for OSI approval. The license will be AGPL-ish but have an option for an LGPL/Classpath style exception. Bruce Perens notices that this license is planned to extend to all software “that implements a compatible API”. Such an extension of copyleft would violate OSD #9 “license must not restrict other software” and approval would seem undesirable for the OSI. Van Lindberg understands and tries to be careful around this, especially since he has criticized similar problems with the SSPL. But if interfaces are copyrightable (cf Oracle v Google) then such a requirement would only affect derivative works, not unrelated software. VanL won't define interfaces but instead considers public performance rights. This is analogous to the AGPL network interaction clause, but better in line with copyright. (Note: I'd instead say that the AGPL just chooses to use one small aspect of public performance.) Bruce Perens is sceptical of any extensions of copyleft/copyright, and points to Open Hardware as an example. The risk is that courts might consider this to be valid, thus extending copyright. But that would have a stifling effect, especially on Open Hardware. “Extension of copyright is bad for Open Source, even if it helps us enforce our licenses more effectively. It will always work against us to a greater extent [than] it can be put to work for us.”

Categories: Open Source

Save the Date! - Global Community Summit & Sprint - Barcelona - October 4-11

CiviCRM - Mon, 02/04/2019 - 08:55
The 2019 Global Community Summit is intended to be an event for all the Community including Partners, Implementers, Developers and End Users involved with the project.    We will be able to share, learn and contribute to CiviCRM. This event follows the spirit of 2018 Governance Summit opening more subjects and areas of discussion across the CiviCRM Project. After the Summit, a 5 day Sprint / DevCamp will follow.  
Categories: CRM

Liferay 7.2 Milestone 2 Release

Liferay - Fri, 02/01/2019 - 18:46

The main purpose of this release is give you a sneak peak of what’s coming in 7.2 and to get an early start on testing our packaging process. It is by no means feature complete and hasn’t been tested for quality.

The Liferay 7.2 Community Beta Program is scheduled to start with the release of 7.2 Alpha 1 in the coming weeks. Similar to 7.1, the 7.2 beta program will be divided into two phases with the first phase being focused on receiving feedback on new features included in the Alpha builds. The second phase will be a bug hunt based on the 7.2 betas. Although M2 does not have a formal beta program, it is a good chance to see what’s being worked on in the release.

Download Milestone 2 now! See you soon with details on the beta program!   Jamie Sammons 2019-02-01T23:46:00Z
Categories: CMS, ECM

How to enable failover support within SnapLogic

SnapLogic - Fri, 02/01/2019 - 12:53

Failovers can be a nightmare for organizations if not properly managed. Failover is a backup operational mode in which the functions of a system component such as a processor, server, network, or database are assumed by secondary system components when the primary component becomes unavailable through either failure or scheduled downtime.  The failover procedure is[...] Read the full article here. The post How to enable failover support within SnapLogic appeared first on SnapLogic.

Categories: ETL

PrestaShop Addons Awards 2019: And the winners are…

PrestaShop - Fri, 02/01/2019 - 11:26
Held over quite some time now, this year’s PrestaShop Addons Awards took place once again to reward the best marketplace modules in eight categories grouping the main issues related to your e-comme
Categories: E-commerce

How Bayer Pharmaceuticals Found the Right Prescription for Clinical Data Access

Talend - Thu, 01/31/2019 - 17:05

Like other pharmaceutical companies, Bayer Pharmaceuticals conducts research to discover new drugs, test and validate their effectiveness and safety, and introduce them to the market. That process requires accumulating, analyzing and storing vast amounts of clinical data coming from patients and healthy volunteers, which is recorded on an electronic case report form (eCRF). Data is also collected from laboratories and electronic devices and all data is automatically anonymized at the point of collection. Bayer wanted to gather more data about its drugs to comply with documentation requirements such as those in GxP, a collection of quality guidelines and regulations created by the U.S. Food and Drug Administration (FDA). Building a microservices-based architecture To make it faster and easier for researchers to analyze drug development data, the company deployed a microservices-based architecture for its data platform. dGerman software developer QuinScape GmbH helped Bayer deploy the Talend-powered Karapit framework, which the company is using to integrate several clinical databases and support the pharmacokinetics dataflow and biosampling parts of the drug development process. “Through Talend microservices, we can obtain clinical pharmacokinetic data more rapidly in order to determine drug doses and better characterize compounds and adhere to quality processes” – Dr. Ivana Adams, Project Manager, Translational Science Systems Understanding pharmacokinetics data to optimize drug doses The role of pharmacokinetics (PK) in drug discovery can be described simply as the study of “what a body does to a drug,” and includes the rate and extent to which drugs are absorbed into the body and distributed to the body tissues. It also includes the rate and pathways by which drugs are eliminated from the body by metabolism and excretion. Understanding these processes is extremely important for prescribers because they form the basis for the optimal dose regimen and explain the inter-individual variations in the response to drug therapy Having clean, verified traceable clinical data saves development time, accelerates the process of determining proper dosage and drug interactions, and leaves a clear audit trail as per FDA GxP guidelines. Read the full case study here.  The post How Bayer Pharmaceuticals Found the Right Prescription for Clinical Data Access appeared first on Talend Real-Time Open Source Data Integration Software.

Categories: ETL

Integration platform as a service (iPaaS) vs. API management: Why choose just one?

SnapLogic - Wed, 01/30/2019 - 13:41

Some organizations remain unconvinced of the need for an application programming interface (API) management solution. This is especially true of those that already use an integration platform as a service (iPaaS) to integrate their applications and data. Part of the reluctance stems from confusion around what sets the two solutions apart. Nevertheless, the fact is[...] Read the full article here. The post Integration platform as a service (iPaaS) vs. API management: Why choose just one? appeared first on SnapLogic.

Categories: ETL

Liferay 7 SSO using OpenId Connect

Liferay - Wed, 01/30/2019 - 11:57

I just completed a project that integrated Liferay 7.0 GA7 with Keycloak 4.8 for both authentication and authorization. For those who are not familar with Keycloak it is an open source access and identity manager,  https://www.keycloak.org/.

The authentication piece of this integration was assisted by the use of the use of the OpenId Connect Plugin that is available in the Liferay Marketplace.  Authorization was achieved through the use of the a Liferay post login hook and the Keycloak Restful API.

This integration also involved the use of Apache Httpd for the virtual hosting of both Liferay and Keycloak. This virtual hosting provided SSL support as well.

This blog assumes that Liferay, Keycloak and Apache Httpd are installed and that AJP is enabled on both the Liferay and Keycloak application servers. AJP will be used by Httpd virtual hosting to proxy request to both Liferay and Keycloak.  The following is the Httpd's settings that were used to perform this virtual hosting:

#virtual host for liferay
<VirtualHost *:443>
    ServerName aim1.xxxxxx.net    
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/aim1.xxxxxxx.net.cert.pem
    SSLCertificateKeyFile /etc/pki/tls/private/aim1.xxxxxx.net.key.pem
    
    # Set the header for the https protocol
    #RequestHeader set X-Forwarded-Proto "https"
    #RequestHeader set X-Forwarded-Port "443"     
 
    # Serve /excluded from the local httpd data
    ProxyPass /excluded !
         
    # Preserve the host when invoking tomcat
    ProxyPreserveHost on
         
    # Pass all traffic to a localhost tomcat.
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

# virtual host for keycloak
Listen 17443
<VirtualHost *:17443>
    ServerName aim1.aifoundry.net    
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/aim1.xxxxxx.net.cert.pem
    SSLCertificateKeyFile /etc/pki/tls/private/aim1.xxxxxx.net.key.pem
    
    # Set the header for the https protocol
    #RequestHeader set X-Forwarded-Proto "https"
    #RequestHeader set X-Forwarded-Port "443" 
    
    # Serve /excluded from the local httpd data
    ProxyPass /excluded !
         
    # Preserve the host when invoking tomcat
    ProxyPreserveHost on
         
    # Pass all traffic to a localhost tomcat.
    ProxyPass / ajp://localhost:8589/
    ProxyPassReverse / ajp://localhost:8589/
</VirtualHost>

The settings above assume that Httpd, Liferay and Keycloak are all on the same host. If this not the case then localhost should be substituted with a valid IP address or hostname for the Liferay and Keycloak servers. 

Keycloak Configuration

For the Keycloak configuration I created a separate realm for Liferay that had specific client, roles and users. The client configuration is probably the must important part of the realm configuration, especially its redirect URL:

The redirect URL, https://aim1.xxxxxx.net/*, shown above is base URL of the Liferay site I want to authenticate with Keycloak. Note the * wildcard character which allows Keycloak to access everything under this URL, especially /c/portal/login. 

Liferay's OpenID Connect PLugin Configuration

One other assumption that I make is that the OpenID Connect Plugin has been downloaded from the Liferay Marketplace and deployed to Liferay.  Once that is done an additional tab should appear in the Authentication section of the Liferay Control Panel's Instance Settings.  The following are the settings that were used for my instance: One thing to bear in mind because I'm coming through my Httpd front door using SSL the JWT token that was generated by Keycloak is getting encrypted. In order for the plugin to be able to decrypt it the JVM that Liferay is running needs to have its SSL certificates updated  with the certificate the Httpd is using. With the plugin configured and  enabled Liferay can now participate in the SSO being provided by Keycloak. If you get authenticated by Keycloak while accessing another application that it's also protecting you should have a valid JWT token in your browser.  This should allow you to access Liferay without having to login. If you're not yet authenticated the plugin will force you to authenticate with Keycloak. More information on the OpenID Connect Plugin can be found at the following URL: https://github.com/finalist/liferay-oidc-plugin/blob/oidc-parent-0.5.0/README.md Take note of the great sequence diagram located at the end of this readme page. What About Authorization If Keycloak SSO is working correctly we can now log into Liferay with user that are being managed by Keycloak: The OpenID Connect Plugin will automatically add these authenticated users into Liferay's user repository.  These users can also be assigned roles in Keycloak: User roles information can be accessed using the Keycloak's Restful API. I found that the most direct way to this with Keycloaks's API is to use the following restful method which allows you to get a role's membership by its name: GET /{realm}/clients/{id}/roles/{role-name}/users I employed this call in as part of a restful client that gets both the access token and the user's roles:     public String getAdminAccessToken() {         Form form = new Form();         form.param(USERNAME, AUTH_SERVICE_USERNAME);         form.param(PASSWORD, AUTH_SERVICE_PASSWORD);         form.param(GRANT_TYPE, AUTH_SERVICE_GRANT_TYPE);         form.param(CLIENT_ID, AUTH_SERVICE_CLIENT_ID);         Boolean encode = true;         String accessToken = null;         Response response = client.postForm(AUTH_SERVICE_URL, AUTH_SERVICE_TOKEN_PATH, MediaType.APPLICATION_JSON, form,                 encode);         if (response != null) {             AuthToken authToken = response.readEntity(AuthToken.class);             if (authToken != null) {                 accessToken = authToken.getAccessToken();             } else {                 LOGGER.error(COULD_NOT_GET_ADMIN_AUTH_TOKEN);             }         } else {             LOGGER.error(COULD_NOT_GET_ADMIN_AUTH_RESPONSE);         }         return accessToken;     }     public List<String> getUserRoles(String accessToken, String userName) {         if (accessToken == null || accessToken.isEmpty()) {             LOGGER.error(INVALID_ARGUMENT_NO_ACCESS_TOKEN_PROVIDED);             return null;         }                  if (userName == null || userName.isEmpty()) {             LOGGER.error(INVALID_ARGUMENT_NO_USER_NAME_PROVIDED);             return null;         }                          List<String> userRoles = new ArrayList<String>();         for (String authServiceRole : AUTH_SERVICE_ROLES) {             String roleUserPath = AUTH_SERVICE_ROLES_PATH + SLASH + authServiceRole + USERS_PATH;             Response response = client.get(AUTH_SERVICE_URL, roleUserPath, MediaType.APPLICATION_JSON, null,                     accessToken);             if (response != null) {                 List<AuthUser> authUsers = response.readEntity(new GenericType<List<AuthUser>>() {                 });                                  if (authUsers !=null && authUsers.size() > 0) {                     for (AuthUser authUser : authUsers) {                         String authUserName = authUser.getUsername();                         if (authUserName != null && authUserName.equals(userName)) {                             userRoles.add(authServiceRole);                             break;                         }                     }                 }              }         }         return userRoles;     }  There are other ways to do this but they would require multiple restful calls to achieve the same result. Unfortunately there seems to be no way with the current Keycloak API to access a user's roles directly by using a username at this time.  More information of the Keycloak API can be found at the following URL:  https://www.keycloak.org/docs-api/4.8/rest-api/index.html#_roles_resource The user's Keycloak roles can be synchronized with corresponding Liferay roles using the Liferay API. This can be triggered by a post login event. Here's a method that I have which gets invoked once the user has been successfully authenticated   public String getScreenName() {         ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();         HttpServletRequest request = PortalUtil.getHttpServletRequest((PortletRequest) externalContext.getRequest());         HttpServletRequest originalRequest = PortalUtil.getOriginalServletRequest(request);                  HttpServletResponse response = PortalUtil                 .getHttpServletResponse((PortletResponse) externalContext.getResponse());         try {             User user = PortalUtil.getUser(originalRequest);             screenName = user.getScreenName();             LOGGER.info("screenName=" + screenName);                          String reminderQueryQuestion = user.getReminderQueryQuestion();             if (reminderQueryQuestion == null || reminderQueryQuestion.isEmpty()                     || reminderQueryQuestion.equals(OPENID_CONNECT_REMINDER_QUESTION) == false) {                 LOGGER.info("Not an openId Connect user");                                  response.sendRedirect(landingPage);                 return screenName;             }             String adminAccessToken = AUTH_CLIENT.getAdminAccessToken();             LOGGER.info("adminAccessToken=" + adminAccessToken);             if (adminAccessToken != null && adminAccessToken.length() > 0) {                 long userId = user.getUserId();                                  if (screenName != null && screenName.length() > 0) {                     List<String> userRoles = AUTH_CLIENT.getUserRoles(adminAccessToken, screenName);                     LOGGER.info("userRoles=" + userRoles);                     if (userRoles != null && userRoles.size() > 0) {                         for (String userRole : userRoles) {                             Role role = RoleLocalServiceUtil.getRole(user.getCompanyId(), userRole);                             long roleId = role.getRoleId();                             boolean hasUserRole = RoleLocalServiceUtil.hasUserRole(userId, roleId);                             if (hasUserRole) {                                 LOGGER.info(screenName + HAS_FOLLOWING_ROLE + role.getName());                                                                 continue;                             }                                                          RoleLocalServiceUtil.addUserRole(userId, roleId);                             LOGGER.info(ADDED + screenName + TO_FOLLOWING_ROLE + role.getName());                         }                                                  List<String> AUTH_SERVICE_ROLES = AuthClient.getAUTH_SERVICE_ROLES();                         List<Role> portalUserRoles = user.getRoles();                         for (Role portalUserRole : portalUserRoles) {                             String portalRoleName = portalUserRole.getName();                             if(AUTH_SERVICE_ROLES.contains(portalRoleName)) {                                 if(!userRoles.contains(portalRoleName)) {                                     RoleLocalServiceUtil.deleteUserRole(userId, portalUserRole.getRoleId());                                      LOGGER.info(DELETED + screenName + FROM_THE_FOLLOWING + portalRoleName);                                 }                             }                         }                                                  if (user.getRoleIds().length <= 1) {                             throw new Exception(screenName + USER_HAS_NO_ROLES);                             }                     } else {                         throw new Exception(screenName + USER_HAS_NO_ROLES);                                         }                 }             }                          response.sendRedirect(landingPage);         } catch (Exception e) {             LOGGER.error(e.getLocalizedMessage());             try {                 response.sendRedirect(errorPage);             } catch (IOException e1) {                 LOGGER.error(e.getLocalizedMessage());             }         }                  return screenName;     }   The code above will both add or remove  a user to or from a roles in Liferay , respectively, based on the the corresponding roles that they have in Ke ycloak. I hope some will find this blog useful and that it saves them some time.   William Gosse 2019-01-30T16:57:00Z

Categories: CMS, ECM

CiviCRM at the Museum

CiviCRM - Tue, 01/29/2019 - 17:30

Cividesk recently reached out to mahJ so they can share with the community their success with the implementation of CiviCRM. Cividesk spoke with the museum’s IT Manager, Sébastien Pauly, and Communications Attaché, Louise Tellier, to learn more about the challenges they faced before switching to CiviCRM, their experience transitioning to CiviCRM and the benefits of using CiviCRM.

Categories: CRM

Unlock the power of data

SnapLogic - Tue, 01/29/2019 - 15:37

Previously published on globalbankingandfinance.com.  The old adage that the finance department spends 90 percent of their time acquiring, cleaning up, validating and verifying data—and 10 percent analysing it—still holds true in many organisations. This is often due to technology systems and applications that don’t “speak” to each other. This sorry state of affairs can no[...] Read the full article here. The post Unlock the power of data appeared first on SnapLogic.

Categories: ETL
Syndicate content