Activities That Won't Break The Bank At Center Parcs.
I think we can all safely say that a Center Parcs stay in school holidays isn't a cheap getaway. However, the fact that they offer many activities a short drive from home, makes it is an appealing short break for families.
Planning is key when it comes to a stay at Center Parcs and you can read all about my top tips for a stay at Woburn.
Make use of the swimming pool that's included in the price. My boys absolutely loved the swimming pool. It was slightly annoying that the water slides are all now 1.2m and above, but the outside rapids more than made up for this.
Book a katakanu. For five people this cost £16.50 which makes it a really low cost activity. We got to watch the ducks in the reeds and it was a nice way to spend half an hour.
Play snooker or pool. Daddy wanted to catch up on sport whilst we were away so we headed to the sports bar and had a game. They had different sized cues and a step for younger players.
As I am pretty sure this won't be our last trip to Center Parcs, I would love to know any suggestions you have too in the comments below.
The pool has to be the big attraction for families. I do think taking your own bikes is a good idea too. We've never been to Center Parcs and my kids are probably too old now but I always liked the idea…. apart from the price with a big family. It sounds like you have all the best tips for keeping the price down and the fun up.


For my second Valentine's Day outfit I put together a monochromatic look! For those of you who don't know what that is, it basically means that you wear the same color from head to toe!
This pink outfit would be perfect for any Valentine's Day activity with your lovey!


text:
/**
 * Given a dictionary, find all of the longest words in the dictionary.
 * Example
 * Given
 * {
 *   "dog",
 *   "google",
 *  "facebook",
 *   "internationalization",
 *   "blabla"
 * }
 * the longest words are(is) ["internationalization"].
 *
 * Given
 * {
 *   "like",
 *   "love",
 *   "hate",
 *   "yes"
 * }
 * the longest words are ["like", "love", "hate"].
 */

class Solution {
public:
    /**
     * @param dictionary: a vector of strings
     * @return: a vector of strings
     */
    vector<string> longestWords(vector<string> &dictionary) {
        // write your code here
        vector<string> res;
        for (auto w : dictionary) {
            if (res.size() && w.length() > res.back().length())
                res.clear();
            if (res.empty() || w.length() == res.back().length())
                res.push_back(w);
        }
        return res;
    }
};

redpajama_set_name: RedPajamaGithub


text:
package edu.isi.wings.execution.tools.api.impl.kb;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;

import edu.isi.kcap.ontapi.KBAPI;
import edu.isi.kcap.ontapi.KBObject;
import edu.isi.kcap.ontapi.OntFactory;
import edu.isi.kcap.ontapi.OntSpec;
import edu.isi.kcap.ontapi.SparqlQuerySolution;
import edu.isi.kcap.ontapi.jena.transactions.TransactionsJena;
import edu.isi.wings.catalog.component.ComponentFactory;
import edu.isi.wings.catalog.data.DataFactory;
import edu.isi.wings.catalog.data.classes.VariableBindingsList;
import edu.isi.wings.catalog.data.classes.VariableBindingsListSet;
import edu.isi.wings.catalog.resource.ResourceFactory;
import edu.isi.wings.common.CollectionsHelper;
import edu.isi.wings.common.URIEntity;
import edu.isi.wings.common.kb.KBUtils;
import edu.isi.wings.execution.engine.classes.ExecutionQueue;
import edu.isi.wings.execution.engine.classes.RuntimeInfo;
import edu.isi.wings.execution.engine.classes.RuntimePlan;
import edu.isi.wings.execution.engine.classes.RuntimeStep;
import edu.isi.wings.execution.tools.api.ExecutionLoggerAPI;
import edu.isi.wings.execution.tools.api.ExecutionMonitorAPI;
import edu.isi.wings.planner.api.WorkflowGenerationAPI;
import edu.isi.wings.planner.api.impl.kb.WorkflowGenerationKB;
import edu.isi.wings.workflow.plan.PlanFactory;
import edu.isi.wings.workflow.plan.api.ExecutionPlan;
import edu.isi.wings.workflow.plan.api.ExecutionStep;
import edu.isi.wings.workflow.plan.classes.ExecutionFile;
import edu.isi.wings.workflow.template.TemplateFactory;
import edu.isi.wings.workflow.template.api.Template;
import edu.isi.wings.workflow.template.api.TemplateCreationAPI;

public class RunKB extends TransactionsJena
implements ExecutionLoggerAPI, ExecutionMonitorAPI {
	KBAPI kb;
	KBAPI libkb;
	KBAPI unionkb;

	Properties props;

	String ns;
	String onturl;
	String liburl;
	String newrunurl;
	String newtplurl;
	String tdbRepository;
	String logsDirectory;

	protected HashMap<String, KBObject> objPropMap;
	protected HashMap<String, KBObject> dataPropMap;
	protected HashMap<String, KBObject> conceptMap;

	public RunKB(Properties props) {
		this.props = props;
		this.onturl = props.getProperty("ont.execution.url");
		this.liburl = props.getProperty("lib.domain.execution.url");
		this.newtplurl = props.getProperty("domain.workflows.dir.url") + "/";
		this.newrunurl = props.getProperty("domain.executions.dir.url") + "/";
		this.tdbRepository = props.getProperty("tdb.repository.dir");
		this.logsDirectory = props.getProperty("logs.dir");

		if (tdbRepository == null) {
			this.ontologyFactory = new OntFactory(OntFactory.JENA);
		} else {
			this.ontologyFactory = new OntFactory(OntFactory.JENA, this.tdbRepository);
		}
		KBUtils.createLocationMappings(props, this.ontologyFactory);
		try {
			this.kb = this.ontologyFactory.getKB(liburl, OntSpec.PLAIN, true);
			this.kb.importFrom(this.ontologyFactory.getKB(onturl, OntSpec.PLAIN, false, true));
			this.libkb = this.ontologyFactory.getKB(liburl, OntSpec.PLAIN);
			this.unionkb =
			    this.ontologyFactory.getKB("urn:x-arq:UnionGraph", OntSpec.PLAIN);

			this.initializeMaps();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void initializeMaps() {
		this.objPropMap = new HashMap<String, KBObject>();
		this.dataPropMap = new HashMap<String, KBObject>();
		this.conceptMap = new HashMap<String, KBObject>();

		this.start_read();
		for (KBObject prop : this.kb.getAllObjectProperties()) {
			this.objPropMap.put(prop.getName(), prop);
		}
		for (KBObject prop : this.kb.getAllDatatypeProperties()) {
			this.dataPropMap.put(prop.getName(), prop);
		}
		for (KBObject con : this.kb.getAllClasses()) {
			this.conceptMap.put(con.getName(), con);
		}
		this.end();
		this.start_write();
		if (!dataPropMap.containsKey("hasLog"))
			dataPropMap.put("hasLog", this.kb.createDatatypeProperty(this.onturl + "#hasLog"));
    if(!objPropMap.containsKey("hasSeededTemplate"))
      objPropMap.put("hasSeededTemplate", kb.createObjectProperty(this.onturl+"#hasSeededTemplate"));
    this.end();
	}

	@Override
	public synchronized void startLogging(RuntimePlan exe) {
		try {
		  KBAPI tkb = this.ontologyFactory.getKB(exe.getURL(), OntSpec.PLAIN);

		  this.start_write();
		  this.writeExecutionRun(tkb, exe);
		  KBObject exobj = kb.createObjectOfClass(exe.getID(), conceptMap.get("Execution"));
		  this.updateRuntimeInfo(kb, exobj, exe.getRuntimeInfo());
		  this.save();

		} catch (Exception e) {
		  e.printStackTrace();
		} finally {
		  this.end();
		}
	}

	@Override
	public synchronized void updateRuntimeInfo(RuntimePlan exe) {
	  try {
	    KBAPI tkb = this.ontologyFactory.getKB(exe.getURL(), OntSpec.PLAIN);
	    this.start_write();

	    this.updateExecutionRun(tkb, exe);
	    KBObject exobj = kb.getIndividual(exe.getID());
	    if(exobj != null)
	      this.updateRuntimeInfo(kb, exobj, exe.getRuntimeInfo());

	    this.save(tkb);
	    this.save();
	  } catch (Exception e) {
	    e.printStackTrace();
	  } finally {
	    this.end();
	  }
	}

	@Override
	public synchronized void updateRuntimeInfo(RuntimeStep stepexe) {
    try {
      KBAPI tkb = this.ontologyFactory.getKB(stepexe.getRuntimePlan().getURL(),
          OntSpec.PLAIN);
      this.start_write();
      this.updateExecutionStep(tkb, stepexe);
      tkb.save();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      this.end();
    }
	}

	@Override
  public int getNumberOfRuns(String pattern, String status, Date started_after) {
	    String starttime = null;
	    if(started_after != null) {
	      LocalDateTime time = started_after.toInstant()
	          .atZone(ZoneId.systemDefault()).toLocalDateTime();
	      ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(time);
	      starttime = time.format(DateTimeFormatter.ISO_DATE_TIME) + offset.getId();
	    }

	    String query =
	        "PREFIX exec: <http://www.wings-workflows.org/ontology/execution.owl#>\n" +
          "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
	        "SELECT (COUNT(*) as ?count)\n" +
	        "WHERE { " +
          "?run a exec:Execution .\n" +
          "?run exec:hasExecutionStatus ?status .\n" +
          "?run exec:hasTemplate ?template .\n" +
          "?run exec:hasStartTime ?start .\n" +
          (status != null ?
              "?run exec:hasExecutionStatus '" + status + "') .\n" : "") +
          (starttime != null ?
              "FILTER(?start > '"+starttime+"'^^xsd:dateTime) .\n" : "") +
          (pattern != null ?
              "FILTER REGEX(str(?template), '" + newtplurl + ".*" + pattern + ".*') .\n" : "") +
          "FILTER REGEX(str(?run), '" + newrunurl + "') .\n" +
	        "}";

	    this.start_read();
	    ArrayList<ArrayList<SparqlQuerySolution>> result = unionkb.sparqlQuery(query);
	    int size = (Integer) result.get(0).get(0).getObject().getValue();
	    this.end();
	    return size;
	 }

	public ArrayList<RuntimePlan> getRunListSimple(String pattern, String status,
	    int start, int limit, Date started_after) {
		ArrayList<RuntimePlan> rplans = new ArrayList<RuntimePlan>();

		String starttime = null;
		if(started_after != null) {
		  LocalDateTime time = started_after.toInstant()
		      .atZone(ZoneId.systemDefault()).toLocalDateTime();
		  ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(time);
		  starttime = time.format(DateTimeFormatter.ISO_DATE_TIME) + offset.getId();
		}

		String query =
						"PREFIX exec: <http://www.wings-workflows.org/ontology/execution.owl#>\n" +
		        "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
										"SELECT ?run ?status ?template ?start ?end \n" +
										"WHERE {\n" +
										"?run a exec:Execution .\n" +
										"?run exec:hasExecutionStatus ?status .\n" +
										"?run exec:hasTemplate ?template .\n" +
										"?run exec:hasStartTime ?start .\n" +
										(status != null ?
										    "?run exec:hasExecutionStatus '" + status + "') .\n" : "") +
                    (starttime != null ?
                        "FILTER(?start > '"+starttime+"'^^xsd:dateTime) .\n" : "") +
                    (pattern != null ?
                        "FILTER REGEX(str(?template), '" + newtplurl + ".*" + pattern + ".*') .\n" : "") +
										"FILTER REGEX(str(?run), '" + newrunurl + "') .\n";
		query += "}\n";

		if(limit >= 0 && start >=0) {
			query += " LIMIT " + limit + " OFFSET " + start;
		}

		this.start_read();
		ArrayList<ArrayList<SparqlQuerySolution>> result = unionkb.sparqlQuery(query);
		for(ArrayList<SparqlQuerySolution> row : result) {
			HashMap<String, KBObject> vals = new HashMap<String, KBObject>();
			for(SparqlQuerySolution col : row)
				vals.put(col.getVariable(), col.getObject());
			if(vals.get("run") == null)
				continue;
			RuntimePlan rplan = new RuntimePlan(vals.get("run").getID());
			rplan.setOriginalTemplateID(vals.get("template").getID());
			RuntimeInfo info = new RuntimeInfo();
			KBObject sttime = vals.get("start");
			if (sttime != null && sttime.getValue() != null)
				info.setStartTime((Date) sttime.getValue());
			KBObject endtime = vals.get("end");
			if (endtime != null && endtime.getValue() != null)
				info.setEndTime((Date) endtime.getValue());
			KBObject statusObj = vals.get("status");
			if (statusObj != null && statusObj.getValue() != null)
				info.setStatus(RuntimeInfo.Status.valueOf((String) statusObj.getValue()));
			rplan.setRuntimeInfo(info);
			rplans.add(rplan);
		}
		this.end();
		return rplans;
	}

	@Override
	public ArrayList<RuntimePlan> getRunList(String pattern, String status, int start, int limit, boolean fasterQuery) {
	  ArrayList<RuntimePlan> rplans = new ArrayList<RuntimePlan>();

	  if(pattern == null) {
	    pattern = "";
	  }

	  String query =
	      "PREFIX exec: <http://www.wings-workflows.org/ontology/execution.owl#>\n" +
	      "SELECT ?run ?status ?template ?start ?end \n" +
	      "(GROUP_CONCAT (CONCAT (STR(?step), '=', STR(?stepstatus)); "
	          + "SEPARATOR=\"|\") AS ?steps)  \n" +
	      "WHERE {\n" +
	      "?run a exec:Execution .\n" +
	      "?run exec:hasExecutionStatus ?status .\n" +
	      "?run exec:hasTemplate ?template .\n" +
	      "?run exec:hasStartTime ?start .\n" +
	      "FILTER REGEX(str(?run), '" + newrunurl + "') .\n" +
	      "FILTER REGEX(str(?template), '" + newtplurl + ".*" + pattern + ".*') .\n";

	  if(status == null || status.equals("SUCCESS")) {
  	  query +=
          // Query for Successful runs
          "{\n" +
          " ?run exec:hasExecutionStatus 'SUCCESS' .\n" +
          " ?run exec:hasEndTime ?end .\n" +
          "}\n";
	  }
    if(status == null || status.equals("FAILURE")) {
      if(status == null)
        query += "UNION\n";
      query +=
          // Query for Failures
          "{\n" +
          " ?run exec:hasExecutionStatus 'FAILURE' .\n" +
          " ?run exec:hasEndTime ?end .\n" +
          // FIXME: Removing this as we could have failures without any steps
          /*" ?run exec:hasStep ?step .\n" +
          (fasterQuery ? " ?step exec:hasExecutionStatus 'FAILURE' .\n": "") +
          " ?step exec:hasExecutionStatus ?stepstatus .\n" +*/
          "}\n";
    }
    if(status == null || status.equals("RUNNING")) {
      if(status == null)
        query += "UNION\n";
      query +=
          // Query for Failures
          "{\n" +
          " ?run exec:hasExecutionStatus 'RUNNING' .\n" +
          " ?run exec:hasStep ?step .\n" +
          (fasterQuery ? " ?step exec:hasExecutionStatus 'RUNNING' .\n": "") +
          " ?step exec:hasExecutionStatus ?stepstatus .\n" +
          "}\n";
    }
    query += "}\n";

    query += "GROUP BY ?run ?status ?template ?start ?end \n" +
	      "ORDER BY DESC(?start)";

	  if(limit >= 0 && start >=0) {
	    query += " LIMIT " + limit + " OFFSET " + start;
	  }

	  //System.out.println(query);
	  this.start_read();
	  ArrayList<ArrayList<SparqlQuerySolution>> result = unionkb.sparqlQuery(query);
	  for(ArrayList<SparqlQuerySolution> row : result) {
	    HashMap<String, KBObject> vals = new HashMap<String, KBObject>();
	    for(SparqlQuerySolution col : row)
	      vals.put(col.getVariable(), col.getObject());
	    if(vals.get("run") == null)
	      continue;
	    RuntimePlan rplan = new RuntimePlan(vals.get("run").getID());
	    rplan.setOriginalTemplateID(vals.get("template").getID());
	    RuntimeInfo info = new RuntimeInfo();
	    KBObject sttime = vals.get("start");
	    if (sttime != null && sttime.getValue() != null)
	      info.setStartTime((Date) sttime.getValue());
	    KBObject endtime = vals.get("end");
	    if (endtime != null && endtime.getValue() != null)
	      info.setEndTime((Date) endtime.getValue());
	    KBObject statusObj = vals.get("status");
	    if (statusObj != null && statusObj.getValue() != null)
	      info.setStatus(RuntimeInfo.Status.valueOf((String) statusObj.getValue()));
	    rplan.setRuntimeInfo(info);

	    KBObject steps = vals.get("steps");
	    ExecutionQueue queue = new ExecutionQueue();
	    if(steps != null && steps.getValue() != null) {
	      for(String stepstatus : ((String) steps.getValue()).split("\\|")) {
	        String[] ss = stepstatus.split("=", 2);
	        RuntimeStep step = new RuntimeStep(ss[0]);
	        RuntimeInfo stepinfo = new RuntimeInfo();
	        stepinfo.setStatus(RuntimeInfo.Status.valueOf(ss[1]));
	        step.setRuntimeInfo(stepinfo);
	        queue.addStep(step);
	      }
	    }
	    rplan.setQueue(queue);
	    rplans.add(rplan);
	  }
	  this.end();

	  /*
		ArrayList<RuntimePlan> rplans = new ArrayList<RuntimePlan>();
		for (KBObject exobj : this.kb.getInstancesOfClass(conceptMap.get("Execution"), true)) {
			RuntimePlan rplan = this.getExecutionRun(exobj, false);
			rplans.add(rplan);
		}*/
		return rplans;
	}

	@Override
	public RuntimePlan getRunDetails(String runid) {
		try {
			RuntimePlan rplan = this.getExecutionRun(runid, true);
			return rplan;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public boolean deleteRun(String runid, boolean deleteOutputs) {
		return this.deleteExecutionRun(runid, deleteOutputs);
	}

	@Override
	public boolean runExists(String runid) {
	  try {
	    String runurl = runid.replaceAll("#.*$", "");
	    KBAPI tkb = this.ontologyFactory.getKB(runurl, OntSpec.PLAIN);

	    this.start_read();
	    int size = tkb.getAllTriples().size();
	    this.end();

	    if(tkb != null && size > 0)
	      return true;
	  }
	  catch (Exception e) {
	    e.printStackTrace();
	  }
	  return false;
	}

	@Override
	public boolean delete() {
	  boolean ok = true;
		for(RuntimePlan rplan : this.getRunListSimple(null, null, -1, -1, null)) {
			ok = this.deleteRun(rplan.getID(), false);
			if(!ok)
			  return false;
		}
		return
		    this.start_write() &&
		    this.kb.delete() &&
		    this.save() &&
		    this.end();
	}

	@Override
	public boolean save() {
	  return this.save(this.kb);
	}

	/*
	 * Private helper functions
	 */
	private KBObject writeExecutionRun(KBAPI tkb, RuntimePlan exe) {
		KBObject exobj = tkb.createObjectOfClass(exe.getID(), conceptMap.get("Execution"));
		KBObject xtobj = tkb.getResource(exe.getExpandedTemplateID());
		KBObject tobj = tkb.getResource(exe.getOriginalTemplateID());
		KBObject sobj = tkb.getResource(exe.getSeededTemplateID());
		KBObject pobj = tkb.getResource(exe.getPlan().getID());
		if(xtobj != null)
		  tkb.setPropertyValue(exobj, objPropMap.get("hasExpandedTemplate"), xtobj);
		if(sobj != null)
		  tkb.setPropertyValue(exobj, objPropMap.get("hasSeededTemplate"), sobj);
		if(tobj != null)
		  tkb.setPropertyValue(exobj, objPropMap.get("hasTemplate"), tobj);
		if(pobj != null)
		  tkb.setPropertyValue(exobj, objPropMap.get("hasPlan"), pobj);
		for (RuntimeStep stepexe : exe.getQueue().getAllSteps()) {
			KBObject stepobj = this.writeExecutionStep(tkb, stepexe);
			tkb.addPropertyValue(exobj, objPropMap.get("hasStep"), stepobj);
		}
		this.updateRuntimeInfo(tkb, exobj, exe.getRuntimeInfo());
		return exobj;
	}

	private RuntimePlan getExecutionRun(String runid, boolean details) {
		// Create new runtime plan
	  KBObject exobj = this.kb.getResource(runid);
	  if(exobj == null)
	    return null;

		RuntimePlan rplan = new RuntimePlan(exobj.getID());
		rplan.setRuntimeInfo(this.getRuntimeInfo(this.kb, exobj));
		RuntimeInfo.Status status = rplan.getRuntimeInfo().getStatus();
		if (details
				|| (status == RuntimeInfo.Status.FAILURE || status == RuntimeInfo.Status.RUNNING)) {

			try {
				KBAPI tkb = this.ontologyFactory.getKB(rplan.getURL(), OntSpec.PLAIN);

				this.start_read();

				exobj = tkb.getIndividual(rplan.getID());
				if(exobj == null) {
				  this.end();
				  return null;
				}

        boolean batchok = this.start_batch_operation();
				// Get execution queue (list of steps)
				ExecutionQueue queue = new ExecutionQueue();
				for (KBObject stepobj : tkb.getPropertyValues(exobj, objPropMap.get("hasStep"))) {
					RuntimeStep rstep = new RuntimeStep(stepobj.getID());
					rstep.setRuntimeInfo(this.getRuntimeInfo(tkb, stepobj));
					queue.addStep(rstep);
				}
				rplan.setQueue(queue);

				// Get provenance information
				KBObject xtobj = tkb.getPropertyValue(exobj, objPropMap.get("hasExpandedTemplate"));
        KBObject sobj = tkb.getPropertyValue(exobj, objPropMap.get("hasSeededTemplate"));
				KBObject tobj = tkb.getPropertyValue(exobj, objPropMap.get("hasTemplate"));
				KBObject pobj = tkb.getPropertyValue(exobj, objPropMap.get("hasPlan"));

        if(batchok)
          this.stop_batch_operation();
        this.end();

				if(xtobj != null)
				  rplan.setExpandedTemplateID(xtobj.getID());
        if(sobj != null)
          rplan.setSeededTemplateId(sobj.getID());
				if(tobj != null)
				  rplan.setOriginalTemplateID(tobj.getID());
				if(pobj != null)
				  rplan.setPlan(PlanFactory.loadExecutionPlan(pobj.getID(), props));

				return rplan;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return rplan;
	}

	private void deleteGraph(String id) {
	  try {
	    if(id != null) {
	      KBAPI tkb = ontologyFactory.getKB(new URIEntity(id).getURL(), OntSpec.PLAIN);
	      this.start_write();
	      tkb.delete();
	      this.save(tkb);
	      this.end();
	    }
    } catch (Exception e) {
      e.printStackTrace();
    }
	}

	@SuppressWarnings("unused")
  private boolean fileIsOutputofAnotherRun(ExecutionFile file) {
    String query =
        "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
        "PREFIX exec: <http://www.wings-workflows.org/ontology/execution.owl#>\n" +
        "PREFIX wflow: <http://www.wings-workflows.org/ontology/workflow.owl#>\n" +
        "PREFIX pplan: <http://purl.org/net/p-plan#>\n" +
        "PREFIX wf: <http://purl.org/net/wf-invocation#>\n" +
        "SELECT distinct ?run\n" +
        "WHERE {\n" +
        "  ?run a exec:Execution .\n" +
        "  ?run exec:hasPlan ?plan .\n" +
        "  ?var pplan:isVariableOfPlan ?plan .\n" +
        "  ?var wf:hasDataBinding \"" + file.getLocation() + "\"^^ xsd:string\n" +
        "}";

    this.start_read();
    ArrayList<ArrayList<SparqlQuerySolution>> result = unionkb.sparqlQuery(query);
    this.end();

    if(result.size() > 1)
      return true;
    return false;
	}

  private boolean xgraphIsUsedInAnotherRun(String graphid) {
    String query =
        "PREFIX exec: <http://www.wings-workflows.org/ontology/execution.owl#>\n" +
        "SELECT ?run\n" +
        "WHERE {\n" +
        "  ?run exec:hasExpandedTemplate <" + graphid + "> .\n" +
        "}";

    this.start_read();
    ArrayList<ArrayList<SparqlQuerySolution>> result = unionkb.sparqlQuery(query);
    this.end();

    if(result.size() > 1)
      return true;
    return false;
  }

  private boolean sgraphIsUsedInAnotherRun(String graphid) {
    String query =
        "PREFIX exec: <http://www.wings-workflows.org/ontology/execution.owl#>\n" +
        "SELECT ?run\n" +
        "WHERE {\n" +
        "  ?run exec:hasSeededTemplate <" + graphid + "> .\n" +
        "}";

    this.start_read();
    ArrayList<ArrayList<SparqlQuerySolution>> result = unionkb.sparqlQuery(query);
    this.end();

    if(result.size() > 1)
      return true;
    return false;
  }

	private boolean deleteExecutionRun(String runid, boolean deleteOutputs) {
		RuntimePlan rplan = this.getExecutionRun(runid, true);

		try {
			KBAPI tkb = this.ontologyFactory.getKB(rplan.getURL(), OntSpec.PLAIN);

			if(rplan.getPlan() != null) {
        for (ExecutionStep step : rplan.getPlan().getAllExecutionSteps()) {
          // Delete output files
          if(deleteOutputs) {
            for (ExecutionFile file : step.getOutputFiles()) {
              file.removeMetadataFile();
              File f = new File(file.getLocation());
              if(f.exists() && !this.fileIsOutputofAnotherRun(file))
                f.delete();
            }
          }
          // Delete log file
          File logfile = this.getLogFile(step.getID());
          if(logfile.exists())
            logfile.delete();
        }
			}
			// Delete expanded template
      if(!this.xgraphIsUsedInAnotherRun(rplan.getExpandedTemplateID()))
        this.deleteGraph(rplan.getExpandedTemplateID());

      // Delete seeded template
      if(!this.sgraphIsUsedInAnotherRun(rplan.getSeededTemplateID()))
        this.deleteGraph(rplan.getSeededTemplateID());

      // Delete execution plan
      if(rplan.getPlan() != null)
        this.deleteGraph(rplan.getPlan().getID());

      // Delete plan log file
      File plan_logfile = this.getLogFile(rplan.getID());
      if(plan_logfile.exists())
        plan_logfile.delete();

      // Delete execution provenance
      this.start_write();
      tkb.delete();
      this.save(tkb);
      this.end();

		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}

		this.start_write();
		KBUtils.removeAllTriplesWith(this.kb, runid, false);
		this.save();
		this.end();

		return true;
	}

	private KBObject writeExecutionStep(KBAPI tkb, RuntimeStep stepexe) {
		KBObject exobj = tkb.createObjectOfClass(stepexe.getID(), conceptMap.get("ExecutionStep"));
		this.updateRuntimeInfo(tkb, exobj, stepexe.getRuntimeInfo());
		return exobj;
	}

	private void updateExecutionRun(KBAPI tkb, RuntimePlan exe) {
		KBObject exobj = tkb.getIndividual(exe.getID());
		if(exobj != null)
		  this.updateRuntimeInfo(tkb, exobj, exe.getRuntimeInfo());
	}

	private void updateExecutionStep(KBAPI tkb, RuntimeStep exe) {
		KBObject exobj = tkb.getIndividual(exe.getID());
		if(exobj == null) {
      exobj = this.writeExecutionStep(tkb, exe);
		  KBObject planexeobj = tkb.getIndividual(exe.getRuntimePlan().getID());
      tkb.addPropertyValue(planexeobj, objPropMap.get("hasStep"), exobj);
		}
		this.updateRuntimeInfo(tkb, exobj, exe.getRuntimeInfo());
	}

	private File getLogFile(String objid) {
    String fname = DigestUtils.md5Hex(objid);
    return new File(this.logsDirectory + File.separator + fname + ".log");
	}

	private void updateRuntimeInfo(KBAPI tkb, KBObject exobj, RuntimeInfo rinfo) {
	  if(rinfo.getLog() != null) {
	     /*
      tkb.setPropertyValue(exobj, dataPropMap.get("hasLog"),
          tkb.createLiteral(rinfo.getLog()));
      */
	    // Storing logs in a log file now
	    try {
	      File logfile = this.getLogFile(exobj.getID());
        FileUtils.writeStringToFile(logfile, rinfo.getLog());
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
	  }
		if(rinfo.getStartTime() != null)
		  tkb.setPropertyValue(exobj, dataPropMap.get("hasStartTime"),
		      tkb.createLiteral(rinfo.getStartTime()));
		if(rinfo.getEndTime() != null)
		  tkb.setPropertyValue(exobj, dataPropMap.get("hasEndTime"),
		      tkb.createLiteral(rinfo.getEndTime()));
		if(rinfo.getStatus() != null)
		  tkb.setPropertyValue(exobj, dataPropMap.get("hasExecutionStatus"),
		      tkb.createLiteral(rinfo.getStatus().toString()));
	}

	private RuntimeInfo getRuntimeInfo(KBAPI tkb, KBObject exobj) {
	  this.start_read();
	  boolean batchok = this.start_batch_operation();

		RuntimeInfo info = new RuntimeInfo();
		KBObject sttime = this.kb.getPropertyValue(exobj, dataPropMap.get("hasStartTime"));
		KBObject endtime = this.kb.getPropertyValue(exobj, dataPropMap.get("hasEndTime"));
		KBObject status = this.kb.getPropertyValue(exobj, dataPropMap.get("hasExecutionStatus"));
		if (sttime != null && sttime.getValue() != null)
			info.setStartTime((Date) sttime.getValue());
		if (endtime != null && endtime.getValue() != null)
			info.setEndTime((Date) endtime.getValue());
		if (status != null && status.getValue() != null)
			info.setStatus(RuntimeInfo.Status.valueOf((String) status.getValue()));

		// Read log from log file
    File logfile = this.getLogFile(exobj.getID());
    if(logfile.exists()) {
      try {
        info.setLog(FileUtils.readFileToString(logfile));
      } catch (IOException e) {
      }
    }
    else {
      KBObject log = this.kb.getPropertyValue(exobj, dataPropMap.get("hasLog"));
      if (log != null && log.getValue() != null)
        info.setLog((String) log.getValue());
    }

		if(batchok)
		  this.stop_batch_operation();
		this.end();
		return info;
	}

	private RuntimePlan setPlanError(RuntimePlan planexe, String message) {
	  planexe.getRuntimeInfo().addLog(message);
	  planexe.getRuntimeInfo().setStatus(RuntimeInfo.Status.FAILURE);
	  return planexe;
	}

  @Override
  public RuntimePlan rePlan(RuntimePlan planexe) {
    WorkflowGenerationAPI wg = new WorkflowGenerationKB(props,
        DataFactory.getReasoningAPI(props), ComponentFactory.getReasoningAPI(props),
        ResourceFactory.getAPI(props), planexe.getID());

    TemplateCreationAPI tc = TemplateFactory.getCreationAPI(props);
    Template seedtpl = tc.getTemplate(planexe.getSeededTemplateID());

    try {
      Template itpl = wg.getInferredTemplate(seedtpl);
      ArrayList<Template> candidates = wg.specializeTemplates(itpl);
      if(candidates.size() == 0)
        return this.setPlanError(planexe,
            "No Specialized templates after planning");

      ArrayList<Template> bts = new ArrayList<Template>();
      for(Template t : candidates) {
        // If template has no input data variables, skip
        if(t.getInputDataVariables().length == 0) {
          bts.add(t);
          continue;
        }

        VariableBindingsListSet bindingset = wg.selectInputDataObjects(t);
        if(bindingset != null) {
          ArrayList<VariableBindingsList> bindings =
              CollectionsHelper.combineVariableDataObjectMappings(bindingset);
          for(VariableBindingsList binding : bindings) {
            Template bt = wg.bindTemplate(t, binding);
            if(bt != null)
              bts.add(bt);
          }
        }
      }
      if(bts.size() == 0)
        return this.setPlanError(planexe,
            "No Bound templates after planning");

      wg.setDataMetricsForInputDataObjects(bts);

      ArrayList<Template> cts = new ArrayList<Template>();
      for(Template bt : bts)
        cts.addAll(wg.configureTemplates(bt));
      if(cts.size() == 0)
        return this.setPlanError(planexe,
            "No Configured templates after planning");

      ArrayList<Template> ets = new ArrayList<Template>();
      for(Template ct : cts)
        ets.add(wg.getExpandedTemplate(ct));
      if(ets.size() == 0)
        return this.setPlanError(planexe,
            "No Expanded templates after planning");

      // TODO: Should show all options to the user. Picking the top one for now
      Template xtpl = ets.get(0);
      xtpl.autoLayout();

      String xpid = planexe.getExpandedTemplateID();

      // Delete the existing expanded template
      this.deleteGraph(xpid);
      // Save the new expanded template
      if (!xtpl.saveAs(xpid)) {
        return this.setPlanError(planexe,
            "Could not save new Expanded template");
      }
      xtpl = tc.getTemplate(xpid);

      String ppid = planexe.getPlan().getID();
      ExecutionPlan newplan = wg.getExecutionPlan(xtpl);
      if(newplan != null) {
        // Delete the existing plan
        this.deleteGraph(ppid);
        // Save the new plan
        if(!newplan.saveAs(ppid)) {
          return this.setPlanError(planexe,
              "Could not save new Plan");
        }
        newplan.setID(ppid);

        // Get the new runtime plan
        RuntimePlan newexe = new RuntimePlan(newplan);

        // Update the current plan executable with the new plan
        planexe.setPlan(newplan);

        // Hash steps from current queue
        HashMap<String, RuntimeStep>
        stepMap = new HashMap<String, RuntimeStep>();
        for(RuntimeStep step : planexe.getQueue().getAllSteps())
          stepMap.put(step.getID(), step);

        // Add new steps to the current queue
        boolean newsteps = false;
        for(RuntimeStep newstep : newexe.getQueue().getAllSteps()) {
          // Add steps not already in current queue
          if(!stepMap.containsKey(newstep.getID())) {
            newsteps = true;

            // Set runtime plan
            newstep.setRuntimePlan(planexe);

            // Set parents
            @SuppressWarnings("unchecked")
            ArrayList<RuntimeStep> parents =
            (ArrayList<RuntimeStep>) newstep.getParents().clone();
            newstep.getParents().clear();
            for(RuntimeStep pstep : parents) {
              if(stepMap.containsKey(pstep.getID()))
                pstep = stepMap.get(pstep.getID());
              newstep.addParent(pstep);
            }

            // Add new step to queue
            planexe.getQueue().addStep(newstep);
          }
        }

        if(newsteps)
          return planexe;
        else {
          return this.setPlanError(planexe,
              "No new steps in the new execution plan");
        }
      }
      else {
        return this.setPlanError(planexe,
            "Could not get a new Execution Plan");
      }
    }
    catch (Exception e) {
      e.printStackTrace();
      return this.setPlanError(planexe, e.getMessage());
    }
  }
}


text:
Dasychira hypochlora is een vlinder uit de familie spinneruilen (Erebidae), onderfamilie donsvlinders (Lymantriinae). De wetenschappelijke naam van deze soort is voor het eerst geldig gepubliceerd in 1939 door Collenette.

De soort komt voor in tropisch Afrika.

hypochlora
Dier uit het Afrotropisch gebied

redpajama_set_name: RedPajamaWikipedia


text:
WHAT ON TAP
BEER TO GO
Ipswich Ale Brewery has been a fixture on Boston's north shore since 1991 - focused on brewing tradition, innovation, and community. Visit our brewery and follow the brewing process from grain to glass while peering through industrial-sized windows overlooking the production floors.
Our Brewer's Table Restaurant, nestled uniquely inside the brewery itself, features 15 Tap lines of Ipswich beers and an eclectic lunch and dinner menu, with free live music on weekends. While you're there, pick up some brewery glassware, apparel, or your favorite Ipswich Ale beers to-go.
Residents of Boston's North Shore were first introduced to Ipswich Ale during the spring of 1991. With over 30 years of history behind it, Ipswich Ale has been in existence longer than nearly every other craft brewer in New England. Since that time, the Ipswich Ale portfolio of brands have developed into a tradition shared by not only the residents of eastern Massachusetts, but across New England.
In January of 2016, the Ipswich Ale Brewery opened their onsite restaurant the Ipswich Ale Brewer's Table, which features 15 tap lines and a diverse menu with a mix of tastes ranging from brewpub to New American cuisine.
OUR GANG
James (Jim Jamz) Dorau, Director of Operations
1963 Valentine's day in quiet hops field a child is born. Not an unusual event…but this child had a full beard. Raised by wolves in the outer most reaches of Richardson, Texas James grew to worship the taste of beer.
It wasn't long before he left the den and headed north in search of the perfect brewery. For years he roamed from town to town solving crimes and breaking hearts only to hear the somber sound of the road calling to him and for his quest to continue. Finally in 1999 he became the Head Brewer at Ipswich Ale Brewery and the rest is history.
When Jim is not drinking beer he enjoys spending time with family, restoring an old house, and singing sea shanties with The Portermen
Myles Eason: Brewer's Table GM/Chef
A Food and Beverage Industry veteran with 40 years of cooking and management, Myles grew up on the Northshore and has worked his way along the east coast from Maine to Florida and the Caribbean as well. With experience and influences from Sicily to Northern Italian to French to Pacific Rim and West Indies, these flavors can often be found front and center on his eclectic menus or carefully incorporated into modern day classics.
"With such a diverse beer portfolio there was no way to stick with just pub fare...I had to take it up a notch to have the dining experience match the amazing brewery space and cool beer vibe"
Myles is a Pisces who enjoys long walks on beaches and puppy dogs.
CHUCK FREEMAN, SALES MANAGER
A lifelong North Shore native, Ipswich has been his local go-to brand since its inception in '91. In April 2018, he joined the Ipswich team with eight years of beer wholesaler experience - most recently serving as brand manager.
He received his certificate from the Siebel Institute in 2009 after successful completion of the concise brewing course, and became a Certified Cicerone in 2012 – although you'd be hard-pressed to get him to admit this. After years of exploring the myriad of beer styles out in the wild, these days he has special reverence for clean and elegant beers brewed true to style.
Chuck has more guitars than he'd care to admit, and always has his ears open for something tasty to listen to. Is it Bruins season yet?
Jim Beauvais, Production Manager
Jim founded Ipswich Ale Brewery in 1991 with business partner Paul Sylva. In 1999, he left Ipswich Brewing.
Over the years he worked with startup breweries such as: Flying Goose Brewpub of New London, NH, Shinano Brewing Company in Nagano, Japan, and Pirate Republic Brewing Company in Nassau, Bahamas.
In January 2018, Jim returned to Ipswich Ale Brewery as the Production Manager. He's climbed all but one of the 4,000-footers in New Hampshire.
THE BREWER'S TABLE
Call Restaurant
Email Restaurant
Call BREWERY

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: How can I use LibC/WINAPI to use a dvd as a binary blob? I was thinking recently, whenever I use a disc, I use it by either burning an image onto it, or by formatting it and using it like a USB. I never used it as a raw storage medium to poke bytes into/read bytes from.
I am now curious if it is possible to use a DVD as a blob of binary data that I can write bits onto as I please.
From what I understand, it is trivial to write to a DVD using C if I format it, so that I can interface it much like a typical C or D drive(I can even rename the disk name to C or D if I want to).
I'm curious if I can do the same without formatting the disk, so that the only bits on it are the ones that I write to, or the default ones.
To summarize, I want to be able to perform the following operations on an unformatted DVD-RW

*

*read a bunch of bytes at an offset into an in-memory byte pool

*overwrite a bunch of bytes at an offset from a in-memory byte pool without affecting other bytes on the disk

How can this be accomplished?
Thanks ahead of time.

A: On Linux, you can just open the block device and do sufficiently aligned writes:

*

*Documentation/cdrom/packet-writing.txt in the kernel sources
You only need to format the media as DVD+RW once, using dvd+rw-format.  This is a relatively simple procedure, so you could extract it from the source code of that tool.
However, according to the kernel documentation, what is a "sufficiently aligned write" is somewhat up to interpretation—the spec says 2 KiB, but some drives require more alignment.  There is also no wear leveling or sector remapping at this layer, so good results really require that you use on-disk data structures which reflect that this technology is closer in reality to write-once rather than truly random access.

redpajama_set_name: RedPajamaStackExchange


Ricambi Moto is a small online business, designed to cater for any Ducati enthusiasts, looking for new, used or elusive parts, at real world prices. Established in 2014, we are not in the market to compete at the same level as other more established companies, but what we do aim to do, is to provide you with value for money and hopefully help save you a few pounds, here and there. Whilst our range of available products is at present quite limited, we will be adding more in the coming months, so please keep a lookout for further developments.
We are based in South Norfolk and can distribute products anywhere within the UK mainland, usually within 48 hours, though we are happy to ship items worldwide, if required. Note that this will incur additional costs. Please refer to our Delivery Information page for further details.
Do you have any questions? Please don't hesitate to get in touch with us. You will find all the necessary details on the Contact Us page.


APIs are great to leverage automation, scripts and advanced tools in order to consume a service. As cloud purist, we deem it essential to our product line. This article touches on the security issues raised by API access.
An API key: a long (80+) random string, used to identify the account.
A secret key: an associated long string, used to symmetrically sign all request to the API.
Each API request then includes a HMAC-SHA1 digest of its arguments, computed with the above keys. API keys and secret keys are generated with strong pseudo random number generators (PRNGs) to ensure good key security. API requests are then transmitted over a secure HTTPS channel to ensure confidentiality and avoid replay attacks.
Within the exoscale console, it is possible to reset your API keys from the account details section.
With exoscale it is possible to reset your API keys from your account details. Therefore, whatever your situation, your cloud IaaS security can be properly controlled.
To further enhance security we are working on additional features, first in line will be 2-factor auth and perfect forward secrecy support.


Your ancestors never gave up and neither can you.
Now is the time, let us move as one, we are taking back what is ours.
Nahaan's matrilineal lineage is of the Tlingit, his grandfather is Iñupiaq, his biological father of the Paiute and his actual father is of the Kaigani Haida. He focuses exclusively on working within the spirit and design style of the Northwest Coast practices and customs of ceremonial tattooing, wood carving, copper and abalone jewelry, painting and custom designing of regalia and tattoos. Nahaan emulates the strong visual and oral storytelling that has been handed down from generation to generation, it's the foundation of his work, way of living and teaching of his cultural traditions. Within the realms of language arts and expression, Nahaan teaches the Tlingit language through traditional songs, dances and free Indigenous only community classes. He is the leader for Tlingit based inter-tribal group Náakw Dancers, a group he started in Seattle, Washington in 2014, in order to perpetuate the rich expressions of the Pacific Northwests Native population. Nahaan is also a spoken word poet and co-founded "Woosh Kinaadeiyeí" poetry slam in Juneau, Alaska in 2010 which has since grown into a thriving and creative mainstay in the capitol city. He is also a vocalist for Khu.éex' a Seattle based band that presents a contemporary interpretation of Tlingit culture. He focuses on the aspects of community empowerment and self mastery through the methods of dekkkolonization, Indigenization, education and activism. He offers workshop facilitation and keynotes for conferences and events near and far.
Nahaan is available for presentations of traditional storytelling, formline and carving demonstrations and workshops, traditional tattoo revival talks and facilitation of Tlingit language classes. Suicide prevention, pride of identity, Indigenous worldview, health of mind, body and spirit are all addressed through his hired work. With his diverse skillset and knowledge base Nahaan hopes to help initiate social change and transformation in order for Indigenous liberation of lands, minds, bodies and waters.
Most of his cultural presentations are either 30 minutes or 1 hour in length and are available to all audiences from all backgrounds.
Continuing and longer term classes are available and can range in length up to a weekend, a week, a month or a semester with multiple session fees open for negotiation.
His current on-going Tlingit language class have been taking place since 2016 in the Seattle area and helps to create an Indigenous prioritized education for the underserved population.
Náakw is an inter-tribal support group that practices the Tlingit way of presenting song and dance from the Pacific Northwest. They travel the highways of their ancestors via canoe and work to embody the teachings of the land and ocean while defending the sacred and future generations. The group was formed in 2014 by its leader Nahaan and meets to celebrate lineage, practice empowerment and critical thinking of youth and participate in the Indigenous Resistance in many of its forms. Náakw looks forward to sharing their teachings and medicines with you at your next occasion.


text:
Aquaporin 7 involved in GINSENOSIDE-RB1-mediated anti-obesity via peroxisome proliferator-activated receptor gamma pathway
Rong Guo1,2,3 na1,
Lei Wang1 na1,
Xianqin Zeng2,3,
Minghao Liu1,4,
Peng Zhou1,
Huixia Lu1,
Huili Lin2 &
Mei Dong ORCID: orcid.org/0000-0003-0055-15931
Nutrition & Metabolism volume 17, Article number: 69 (2020) Cite this article
Obesity, characterized by the excessive accumulation of triglycerides in adipocytes and their decreased excretion from adipocytes, is closely related to various health problems. Ginsenoside Rb1 (Rb1), the most active component of the traditional Chinese medicine ginseng, has been reported to have positive effects on lipid metabolism. The aim of the present study was to determine the protective effects of Rb1 on glycolipid metabolism under obesity conditions and its mechanisms and to reveal the signaling pathways involved.
In our study, male C57BL/6 mice with obesity induced by a high-fat diet (HFD) and mature 3 T3-L1 adipocytes were used to investigate the role of Rb1 in lipid accumulation and explore its possible molecular mechanism in vivo and in vitro, respectively.
Rb1 reduced the body weight, fat mass, adipocytes size and serum free fatty acid (FFA) concentration of obese mice. In differentiated 3 T3-L1 adipocytes, Rb1 reduced the accumulation of lipid droplets and stimulated output of triglycerides. Additionally, the expression of peroxisome proliferator-activated receptor gamma (PPARγ), phosphorylated PPARγ (Ser112) and aquaporin 7 (AQP7) was upregulated in adipocytes and adipose tissues upon Rb1 treatment. However, intervention of GW9662, PPARγ antagonist, attenuated Rb1-mediated effects on glycolipid metabolism and AQP7 levels.
These data indicated that Rb1 reduced body weight and improved glycolipid metabolism by upregulating PPARγ and AQP7 protein levels. Our study indicated a potential role for Rb1 in the prevention and treatment of obesity.
Obesity, an increasing global public health issue, serves as a risk factor for an expanding set of metabolic diseases, including cardiovascular disease and type 2 diabetes [1]. The pathophysiological progression of obesity is related to increased lipids, mainly triglycerides, the hyperplastic and hypertrophic growth of adipocytes, and the expansion of adipose tissues especially white adipose tissue [2, 3]. Adipose tissue mass is determined by the storage of triglycerides in adipocytes and their removal from adipocytes. High storage but low removal of triglyceride promotes fat tissue accumulation and obesity [4]. This demonstrates that promoting the rate of triglyceride removal from adipocytes is an important antiobesity therapeutic target.
Aquaporins (AQPs) are transmembrane proteins that facilitate the permeation of water and small solutes across membranes, driven by osmotic of solute gradients [5]. Numerous studies have described the crucial role of aquaglyceroporins, a subfamily of AQPs, in adipose tissue biology and obesity onset [6, 7]. Under conditions of energy expenditure, triacylglycerol stored in adipocytes is hydrolyzed to glycerol and free fatty acids, which are released into the bloodstream [7]. Among the various AQPs, AQP7 is a vital glycerol transporter in adipocytes [8]. AQP7-depleted mice, showed progressive adipocyte hypertrophy, increased fat mass and metabolic disorders [9]. These effects are thought to be relevant to reduced adipocyte glycerol permeability and the subsequent accumulation of intracellular glycerol and triacylglycerol [10]. The modulation of adipocyte AQP7 expression has been proposed as a target in obesity therapy [11]. The upregulation of AQP7 expression or its functional activation might be an ideal approach for the treatment of obesity. AQP7 is a novel adipose-specific target gene of PPARγ [12]. AQP7 expression in adipocytes was reported to be increased by thiazolidinediones, which are synthetic PPARγ ligands. PPARγ regulates AQP7 expression through binding of the PPARγ-retinoid X receptor complex to the peroxisome proliferator-activated receptor response element (PPRE) region in the AQP7 gene promoter.
Panax ginseng, a traditional herbal medicine, has been widely used to treat various diseases in Eastern Asia for more than 4000 years. Ginsenoside Rb1 is the most abundant active component of Panax ginseng, has been reported to decrease body weight, ameliorate glycolipid metabolism and reduce triglyceride accumulation [13,14,15]. In addition, PPARγ was reported to be involved in the effects of Rb1 on adipocytes and adipose tissue. Although these studies implied that Rb1 can reduce fat mass and body weight, its molecular mechanism still remains unclear. Our previous studies also have revealed that Rb1 reduced lipid accumulation in macrophage foam cells [16], and improved the metabolic environment by inhibiting inflammatory reactions in atherosclerosis models [17].
However, whether Rb1 can regulate AQP7 expression through PPARγ to promote lipid transport and reduce body weight remains unclear.
Animal care and treatment
A total of 90 C57BL/6 mice (male, 4–5 weeks old) were obtained from Charles River Laboratories Animal Technology Company (Beijing, China). All mice were raised on a 12-h light/12-h dark cycle. After one week of adaptation, the mice were randomly divided into two groups and received different diets. Some mice were fed a normal diet (20.6% kcal from protein, 67.4% kcal from carbohydrate and 12% kcal from fat)(n = 30), and the rest were fed a high-fat diet (HFD, 20% kcal from protein, 20% kcal from carbohydrate and 60% kcal from fat (soybean oil and lard)) (n = 60) for 12 weeks. Mice fed a normal diet were randomly divided into 2 subgroups (n = 15 per group): the Chow group (fed a normal diet and treated with saline) and Chow+Rb1 group (fed a normal diet and treated with Rb1). The body weights were measured weekly. Mice fed a HFD were confirmed as obese if their weight was 20% greater than that of mice in the Chow group. Subsequently, mice fed a HFD were randomly divided into 4 subgroups (n = 15 per group): the HFD group, HFD + Rb1 group, HFD + GW9662 + Rb1 group and HFD + dimethylsulfoxide (DMSO) + Rb1 group. All groups treated with Rb1 were administered 40 mg/kg/d Rb1 (B21050, Shyuanye, China). Mice in the HFD group received an equal volume of saline. DMSO (D8371, Solarbio Beijing, China) was diluted to 1% in normal saline, and GW9662 (M6191, Sigma US) was prepared in 1% DMSO before administration. All treatments were conducted by daily intraperitoneal injection for 5 weeks. The injection volume of each liquid was 300 μl. GW9662 and DMSO treatments were administered 0.5 h later than Rb1 treatment, and mice in the HFD + Rb1 group were administered 300 μl of normal saline after injection of 300 μl of Rb1. After 5 weeks of treatment, the mice were euthanized. Subcutaneous, visceral and epididymal adipose tissues were harvested, and the weight of the fat mass divided by the body weight of mice was considered the body fat rate (BFR).
The intraperitoneal glucose tolerance test (IPGTT) was conducted on the 16th week. After fasting overnight, mice were injected intraperitoneally with glucose at a dose of 2 g/kg body weight. Blood glucose concentrations in blood from the tail vein of the mice were measured at 0(fasting), 15, 30, 60 and 120 min after glucose administration.
Serum biochemical analysis
Serum collected from each mouse was centrifuged at 3000 rpm for 15 min and stored at − 80 °C for further analysis. Blood biochemical tests to detect serum lipids (cholesterol, triglyceride, high density lipoprotein cholesterol, low density lipoprotein cholesterol, and free fatty acid) and blood glucose were performed as described in our previous report [18].
Histological analysis
Adipose tissue was fixed overnight in 4% paraformaldehyde, and then embedded in paraffin. Tissue sections (5 μm) were collected and mounted onto slides. The sections were stained with hematoxylin and eosin and photographed at 100× magnification. Using Image-Pro Plus 6.0 software (IPP 6.0, Media Cybernetics, Rockville, MD, United States), at least two fields per slice and six slices per fat mass were analyzed to quantify adipocyte size.
Cell culture and treatment
Mouse 3 T3-L1 preadipocytes were purchased from American Type Culture Collection (ATCC, US). The cells were cultured in high glucose Dulbecco's modified Eagle medium (DMEM) with 10% fetal bovine serum (FBS) at 37 °C in a saturated humidity atmosphere of 5% CO2. The classic cocktail method was used to induce 3 T3-L1 preadipocyte differentiation. Briefly, two days after reaching contact inhibition, cells were treated with a mixture of 0.5 mM 3-isobutyl-1-methylxanthine, 1 μM dexamethasone, and 10 μg/mL insulin in DMEM containing 10% FBS for 2 days. The media were replaced with DMEM containing 10 μg/mL insulin and 10% FBS, after which cells were incubated for another 2 days, and the growth media used for an additional day consisted of only DMEM with 10% FBS. When more than 90% of the 3 T3-L1 preadipocytes had been induced into mature 3 T3-L1 adipocytes with accumulated lipid droplets in the cytoplasm, they could be used for further study. The optimum dose of Rb1 was 40 μM, which was determined by titration with different concentrations of Rb1 for 24 h. The dose of GW9662 used was 5 mM, and the dose of DMSO used was 0.01%.
Oil red O staining and triglyceride assay
Lipid droplets in the cytoplasm were measured using oil red O staining. Differentiated 3 T3-L1 adipocytes were placed on cover slides in plates and treated with the corresponding drug for 24 h. Cells were washed with phosphate-buffered saline two times and fixed with 4% paraformaldehyde for 2 h at room temperature. The culture supernatant was collected and used to detect the content of free triglycerides, leptin and adiponectin with an ELISA kit (E1003, Applygen, China). Fixed cells were washed once with distilled water and 60% isopropanol. Subsequently, 0.5% oil red O was added to the cells and incubated for 1 h. The surface dye was rinsed away with distilled water. Cells were observed under a microscope at 100× magnification.
The total protein was extracted from 3 T3-L1 adipocytes and mouse epididymal adipose tissues with a total protein extraction kit (P1250, Applygen). Protein expression levels of AQP7 and PPARγ were detected. Samples were separated by 10% SDS-PAGE and transferred onto 0.45 μm PVDF membranes (Bio-Rad). The membranes were blocked in 5% nonfat dry milk followed by incubation with primary antibodies against AQP7 (AB15568, Merck-Millipore, Germany), PPARγ (ab45036, Abcam, UK), phosphorylated peroxisome proliferator-activated receptor γ (pPPARγ, Ser112) (abs130911a, Absin, China) and Tubulin-α (AF7010, Affinity, US) overnight at 4 °C. The secondary antibody (ZSGB-BIO, China) was goat anti-rabbit immunoglobulin G antibody. After washing, the immunocomplex was incubated with secondary antibody (1:10,000) for 2 h. Bands were visualized by chemiluminescence (Millipore Corporation, Billerica, MA, USA).
All results are expressed as the means±SEMs. Multiple group comparisons were analyzed by ANOVA followed by Tukey's post hoc test, and the significance of differences between the mean values of two groups were analyzed using the unpaired two-tailed Student's t-test. Statistical significance was defined as p < 0.05.
Rb1 reduced body weight and fat mass partially in a PPARγ-dependent manner
To confirm the effects of Rb1 on body weight in obese mice, we established a mouse model of obesity through HFD feeding. After 12 weeks of HFD feeding, the body weights of the mice were significantly increased compared with those of mice in the Chow group (p < 0.01) (Supplement 1) and reached the standard for obesity [19]. The weights of all HFD-fed mice were measured weekly to observe trends over 17 weeks. Then, we investigated the molecular mechanisms of this change. Studies revealed that PPARγ in adipocytes could be activated by Rb1 treatment [20, 21]. To further determine the role of PPARγ in Rb1-induced body weight and fat mass loss, mice were intraperitoneally injected with GW9662, an antagonist of PPARγ. The results showed that Rb1 treatment markedly reduced the body weights of obese mice (Fig. 1a-b) and decreased fat mass accumulation (Fig. 1c). BFR (body fat rate = weight of fat mass/body weight*100%) was significantly reduced in the Rb1-treated group (Fig. 1d). H&E staining showed that the in vivo adipocyte size in the HFD + Rb1 group mice was markedly reduced compared with that in the control group (Fig. 1c-e). However, GW9662 treatment partially reversed the decrease in body weight, fat mass and adipocyte size induced by Rb1. There was no significant difference in these parameters in the presence and absence of DMSO, the PPARγ dissolvent. These data suggested that the PPARγ pathway is involved in the effects of Rb1 in reducing body weight and fat mass in HFD-induced obese mice.
Effects of Rb1 and/or GW9662 on body weight and fat mass in HFD-induced obese mice. a Representative individuals from the different groups. Scale bar: 1 cm. b Variations in the body weight of the four groups over weeks. c En face view of visceral adipose tissue from representative individuals from the four groups. Scale bar: 5mm. H&E staining of visceral fat tissues. Scale bar: 50 μm. H&E staining of visceral fat tissues. Scale bar: 50 μm. d Quantification of the body fat rate. e Quantification of the average adipocyte diameter. IP: intraperitoneal injection. *p < 0.05, the HFD + Rb1 group compared with the HFD group; #p < 0.05, the HFD + GW9662 + Rb1 group compared with the HFD + Rb1 group; **p < 0.01, the HFD + Rb1 group compared with the HFD group; ##p < 0.01, the HFD + GW9662 + Rb1 group compared with the HFD + Rb1 group
Rb1 improved the glucose tolerance and influenced the serum lipid profile of obese mice
As glycolipid metabolism plays a vital role in body weight growth, we investigated whether Rb1 affects glycolipid metabolism. Serum concertrations of cholesterol (TC), triglycerides (TGs), high-density lipoprotein cholesterol (HDL-C), low-density lipoprotein cholesterol (LDL-C), FFAs and blood glucose were detected in HFD-fed mice. The IPGTT was carried out on the 16th week. The area under the curve (AUC) of the IPGTT in the Rb1 group was reduced compared to that in the HFD group. The AUC of the IPGTT was significantly higher in the GW9662 + Rb1 group than in the Rb1 group, and there was no difference in the AUC of the IPGTT between the HFD + DMSO+Rb1 and HFD + Rb1 groups (Fig. 2a-b). Our results showed that Rb1 contributed to the reduced serum FFA levels (Fig. 2c). Serum TG levels tended to decrease with Rb1 treatment, although this difference did not achieve statistical significance. This effect was abrogated by GW9662(Fig. 2d). Serum TC, HDL-C, LDL-C and blood glucose levels were not affected by Rb1 treatment (Fig. 2e-h). In view of these results, Rb1 efficiently lowered the AUC of the IPGTT and improved the ability of obese mice to regulate blood glucose and TG. Inhibition of PPARγ with its antagonist partly reversed this impact. Rb1 decreased the serum level of FFAs, but there was no evidence that PPARγ was involved in the mechanism.
Effects of Rb1 on glycolipid metabolism. a Blood glucose detected by the IPGTT from the tail vein at different time points after glucose injection. b Quantification of the AUC of the IPGTT of mice of different groups. c The serum levels of FFAs, d TGs, e TC, f HDL-C, g LDL-C and h glucose in obese mice under different treatment conditions. *p < 0.05, the HFD + Rb1 group compared with the HFD group; **p < 0.01, the HFD + Rb1 group compared with the HFD group; #p < 0.05, the HFD + GW9662 + Rb1 group compared with the HFD + Rb1 group
Rb1 augmented AQP7 expression in adipose tissue via the PPARγ Signaling pathway
AQP7 is a membrane channel that tranports glycerol and interferes with triglyceride accumulation in adipocytes [22]. It is a target gene of PPARγ and can be activated by PPARγ agonists [12, 23]. To investigate the effect of Rb1 on AQP7 expression and evaluate the involvement of PPARγ, we collected visceral adipose tissue and extracted proteins from the tissue. Rb1 promoted the expression of AQP7, but this effect was partially reversed by a PPARγ inhibitor in vivo (Fig. 3a). Meanwhile, Rb1 also upregulated the expression of PPARγ (Fig. 3b) and pPPARγ (Fig. 3c), and these effects were inhibited by GW9662. The ratio between PPARγ and pPPARγ expression did not change significantly with different treatments (Fig. 3d). These results indicated that Rb1 increased AQP7 expression in a PPARγ-dependent manner, which was possibly responsible for its function in inhibiting adipose tissue expansion and reducing body weight. The improvement of glycolipid metabolism with Rb1 treatment might be associated with the upregulation of PPARγ and AQP7.
Rb1 increased the expression levels of AQP7 and PPARγ in adipose tissue. a Representative western blot analysis and quantification of AQP7. b Representative western blot analysis and quantification of PPARγ. c Representative western blot analysis and quantification of pPPARγ. d Representative western blot analysis and quantification of pPPARγ/PPARγ in vivo. *p < 0.05, the HFD + Rb1 group compared with the HFD group; **p < 0.01, the HFD + Rb1 group compared with the HFD group; ##p < 0.01, the HFD + GW9662 + Rb1 group compared with the HFD + Rb1 group
Rb1 induced AQP7 and PPARγ expression in mature 3 T3-L1 adipocytes
To explore the role of Rb1 in lipid metabolism in vitro, the expression of AQP7, PPARγ and pPPARγ was detected in mature 3 T3-L1 adipocytes with or without Rb1 treatment. Differentiated 3 T3-L1 adipocytes were treated with Rb1 at different concentrations for 24 h. Our results showed that AQP7 protein levels were upregulated under treatment with 20 to 80 μM Rb1 (Fig. 4a-b). The PPARγ protein level was increased with 40 μM Rb1 treatment (Fig. 4c) and pPPARγ level was increased with 40 μM and 80 μM Rb1 treatment (Fig. 4d) compared to that in the control group (0 μM Rb1). However, the pPPARγ/PPARγ level was unchanged with Rb1 treatment (Fig. 4e). We selected 40 μM Rb1 for use in the following experiments.
AQP7, pPPARγ and PPARγ expression in mature 3 T3-L1 adipocytes treated with Rb1 at different concentrations. a Representative western blot analysis of AQP7, pPPARγ and PPARγ expression in mature 3 T3-L1 adipocytes treated with Rb1 at different concentrations. b Quantification of AQP7, c PPARγ, d pPPARγ and e pPPARγ/PPARγ expression relative to the tubulin level in different groups. *p < 0.05, compared with the control group (0 μM Rb1); **p < 0.01, compared with the control group (0 μM Rb1), ***p < 0.001, compared with the control group (0 μM Rb1)
Rb1 decreased lipid storage in adipocytes by promoting PPARγ/ AQP7 protein expression in mature 3 T3-L1 adipocytes
To further understand the molecular mechanism by which Rb1 regulates AQP7, we inhibited PPARγ by incubation with GW9662 in vitro. Oil red O staining showed that the intracellular lipid droplet size was significantly decreased in the Rb1 group (Fig. 5a). The triglyceride concentration in the cell medium was increased with Rb1 treatment (Fig. 5b). Compared to the Rb1 group, the GW9662 + Rb1 group showed larger adipocytes lipids and a lower triglyceride content in the medium. As an endocrine organ, adipose tissue secretes many adipocytokines [24]. Leptin and adiponectin, typical adipokines, play important roles in lipodystrophy. The expression of adiponectin decreases with an increase in adiposity, while leptin levels increase in obesity [25]. To obtain a deeper understanding of the effects of Rb1, we measured the concentrations of leptin and adiponectin in adipocytes. Leptin levels in the culture supernatant were decreased by Rb1 treatment (Fig. 5c). Rb1 increased adiponectin levels in the cell culture medium of adipocytes (Fig. 5d). These effects of Rb1 on leptin and adiponectin could be inhibited by GW9662. These results showed that Rb1 could influence the metabolic state of adipocytes through the PPARγ pathway.
Rb1 decreased the lipid storage inside differentiated 3 T3-L1 adipocytes. a Representative oil red O staining of adipocytes with or without Rb1 treatment in the presence or absence of GW9662. Scale bar: 50 μm. b Quantification of the TG concentration, c leptin levels and d adiponectin expression levels in the cell culture medium. e Representative western blot analysis and f quantification of AQP7, g pPPARγ, h PPARγ and i pPPARγ/PPARγ in vitro. *p < 0.05, the Rb1 group compared with the control group; **p < 0.01, the Rb1 group compared with the control group; #p < 0.05, the GW9662 + Rb1 group compared with the Rb1 group; ##p < 0.01, the GW9662 + Rb1 group compared with the Rb1 group
Our results indicated that Rb1 augmented AQP7 protein expression in adipocytes, which was suppressed by a PPARγ antagonist (Fig. 5e-f). This result was consistent with the in-vivo results described above (Fig. 3a). The protein levels of both pPPARγ and PPARγ were increased in the Rb1 group (Fig. 5g-h). There was no significant difference in the pPPARγ/PPARγ ratio among the groups (Fig. 5i). Taken together, these results indicated that Rb1 attenuated lipid storage, promoted lipid excretion and influenced adipokine levels in adipocytes through the PPARγ-AQP7 pathway.
In this study, we found that Rb1 treatment reduced body weight, diminished fat mass and adipocyte enlargement and improved glycolipid metabolism in HFD-induced obese C57BL/6 mice. In differentiated 3 T3-L1 adipocytes, Rb1 decreased lipid droplet size. Rb1 augmented the expression levels of AQP7, influencing lipid metabolism both at both the animal and cellular levels. Rb1-mediated upregulation of the AQP7 protein was dependent on the PPARγ signaling pathway. A PPARγ inhibitor partially abrogated the beneficial effects of Rb1 on glycolipid metabolism. These results indicated that Rb1 promoted AQP7 expression via the PPARγ signaling pathway to ameliorate obesity status both in vivo and in vitro.
Obesity is closely associated with energy-balance dysregulation under the influence of environmental and genetic factors [2, 26]. The anti-obesity function of Rb1 might be related to energy balance. A study reported that administration of Rb1 significantly suppressed food intake and increased energy expenditure in HFD-induced obese mice [27]. Adipocyte hypertrophy and excessive adipose accumulation are biological characteristics of obesity. The principal metabolic comorbidity associated with excessive body fat is dyslipidemia [28]. Lipogenesis and lipolysis in adipocytes are essential processes for the maintenance of lipid homeostasis. Adipocytes, the main component of adipose tissues, continuously synthesize and hydrolyze triglycerides in response to energy balance.
Ginseng, the root of Panax ginseng, is believed to delay senility and promote longevity. Ginsenosides, the most biologically active components of ginseng, exert multiple beneficial effects in the circulatory, endocrine, immune and central nervous systems [29]. Rb1 is the most abundant and representative ginsenoside. We first demonstrated a new role for Rb1 against obesity. Our study shows that Rb1 significantly ameliorated glycolipid metabolism and diminished body weight without damaging liver function (Supplement 2). We have proven that Rb1 could significantly diminish the body weights of HFD-induced obese mice. According to previous studies, the possible molecular mechanisms of its anti-obesity effects may involve the phosphatidylinositol 3-kinase (PI3K)/Akt signaling pathway and neuropeptide Y in the central nervous system [13, 27].
Regulation of AQP7 in adipose tissue appears crucial for obesity treatment. Human and rodent adipose tissue expresses AQP7 mRNA, but not that of other AQPs, in high abundance. AQP7 is involved in the process of adipogenesis and the transport of triglycerides in adipocytes [30]. The downregulation of AQP7 expression is closely related to the occurrence of type 2 diabetes and obesity [31]. However, AQP7 expression varies in the different adipose depots of obese people [32]. A sex-related difference in the effects of exercise training on AQP7 were also observed, which might be correlated with estradiol [33]. Evidence regarding the relationship between AQP7 expression and type 2 diabetes is still lacking. In this study, we found that Rb1 increased AQP7 expression both in vitro and in vivo. Body weight and fat mass in obese mice and lipid accumulation in mature 3 T3-L1 adipocytes were decreased under Rb1 treatment. Increased AQP7 expression and improved glycometabolism were observed in obese mice. With the increase in AQP7, lipid storage inside adipocytes was significantly decreased by Rb1. In addition, serum TG levels tended to be decreased in obese mice with Rb1 treatment.
To date, the most common reported regulators of AQP7 are insulin, leptin, and PPARγ [12, 34]. With the suppression of AQP7, plasma leptin concentrations were shown to be positively correlated with body fat mass [35]. We revealed that Rb1 decreased the leptin concentration in cell culture medium of adipocytes, but whether this phenomenon is correlated with the change in AQP7 expression is still unknown. As a master gene of adipogenesis, PPARγ can upregulate the expression of AQP7. PPARγ, which is mainly expressed in adipose tissue and the immune system, is closely related to the differentiation of adipocytes, glycolipid metabolism and insulin resistance [36]. Thiazolidinediones, insulin sensitizers that stimulate PPARγ, increased AQP7 mRNA abundance in the adipose tissue of male rodents [37]. Our study demonstrated that Rb1 can regulate AQP7 and increase glycerol release from adipocytes by activating PPARγ. All effects of Rb1 on adipose tissue and adipocytes determined in this experiment could be partially reversed by GW9662, an inhibitor of PPARγ.
In addition to its genetic regulation, PPARγ undergoes a variety of posttranscriptional modifications. Both of these mechanisms determine its specific activities [38]. The posttranscriptional modifications of PPARγ include serine phosphorylation, acetylation and lysine sumoylation [39]. Phosphorylation of PPARγ at Ser273 is essential for insulin resistance related to obesity [40, 41]. Dephosphorylation of Ser112 is associated with adipogenesis, and the phosphorylation of PPAR at Ser112 strongly inhibits adipogenesis [42, 43]. Our study showed that Rb1 could promote the expression of pPPARγ (Ser112), but no significant increase in pPPARγ (Ser112) / PPARγ was observed. This finding suggested that Rb1 plays an important role in the upregulation of PPARγ rather than the phosphorylation of PPARγ.
Considering the pathophysiological feature of obesity, turnover of FFAs and glycerol is vital for glycolipid metabolism. Adipocyte glycerol permeability is a key element in the regulation of fat accumulation. An increase in FFAs can sensitively reflect dyslipidemia. Obese individuals produce excessive FFAs, which can accelerate the development of metabolic syndrome and cardiovascular disease. Wang et al. found that Rb1 could reduce oxidative stress and inflammation in 3 T3-L1 adipocytes by reducing the FFA content [44]. Shang et al. found that Rb1 could improve heterotopic lipid deposition and downregulate FFA levels in obese mice [45]. In this study, Rb1 treatment significantly reduced lipid accumulation and increased the secretion of TG in 3 T3-L1 adipocytes. In addition, Rb1 significantly reduced the plasma level of FFAs and the size of the adipocytes. These results showed that Rb1 has potential value in promoting the transport of lipids in adipocytes. However, there were no significant differences in the plasma levels of TC, HDL-C, LDL-C, TGs or blood sugar between the control group and the Rb1 group. This might be related to the complicated metabolic pathways in the lipids of different organs, as our experiment focused on only adipose tissue.
Intervention with Rb1 did not change serum lipid levels compared to those in the HFD group in this study, while triglyceride levels tended to be lower, but this difference was not significant. This finding seems inconsistent with previous studies [27]. Instead of ApoE-knockout mice, we used wild-type C57BL/6 mice, the lipids of which are hard to regulate. In addition, a 5-week intervention time maybe not long enough for Rb1 to significantly reverse lipid metabolism. In addition, drug delivery methods also influence intracellular concentrations in vivo.
Our results indicate that ginsenoside Rb1 can promote lipid transport and ameliorate obesity by upregulating AQP7 through the PPARγ pathway. Our study suggests Rb1 as a promising antiobesity therapeutic through its targeting of the transportation of lipids.
The datasets used or analyzed during the current study are available from the corresponding author on reasonable request.
Rb1:
Ginsenoside Rb1
HFD:
High-Fat Diet
FFA:
Free Fatty Acid
PPARγ:
Peroxisome Proliferator-activated Receptor Gamma
AQP7:
Aquaporin 7
AQPs:
Aquaporins
PPRE:
Peroxisome Proliferator-activated Receptor Response Element
Dimethylsulfoxide
BFR:
Body Fat Rate
IPGTT:
Intraperitoneal Glucose Tolerance Test
DMEM:
Dulbecco's Modified Eagle Medium
IBMX:
3-isobutyl-1-methylxanthine
pPPARγ:
Phosphorylated Peroxisome Proliferators-Activated Receptor γ
TC:
HDL-C:
High Density Lipoprotein Cholesterol
LDL-C:
Low Density Lipoprotein Cholesterol
Fruh SM. Obesity: risk factors, complications, and strategies for sustainable long-term weight management. J Am Assoc Nurse Pract. 2017;29(S1):S3–S14.
Heymsfield SB, Wadden TA. Mechanisms, pathophysiology, and Management of Obesity. N Engl J Med. 2017;376(3):254–66.
Engin A. Fat cell and fatty acid turnover in obesity. Adv Exp Med Biol. 2017;960:135–60.
Arner P, Bernard S, Salehpour M, Possnert G, Liebl J, Steier P, et al. Dynamics of human adipose lipid turnover in health and metabolic disease. Nature. 2011;478(7367):110–3.
Agre P. Nobel lecture. Aquaporin water channels. Biosci Rep. 2004;24(3):127–63.
da Silva IV, Soveral G. Aquaporins in obesity. Adv Exp Med Biol. 2017;969:227–38.
Madeira A, Moura TF, Soveral G. Aquaglyceroporins: implications in adipose biology and obesity. Cell Mol Life Sci. 2015;72(4):759–71.
Rojek A, Praetorius J, Frokiaer J, Nielsen S, Fenton RA. A current view of the mammalian aquaglyceroporins. Annu Rev Physiol. 2008;70:301–27.
Hara-Chikuma M, Sohara E, Rai T, Ikawa M, Okabe M, Sasaki S, et al. Progressive adipocyte hypertrophy in aquaporin-7-deficient mice: adipocyte glycerol permeability as a novel regulator of fat accumulation. J Biol Chem. 2005;280(16):15493–6.
Hibuse T, Maeda N, Funahashi T, Yamamoto K, Nagasawa A, Mizunoya W, et al. Aquaporin 7 deficiency is associated with development of obesity through activation of adipose glycerol kinase. Proc Natl Acad Sci U S A. 2005;102(31):10993–8.
Fruhbeck G, Catalan V, Gomez-Ambrosi J, Rodriguez A. Aquaporin-7 and glycerol permeability as novel obesity drug-target pathways. Trends Pharmacol Sci. 2006;27(7):345–7.
Kishida K, Shimomura I, Nishizawa H, Maeda N, Kuriyama H, Kondo H, et al. Enhancement of the aquaporin adipose gene expression by a peroxisome proliferator-activated receptor gamma. J Biol Chem. 2001;276(51):48572–9.
Lin N, Cai DL, Jin D, Chen Y, Shi JJ. Ginseng panaxoside Rb1 reduces body weight in diet-induced obese mice. Cell Biochem Biophys. 2014;68(1):189–94.
Shang W, Yang Y, Zhou L, Jiang B, Jin H, Chen M. Ginsenoside Rb1 stimulates glucose uptake through insulin-like signaling pathway in 3T3-L1 adipocytes. J Endocrinol. 2008;198(3):561–9.
Park S, Ahn IS, Kwon DY, Ko BS, Jun WK. Ginsenosides Rb1 and Rg1 suppress triglyceride accumulation in 3T3-L1 adipocytes and enhance beta-cell insulin secretion and viability in Min6 cells via PKA-dependent pathways. Biosci Biotechnol Biochem. 2008;72(11):2815–23.
Qiao L, Zhang X, Liu M, Liu X, Dong M, Cheng J, et al. Ginsenoside Rb1 enhances atherosclerotic plaque stability by improving autophagy and lipid metabolism in macrophage foam cells. Front Pharmacol. 2017;8:727.
Zhang X, Liu MH, Qiao L, Zhang XY, Liu XL, Dong M, et al. Ginsenoside Rb1 enhances atherosclerotic plaque stability by skewing macrophages to the M2 phenotype. J Cell Mol Med. 2018;22(1):409–16.
Zeng X, Guo R, Dong M, Zheng J, Lin H, Lu H. Contribution of TLR4 signaling in intermittent hypoxia-mediated atherosclerosis progression. J Transl Med. 2018;16(1):106.
Wu Y, Huang XF, Bell C, Yu Y. Ginsenoside Rb1 improves leptin sensitivity in the prefrontal cortex in obese mice. CNS Neurosci Ther. 2018;24(2):98–107.
Mu Q, Fang X, Li X, Zhao D, Mo F, Jiang G, et al. Ginsenoside Rb1 promotes browning through regulation of PPARgamma in 3T3-L1 adipocytes. Biochem Biophys Res Commun. 2015;466(3):530–5.
Chan LS, Yue PY, Kok TW, Keung MH, Mak NK, Wong RN. Ginsenoside-Rb1 promotes adipogenesis through regulation of PPARgamma and microRNA-27b. Horm Metab Res. 2012;44(11):819–24.
Katano T, Ito Y, Ohta K, Yasujima T, Inoue K, Yuasa H. Functional characteristics of aquaporin 7 as a facilitative glycerol carrier. Drug Metab Pharmacokinet. 2014;29(3):244–8.
Kondo H, Shimomura I, Kishida K, Kuriyama H, Makino Y, Nishizawa H, et al. Human aquaporin adipose (AQPap) gene. Genomic structure, promoter analysis and functional mutation. Eur J Biochem. 2002;269(7):1814–26.
Galic S, Oakhill JS, Steinberg GR. Adipose tissue as an endocrine organ. Mol Cell Endocrinol. 2010;316(2):129–39.
Yadav A, Kataria MA, Saini V, Yadav A. Role of leptin and adiponectin in insulin resistance. Clin Chim Acta. 2013;417:80–4.
Kopelman PG. Obesity as a medical problem. Nature. 2000;404(6778):635–43.
Xiong Y, Shen L, Liu KJ, Tso P, Xiong Y, Wang G, et al. Antiobesity and antihyperglycemic effects of ginsenoside Rb1 in rats. Diabetes. 2010;59(10):2505–12.
Bays HE, Toth PP, Kris-Etherton PM, Abate N, Aronne LJ, Brown WV, et al. Obesity, adiposity, and dyslipidemia: a consensus statement from the National Lipid Association. J Clin Lipidol. 2013;7(4):304–83.
Kim JH. Pharmacological and medical applications of Panax ginseng and ginsenosides: a review for use in cardiovascular diseases. J Ginseng Res. 2018;42(3):264–9.
Hibuse T, Maeda N, Nagasawa A, Funahashi T. Aquaporins and glycerol metabolism. Biochim Biophys Acta. 2006;1758(8):1004–11.
Prudente S, Flex E, Morini E, Turchi F, Capponi D, De Cosmo S, et al. A functional variant of the adipocyte glycerol channel aquaporin 7 gene is associated with obesity and related metabolic abnormalities. Diabetes. 2007;56(5):1468–74.
Miranda M, Escote X, Ceperuelo-Mallafre V, Alcaide MJ, Simon I, Vilarrasa N, et al. Paired subcutaneous and visceral adipose tissue aquaporin-7 expression in human obesity and type 2 diabetes: differences and similarities between depots. J Clin Endocrinol Metab. 2010;95(7):3470–9.
Jin B, Chen X, Xing L, Xu W, Fu X, Zhu J, et al. Tissue-specific effects of estrogen on glycerol channel aquaporin 7 expression in an ovariectomized mouse model of menopause. Climacteric. 2017;20(4):385–90.
Rodriguez A, Catalan V, Gomez-Ambrosi J, Garcia-Navarro S, Rotellar F, Valenti V, et al. Insulin- and leptin-mediated control of aquaglyceroporins in human adipocytes and hepatocytes is mediated via the PI3K/Akt/mTOR signaling cascade. J Clin Endocrinol Metab. 2011;96(4):E586–97.
Maffei M, Halaas J, Ravussin E, Pratley RE, Lee GH, Zhang Y, et al. Leptin levels in human and rodent: measurement of plasma leptin and Ob RNA in obese and weight-reduced subjects. Nat Med. 1995;1(11):1155–61.
Kawai T, Masaki T, Doi S, Arakawa T, Yokoyama Y, Doi T, et al. PPAR-gamma agonist attenuates renal interstitial fibrosis and inflammation through reduction of TGF-beta. Lab Investig. 2009;89(1):47–58.
Lee DH, Park DB, Lee YK, An CS, Oh YS, Kang JS, et al. The effects of thiazolidinedione treatment on the regulations of aquaglyceroporins and glycerol kinase in OLETF rats. Metabolism. 2005;54(10):1282–9.
Janani C, Ranjitha Kumari BD. PPAR gamma gene--a review. Diabetes Metab Syndr. 2015;9(1):46–50.
Ahmadian M, Suh JM, Hah N, Liddle C, Atkins AR, Downes M, et al. PPARgamma signaling and metabolism: the good, the bad and the future. Nat Med. 2013;19(5):557–66.
Choi JH, Banks AS, Kamenecka TM, Busby SA, Chalmers MJ, Kumar N, et al. Antidiabetic actions of a non-agonist PPARgamma ligand blocking Cdk5-mediated phosphorylation. Nature. 2011;477(7365):477–81.
Choi JH, Banks AS, Estall JL, Kajimura S, Bostrom P, Laznik D, et al. Anti-diabetic drugs inhibit obesity-linked phosphorylation of PPARgamma by Cdk5. Nature. 2010;466(7305):451–6.
Hu E, Kim JB, Sarraf P, Spiegelman BM. Inhibition of adipogenesis through MAP kinase-mediated phosphorylation of PPARgamma. Science. 1996;274(5295):2100–3.
Li D, Zhang L, Xu L, Liu L, He Y, Zhang Y, et al. WIP1 phosphatase is a critical regulator of adipogenesis through dephosphorylating PPARgamma serine 112. Cell Mol Life Sci. 2017;74(11):2067–79.
Wang M, Chen Y, Xiong Z, Yu S, Zhou B, Ling Y, et al. Ginsenoside Rb1 inhibits free fatty acidsinduced oxidative stress and inflammation in 3T3L1 adipocytes. Mol Med Rep. 2017;16(6):9165–72.
Shang WB, Yu XZ, Wang GQ, Zhao J. Effect of ginsenoside Rb1 in ameliorating insulin resistance and ectopic fat deposition in obese mice induced by high fat diet. Zhongguo Zhong Yao Za Zhi. 2013;38(23):4119–23.
This work was supported by the National Natural Science Foundation of China (81873516), the National Key Research and Development Program of China (2017YFC1308303), the Key Technology Research and Development Program of Shandong Province (2017GSF218045), the Joint Research Funds for Shandong University and Karolinska Institute (SDU-KI-2019-10), the natural science foundation of Fujian Province (2016 J01441) and Fujian provincial young and middle-aged backbone foundation (2016-ZQN-55).
Rong Guo and Lei Wang contributed equally to this work.
The Key Laboratory of Cardiovascular Remodeling and Function Research, Chinese Ministry of Education, Chinese National Health Commission and Chinese Academy of Medical Sciences, The State and Shandong Province Joint Key Laboratory of Translational Cardiovascular Medicine, Department of Cardiology, Qilu Hospital, Cheeloo College of Medicine, Shandong University, 107 Wenhuaxi Road, Jinan, 250012, China
Rong Guo, Lei Wang, Minghao Liu, Peng Zhou, Huixia Lu & Mei Dong
Department of Cardiology, The Second Affiliated Hospital of Fujian Medical University, Quanzhou, 362000, Fujian, People's Republic of China
Rong Guo, Xianqin Zeng & Huili Lin
Department of Cardiology, Ji'an Municipal Center People's Hospital, Ji'an, Jiangxi, China
Rong Guo & Xianqin Zeng
State Key Laboratory of Cardiovascular Disease, Fuwai Hospital, National Center for Cardiovascular Diseases, Chinese Academy of Medical Sciences and Peking Union Medical College, Beijing, 100037, People's Republic of China
Minghao Liu
Rong Guo
Lei Wang
Xianqin Zeng
Peng Zhou
Huixia Lu
Huili Lin
Mei Dong
RG, LW, XQZ, MHL, PZ, HLL, MD, and HXL made substantial contributions to the conception. RG, LW and XQZ implemented experiments. MHL and PZ analyzed the data and made figures for this manuscript. RG, LW and MD wrote the original draft and substantively revised it. HXL administrated this project. HXL, MD and HLL funded this experiment. All authors read and approved the final manuscript.
Corresponding authors
Correspondence to Huili Lin or Mei Dong.
This study was approved by the ethics committee of Qilu Hospital, Cheeloo College of Medicine, Shandong University.
Additional file 1: Supplement 1
. Variations in the body weight of mice on different diets with or without Rb1 treatment. IP: intraperitoneal injection. **p < 0.01, the HFD group compared to the Chow group; #p < 0.05, the HFD group compared to the HFD + Rb1 group.
. Liver function in mice from different groups. (A) Quantification of ALT serum levels. (B) Quantification of AST serum levels. *p < 0.05, the HFD + Rb1 group compared to the HFD group; #p < 0.05, the HFD + GW9662 + Rb1 compared to the HFD + Rb1 group.
Guo, R., Wang, L., Zeng, X. et al. Aquaporin 7 involved in GINSENOSIDE-RB1-mediated anti-obesity via peroxisome proliferator-activated receptor gamma pathway. Nutr Metab (Lond) 17, 69 (2020). https://doi.org/10.1186/s12986-020-00490-8
Received: 23 January 2020
PPARγ
Lipid release


text:
Los Angeles gears up for a month against torture
May 28, 2014	12:47 PM CST By Eric A. Gordon
LOS ANGELES – In a world where we sometimes feel overwhelmed by tragedy and sorrow, the best antidote to helplessness is to get out and do something, be with people, and imagine a better future.
June is Torture Awareness Month in Greater Los Angeles. Many activities are scheduled to increase awareness of the issue and make a difference. The month is being coordinated by ICUJP (Interfaith Communities United for Justice and Peace), whose motto is "Religious Communities Must Stop Blessing War and Violence." (see www.icujp.org.)
Saturday, May 31, 5:00 to 8:00 p.m.: hear Father Roy Bourgeois, founder of the School of the Americas Watch-Los Angeles, at All Saints Church, 132 N. Euclid Avenue, Pasadena 91101. There's no charge at the door, but donations are gladly accepted to support the School of the Americas (SOA) Watch. The guest speaker will be Blase Bonpane. Co-hosts for the evening are Theresa Bonpane and Frank Dorrel and music will be by Fidel Sanchez. The event is co-sponsored by the Office of the Americas and Addicted to War.
Sunday, June 1, 2:00 to 4:30 p.m.: Father Bourgeois will speak against torture at the First Unitarian Universalist Church of Los Angeles, 2936 W. 8th St., Los Angeles 90005 (just East of Vermont Ave.). The afternoon is sponsored by SOA Watch-LA and UULAMOR (Unitarian Universalist Latino Americano Monsignor Oscar Romero). Music will be by Andrea Zuniga. This is a bilingual event. There is no official admission price but donations to SOA Watch are greatly appreciated! For further information, contact: sandrasdelmundo@gmail.com.
Father Bourgeois was a naval officer in Vietnam. After he returned home, he joined the Maryknoll Society, an American Catholic organization, and went to Bolivia, where he ministered to the poor. He was ordered to leave the country after speaking out against General Hugo Banzer's oppressive government, which arrested, tortured, and killed many dissidents. From there he went to El Salvador. After witnessing numerous human rights abuses that the Salvadoran government committed against its own population (with U.S. financial support and military aid), Roy focused on exposing where the soldiers had received their training – the School of the Americas.
Roy founded the School of the Americas Watch in 1990. SOA Watch exposes the school, located at Fort Benning, Georgia, and its role in training Latin American soldiers in repressive tactics and then deploying them throughout the region. The School of the Americas changed its name in 2001 to the Western Hemispheric Institute for Security and Cooperation (WHINSEC). In large part because of Father Roy's efforts, Ecuador, Nicaragua, Argentina, Bolivia, Uruguay, and Venezuela no longer send soldiers or police to the school.
Tuesday, June 3, 7:00 p.m.: There will be a performance of If the SHU Fits: Voices from Solitary Confinement, at the Vortex, 2341 E. Olympic Blvd., Los Angeles 90041. The event is sponsored by Dramastage-Qumran, ICUJP and Public Works Improvisational Theatre. The play, by Andy Griggs and Melvin Ishmael Johnson, is based on stories of people held in state-sanctioned torture-total isolation for 23 hours daily, sensory deprivation, no contact with family, poor food, and minimal medical treatment. Admission is by freewill donation. There will be a discussion afterward.
Friday, June 6, 7:00-9:00 a.m.: Dolores Canales from California Families Against Solitary Confinement will speak at ICUJP, Immanuel Presbyterian Church, 3300 Wilshire Blvd., Los Angeles 90010. Immediately following, from 9:15-10:15 a.m., there will be a vigil and press conference to announce other activities taking place during Torture Awareness Month.
Saturday, June 21, 2:00 p.m.: Exposing the Truth of U.S. Torture: Restoring Human Dignity, will feature Dr. Azizah al-Hibri, of the Constitution Project's Task Force on Detainee Treatment and Karamah (Muslim Women Lawyers for Human Rights). The location of the event will be at Immanuel Presbyterian Church, 3300 Wilshire Blvd., Los Angeles. The National Religious Campaign Against Torture is a cosponsor.
Sunday, June 22, 3:00 p.m.: An interfaith gathering about detention and deportation of immigrants will be held at the United University Church, 817 W. 34 St., Los Angeles 90089.
Sunday, June 22, 3:00 p.m.: Fundraiser for Human Rights (for a program for torture victims) will be held at SoulCycle, 8570 Sunset Blvd., West Hollywood. For more information, see ptvla.org/soulcycle/
Thursday, June 26 is United Nations International Day of Support for Victims of Torture. At 10:30 a.m. the Stand Together and End Torture Vigil will take place at the corner of Jefferson and Hoover, near the USC campus. At 10:45 a.m. there will be a press conference. At 11:30 a.m. the ICUJP Justice Luncheon will feature the attorneys of two of the Guantánamo Bay detainees, Anne Richardson and Michael Rapkin. The event will take place at the United University Church, 817 W. 34th St., Los Angeles 90089. The suggested donation is $20, but no one will be turned away. Register at http://icujpjustlunch.eventbrite.com.
Sunday, June 29, 3:00 pm.: Members of St. Michael and All Angels Church will read If the SHU Fits: Voices from Solitary Confinement, at 3646 Coldwater Canyon Ave., Studio City 91604. A discussion will follow.
Photo: Mary Button/ICUJP.org
Eric A. Gordon
Eric A. Gordon is the author of a biography of radical American composer Marc Blitzstein, co-author of composer Earl Robinson's autobiography, and the translator of a memoir by Brazilian author Hadasa Cytrynowicz. He has received numerous awards for his People's World writing from the International Labor Communications Association. His latest project is translating the nine books of fiction by Manuel Tiago (pseudonym for Álvaro Cunhal) from Portuguese, the first volumes available from International Publishers NY.
Kazakhstan reflects determination of capitalist oligarchs to hold onto their wealth
UN warns of vaccine hoarding by rich countries, again
NATO and Lithuania talking tough as EU-Russia tensions loom over Ukraine
The West, not Russia, is responsible for the war danger in Ukraine