text:
"""
Created on Mon Mar  6 23:41:26 2017

@author: zqwu
"""
from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import numpy as np
import tensorflow as tf
import deepchem
from deepchem.utils.dependencies import xgboost
from deepchem.molnet.preset_hyper_parameters import hps
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor

def benchmark_classification(train_dataset,
                             valid_dataset,
                             test_dataset,
                             tasks,
                             transformers,
                             n_features,
                             metric,
                             model,
                             test=False,
                             hyper_parameters=None,
                             seed=123):
  """
  Calculate performance of different models on the specific dataset & tasks

  Parameters
  ----------
  train_dataset: dataset struct
      dataset used for model training and evaluation
  valid_dataset: dataset struct
      dataset only used for model evaluation (and hyperparameter tuning)
  test_dataset: dataset struct
      dataset only used for model evaluation
  tasks: list of string
      list of targets(tasks, datasets)
  transformers: dc.trans.Transformer struct
      transformer used for model evaluation
  n_features: integer
      number of features, or length of binary fingerprints
  metric: list of dc.metrics.Metric objects
      metrics used for evaluation
  model: string,  optional (default='tf')
      choice of which model to use, should be: rf, tf, tf_robust, logreg,
      irv, graphconv, dag, xgb, weave
  test: boolean
      whether to calculate test_set performance
  hyper_parameters: dict, optional (default=None)
      hyper parameters for designated model, None = use preset values

  Returns
  -------
  train_scores : dict
	predicting results(AUC) on training set
  valid_scores : dict
	predicting results(AUC) on valid set
  test_scores : dict
	predicting results(AUC) on test set

  """
  train_scores = {}
  valid_scores = {}
  test_scores = {}

  assert model in [
      'rf', 'tf', 'tf_robust', 'logreg', 'irv', 'graphconv', 'dag', 'xgb',
      'weave'
  ]
  if hyper_parameters is None:
    hyper_parameters = hps[model]
  model_name = model

  if model_name == 'tf':
    # Loading hyper parameters
    layer_sizes = hyper_parameters['layer_sizes']
    weight_init_stddevs = hyper_parameters['weight_init_stddevs']
    bias_init_consts = hyper_parameters['bias_init_consts']
    dropouts = hyper_parameters['dropouts']
    penalty = hyper_parameters['penalty']
    penalty_type = hyper_parameters['penalty_type']
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']

    # Building tensorflow MultiTaskDNN model
    model = deepchem.models.TensorflowMultiTaskClassifier(
        len(tasks),
        n_features,
        layer_sizes=layer_sizes,
        weight_init_stddevs=weight_init_stddevs,
        bias_init_consts=bias_init_consts,
        dropouts=dropouts,
        penalty=penalty,
        penalty_type=penalty_type,
        batch_size=batch_size,
        learning_rate=learning_rate,
        seed=seed)

  elif model_name == 'tf_robust':
    # Loading hyper parameters
    layer_sizes = hyper_parameters['layer_sizes']
    weight_init_stddevs = hyper_parameters['weight_init_stddevs']
    bias_init_consts = hyper_parameters['bias_init_consts']
    dropouts = hyper_parameters['dropouts']

    bypass_layer_sizes = hyper_parameters['bypass_layer_sizes']
    bypass_weight_init_stddevs = hyper_parameters['bypass_weight_init_stddevs']
    bypass_bias_init_consts = hyper_parameters['bypass_bias_init_consts']
    bypass_dropouts = hyper_parameters['bypass_dropouts']

    penalty = hyper_parameters['penalty']
    penalty_type = hyper_parameters['penalty_type']
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']

    # Building tensorflow robust MultiTaskDNN model
    model = deepchem.models.RobustMultitaskClassifier(
        len(tasks),
        n_features,
        layer_sizes=layer_sizes,
        weight_init_stddevs=weight_init_stddevs,
        bias_init_consts=bias_init_consts,
        dropouts=dropouts,
        bypass_layer_sizes=bypass_layer_sizes,
        bypass_weight_init_stddevs=bypass_weight_init_stddevs,
        bypass_bias_init_consts=bypass_bias_init_consts,
        bypass_dropouts=bypass_dropouts,
        penalty=penalty,
        penalty_type=penalty_type,
        batch_size=batch_size,
        learning_rate=learning_rate,
        seed=seed)

  elif model_name == 'logreg':
    # Loading hyper parameters
    penalty = hyper_parameters['penalty']
    penalty_type = hyper_parameters['penalty_type']
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']

    # Building tensorflow logistic regression model
    model = deepchem.models.TensorflowLogisticRegression(
        len(tasks),
        n_features,
        penalty=penalty,
        penalty_type=penalty_type,
        batch_size=batch_size,
        learning_rate=learning_rate,
        seed=seed)

  elif model_name == 'irv':
    # Loading hyper parameters
    penalty = hyper_parameters['penalty']
    penalty_type = hyper_parameters['penalty_type']
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_K = hyper_parameters['n_K']

    # Transform fingerprints to IRV features
    transformer = deepchem.trans.IRVTransformer(n_K, len(tasks), train_dataset)
    train_dataset = transformer.transform(train_dataset)
    valid_dataset = transformer.transform(valid_dataset)
    if test:
      test_dataset = transformer.transform(test_dataset)

    # Building tensorflow IRV model
    model = deepchem.models.TensorflowMultiTaskIRVClassifier(
        len(tasks),
        K=n_K,
        penalty=penalty,
        penalty_type=penalty_type,
        batch_size=batch_size,
        learning_rate=learning_rate,
        seed=seed)

  elif model_name == 'graphconv':
    # Loading hyper parameters
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_filters = hyper_parameters['n_filters']
    n_fully_connected_nodes = hyper_parameters['n_fully_connected_nodes']

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.SequentialGraph(n_features)
    graph_model.add(
        deepchem.nn.GraphConv(int(n_filters), n_features, activation='relu'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(deepchem.nn.GraphPool())
    graph_model.add(
        deepchem.nn.GraphConv(
            int(n_filters), int(n_filters), activation='relu'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(deepchem.nn.GraphPool())
    # Gather Projection
    graph_model.add(
        deepchem.nn.Dense(
            int(n_fully_connected_nodes), int(n_filters), activation='relu'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(deepchem.nn.GraphGather(batch_size, activation="tanh"))
    model = deepchem.models.MultitaskGraphClassifier(
        graph_model,
        len(tasks),
        n_features,
        batch_size=batch_size,
        learning_rate=learning_rate,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'dag':
    # Loading hyper parameters
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_graph_feat = hyper_parameters['n_graph_feat']
    default_max_atoms = hyper_parameters['default_max_atoms']

    max_atoms_train = max([mol.get_num_atoms() for mol in train_dataset.X])
    max_atoms_valid = max([mol.get_num_atoms() for mol in valid_dataset.X])
    max_atoms_test = max([mol.get_num_atoms() for mol in test_dataset.X])
    max_atoms = max([max_atoms_train, max_atoms_valid, max_atoms_test])
    max_atoms = min([max_atoms, default_max_atoms])
    print('Maximum number of atoms: %i' % max_atoms)
    reshard_size = 256
    transformer = deepchem.trans.DAGTransformer(max_atoms=max_atoms)
    train_dataset.reshard(reshard_size)
    train_dataset = transformer.transform(train_dataset)
    valid_dataset.reshard(reshard_size)
    valid_dataset = transformer.transform(valid_dataset)
    if test:
      test_dataset.reshard(reshard_size)
      test_dataset = transformer.transform(test_dataset)

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.SequentialDAGGraph(
        n_features, max_atoms=max_atoms)
    graph_model.add(
        deepchem.nn.DAGLayer(
            n_graph_feat,
            n_features,
            max_atoms=max_atoms,
            batch_size=batch_size))
    graph_model.add(deepchem.nn.DAGGather(n_graph_feat, max_atoms=max_atoms))

    model = deepchem.models.MultitaskGraphClassifier(
        graph_model,
        len(tasks),
        n_features,
        batch_size=batch_size,
        learning_rate=learning_rate,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'weave':
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_graph_feat = hyper_parameters['n_graph_feat']
    n_pair_feat = hyper_parameters['n_pair_feat']

    max_atoms_train = max([mol.get_num_atoms() for mol in train_dataset.X])
    max_atoms_valid = max([mol.get_num_atoms() for mol in valid_dataset.X])
    max_atoms_test = max([mol.get_num_atoms() for mol in test_dataset.X])
    max_atoms = max([max_atoms_train, max_atoms_valid, max_atoms_test])

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.AlternateSequentialWeaveGraph(
        batch_size,
        max_atoms=max_atoms,
        n_atom_feat=n_features,
        n_pair_feat=n_pair_feat)
    graph_model.add(deepchem.nn.AlternateWeaveLayer(max_atoms, 75, 14))
    graph_model.add(
        deepchem.nn.AlternateWeaveLayer(max_atoms, 50, 50, update_pair=False))
    graph_model.add(deepchem.nn.Dense(n_graph_feat, 50, activation='tanh'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(
        deepchem.nn.AlternateWeaveGather(
            batch_size, n_input=n_graph_feat, gaussian_expand=True))

    model = deepchem.models.MultitaskGraphClassifier(
        graph_model,
        len(tasks),
        n_features,
        batch_size=batch_size,
        learning_rate=learning_rate,
        learning_rate_decay_time=1000,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'rf':
    # Loading hyper parameters
    n_estimators = hyper_parameters['n_estimators']
    nb_epoch = None

    # Building scikit random forest model
    def model_builder(model_dir_rf):
      sklearn_model = RandomForestClassifier(
          class_weight="balanced", n_estimators=n_estimators, n_jobs=-1)
      return deepchem.models.sklearn_models.SklearnModel(sklearn_model,
                                                         model_dir_rf)

    model = deepchem.models.multitask.SingletaskToMultitask(tasks,
                                                            model_builder)

  elif model_name == 'xgb':
    # Loading hyper parameters
    max_depth = hyper_parameters['max_depth']
    learning_rate = hyper_parameters['learning_rate']
    n_estimators = hyper_parameters['n_estimators']
    gamma = hyper_parameters['gamma']
    min_child_weight = hyper_parameters['min_child_weight']
    max_delta_step = hyper_parameters['max_delta_step']
    subsample = hyper_parameters['subsample']
    colsample_bytree = hyper_parameters['colsample_bytree']
    colsample_bylevel = hyper_parameters['colsample_bylevel']
    reg_alpha = hyper_parameters['reg_alpha']
    reg_lambda = hyper_parameters['reg_lambda']
    scale_pos_weight = hyper_parameters['scale_pos_weight']
    base_score = hyper_parameters['base_score']
    seed = hyper_parameters['seed']
    early_stopping_rounds = hyper_parameters['early_stopping_rounds']
    nb_epoch = None

    esr = {'early_stopping_rounds': early_stopping_rounds}

    # Building xgboost classification model
    def model_builder(model_dir_xgb):
      xgboost_model = xgboost.XGBClassifier(
          max_depth=max_depth,
          learning_rate=learning_rate,
          n_estimators=n_estimators,
          gamma=gamma,
          min_child_weight=min_child_weight,
          max_delta_step=max_delta_step,
          subsample=subsample,
          colsample_bytree=colsample_bytree,
          colsample_bylevel=colsample_bylevel,
          reg_alpha=reg_alpha,
          reg_lambda=reg_lambda,
          scale_pos_weight=scale_pos_weight,
          base_score=base_score,
          seed=seed)
      return deepchem.models.xgboost_models.XGBoostModel(xgboost_model,
                                                         model_dir_xgb, **esr)

    model = deepchem.models.multitask.SingletaskToMultitask(tasks,
                                                            model_builder)

  if nb_epoch is None:
    model.fit(train_dataset)
  else:
    model.fit(train_dataset, nb_epoch=nb_epoch)

  train_scores[model_name] = model.evaluate(train_dataset, metric, transformers)
  valid_scores[model_name] = model.evaluate(valid_dataset, metric, transformers)
  if test:
    test_scores[model_name] = model.evaluate(test_dataset, metric, transformers)

  return train_scores, valid_scores, test_scores

def benchmark_regression(train_dataset,
                         valid_dataset,
                         test_dataset,
                         tasks,
                         transformers,
                         n_features,
                         metric,
                         model,
                         test=False,
                         hyper_parameters=None,
                         seed=123):
  """
  Calculate performance of different models on the specific dataset & tasks

  Parameters
  ----------
  train_dataset: dataset struct
      dataset used for model training and evaluation
  valid_dataset: dataset struct
      dataset only used for model evaluation (and hyperparameter tuning)
  test_dataset: dataset struct
      dataset only used for model evaluation
  tasks: list of string
      list of targets(tasks, datasets)
  transformers: dc.trans.Transformer struct
      transformer used for model evaluation
  n_features: integer
      number of features, or length of binary fingerprints
  metric: list of dc.metrics.Metric objects
      metrics used for evaluation
  model: string,  optional (default='tf_regression')
      choice of which model to use, should be: tf_regression, tf_regression_ft,
      graphconvreg, rf_regression, dtnn, dag_regression, xgb_regression,
      weave_regression
  test: boolean
      whether to calculate test_set performance
  hyper_parameters: dict, optional (default=None)
      hyper parameters for designated model, None = use preset values

  Returns
  -------
  train_scores : dict
	predicting results(AUC) on training set
  valid_scores : dict
	predicting results(AUC) on valid set
  test_scores : dict
	predicting results(AUC) on test set

  """
  train_scores = {}
  valid_scores = {}
  test_scores = {}

  assert model in [
      'tf_regression', 'tf_regression_ft', 'rf_regression', 'graphconvreg',
      'dtnn', 'dag_regression', 'xgb_regression', 'weave_regression'
  ]
  if hyper_parameters is None:
    hyper_parameters = hps[model]
  model_name = model

  if model_name == 'tf_regression':
    # Loading hyper parameters
    layer_sizes = hyper_parameters['layer_sizes']
    weight_init_stddevs = hyper_parameters['weight_init_stddevs']
    bias_init_consts = hyper_parameters['bias_init_consts']
    dropouts = hyper_parameters['dropouts']
    penalty = hyper_parameters['penalty']
    penalty_type = hyper_parameters['penalty_type']
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']

    model = deepchem.models.TensorflowMultiTaskRegressor(
        len(tasks),
        n_features,
        layer_sizes=layer_sizes,
        weight_init_stddevs=weight_init_stddevs,
        bias_init_consts=bias_init_consts,
        dropouts=dropouts,
        penalty=penalty,
        penalty_type=penalty_type,
        batch_size=batch_size,
        learning_rate=learning_rate,
        seed=seed)

    # Building tensorflow MultiTaskDNN model
  elif model_name == 'tf_regression_ft':
    # Loading hyper parameters
    layer_sizes = hyper_parameters['layer_sizes']
    weight_init_stddevs = hyper_parameters['weight_init_stddevs']
    bias_init_consts = hyper_parameters['bias_init_consts']
    dropouts = hyper_parameters['dropouts']
    penalty = hyper_parameters['penalty']
    penalty_type = hyper_parameters['penalty_type']
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    fit_transformers = [hyper_parameters['fit_transformers'](train_dataset)]

    model = deepchem.models.TensorflowMultiTaskFitTransformRegressor(
        n_tasks=len(tasks),
        n_features=n_features,
        layer_sizes=layer_sizes,
        weight_init_stddevs=weight_init_stddevs,
        bias_init_consts=bias_init_consts,
        dropouts=dropouts,
        penalty=penalty,
        penalty_type=penalty_type,
        batch_size=batch_size,
        learning_rate=learning_rate,
        fit_transformers=fit_transformers,
        n_eval=10,
        seed=seed)

  elif model_name == 'graphconvreg':
    # Initialize model folder

    # Loading hyper parameters
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_filters = hyper_parameters['n_filters']
    n_fully_connected_nodes = hyper_parameters['n_fully_connected_nodes']

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.SequentialGraph(n_features)
    graph_model.add(
        deepchem.nn.GraphConv(int(n_filters), n_features, activation='relu'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(deepchem.nn.GraphPool())
    graph_model.add(
        deepchem.nn.GraphConv(
            int(n_filters), int(n_filters), activation='relu'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(deepchem.nn.GraphPool())
    # Gather Projection
    graph_model.add(
        deepchem.nn.Dense(
            int(n_fully_connected_nodes), int(n_filters), activation='relu'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(deepchem.nn.GraphGather(batch_size, activation="tanh"))
    model = deepchem.models.MultitaskGraphRegressor(
        graph_model,
        len(tasks),
        n_features,
        batch_size=batch_size,
        learning_rate=learning_rate,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'dtnn':
    # Loading hyper parameters
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_embedding = hyper_parameters['n_embedding']
    n_distance = hyper_parameters['n_distance']
    assert len(n_features) == 2, 'DTNN is only applicable to qm datasets'

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.SequentialDTNNGraph(n_distance=n_distance)
    graph_model.add(deepchem.nn.DTNNEmbedding(n_embedding=n_embedding))
    graph_model.add(
        deepchem.nn.DTNNStep(n_embedding=n_embedding, n_distance=n_distance))
    graph_model.add(
        deepchem.nn.DTNNStep(n_embedding=n_embedding, n_distance=n_distance))
    graph_model.add(deepchem.nn.DTNNGather(n_embedding=n_embedding))
    model = deepchem.models.MultitaskGraphRegressor(
        graph_model,
        len(tasks),
        n_embedding,
        batch_size=batch_size,
        learning_rate=learning_rate,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'dag_regression':
    # Loading hyper parameters
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_graph_feat = hyper_parameters['n_graph_feat']
    default_max_atoms = hyper_parameters['default_max_atoms']

    max_atoms_train = max([mol.get_num_atoms() for mol in train_dataset.X])
    max_atoms_valid = max([mol.get_num_atoms() for mol in valid_dataset.X])
    max_atoms_test = max([mol.get_num_atoms() for mol in test_dataset.X])
    max_atoms = max([max_atoms_train, max_atoms_valid, max_atoms_test])
    max_atoms = min([max_atoms, default_max_atoms])
    print('Maximum number of atoms: %i' % max_atoms)
    reshard_size = 512
    transformer = deepchem.trans.DAGTransformer(max_atoms=max_atoms)
    train_dataset.reshard(reshard_size)
    train_dataset = transformer.transform(train_dataset)
    valid_dataset.reshard(reshard_size)
    valid_dataset = transformer.transform(valid_dataset)
    if test:
      test_dataset.reshard(reshard_size)
      test_dataset = transformer.transform(test_dataset)

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.SequentialDAGGraph(
        n_features, max_atoms=max_atoms)
    graph_model.add(
        deepchem.nn.DAGLayer(
            n_graph_feat,
            n_features,
            max_atoms=max_atoms,
            batch_size=batch_size))
    graph_model.add(deepchem.nn.DAGGather(n_graph_feat, max_atoms=max_atoms))

    model = deepchem.models.MultitaskGraphRegressor(
        graph_model,
        len(tasks),
        n_features,
        batch_size=batch_size,
        learning_rate=learning_rate,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'weave_regression':
    batch_size = hyper_parameters['batch_size']
    nb_epoch = hyper_parameters['nb_epoch']
    learning_rate = hyper_parameters['learning_rate']
    n_graph_feat = hyper_parameters['n_graph_feat']
    n_pair_feat = hyper_parameters['n_pair_feat']

    max_atoms_train = max([mol.get_num_atoms() for mol in train_dataset.X])
    max_atoms_valid = max([mol.get_num_atoms() for mol in valid_dataset.X])
    max_atoms_test = max([mol.get_num_atoms() for mol in test_dataset.X])
    max_atoms = max([max_atoms_train, max_atoms_valid, max_atoms_test])

    tf.set_random_seed(seed)
    graph_model = deepchem.nn.AlternateSequentialWeaveGraph(
        batch_size,
        max_atoms=max_atoms,
        n_atom_feat=n_features,
        n_pair_feat=n_pair_feat)
    graph_model.add(deepchem.nn.AlternateWeaveLayer(max_atoms, 75, 14))
    graph_model.add(
        deepchem.nn.AlternateWeaveLayer(max_atoms, 50, 50, update_pair=False))
    graph_model.add(deepchem.nn.Dense(n_graph_feat, 50, activation='tanh'))
    graph_model.add(deepchem.nn.BatchNormalization(epsilon=1e-5, mode=1))
    graph_model.add(
        deepchem.nn.AlternateWeaveGather(
            batch_size, n_input=n_graph_feat, gaussian_expand=True))

    model = deepchem.models.MultitaskGraphRegressor(
        graph_model,
        len(tasks),
        n_features,
        batch_size=batch_size,
        learning_rate=learning_rate,
        learning_rate_decay_time=1000,
        optimizer_type="adam",
        beta1=.9,
        beta2=.999)

  elif model_name == 'rf_regression':
    # Loading hyper parameters
    n_estimators = hyper_parameters['n_estimators']
    nb_epoch = None

    # Building scikit random forest model
    def model_builder(model_dir_rf_regression):
      sklearn_model = RandomForestRegressor(
          n_estimators=n_estimators, n_jobs=-1)
      return deepchem.models.sklearn_models.SklearnModel(
          sklearn_model, model_dir_rf_regression)

    model = deepchem.models.multitask.SingletaskToMultitask(tasks,
                                                            model_builder)

  elif model_name == 'xgb_regression':
    # Loading hyper parameters
    max_depth = hyper_parameters['max_depth']
    learning_rate = hyper_parameters['learning_rate']
    n_estimators = hyper_parameters['n_estimators']
    gamma = hyper_parameters['gamma']
    min_child_weight = hyper_parameters['min_child_weight']
    max_delta_step = hyper_parameters['max_delta_step']
    subsample = hyper_parameters['subsample']
    colsample_bytree = hyper_parameters['colsample_bytree']
    colsample_bylevel = hyper_parameters['colsample_bylevel']
    reg_alpha = hyper_parameters['reg_alpha']
    reg_lambda = hyper_parameters['reg_lambda']
    scale_pos_weight = hyper_parameters['scale_pos_weight']
    base_score = hyper_parameters['base_score']
    seed = hyper_parameters['seed']
    early_stopping_rounds = hyper_parameters['early_stopping_rounds']
    nb_epoch = None

    esr = {'early_stopping_rounds': early_stopping_rounds}

    # Building xgboost classification model
    def model_builder(model_dir_xgb):
      xgboost_model = xgboost.XGBRegressor(
          max_depth=max_depth,
          learning_rate=learning_rate,
          n_estimators=n_estimators,
          gamma=gamma,
          min_child_weight=min_child_weight,
          max_delta_step=max_delta_step,
          subsample=subsample,
          colsample_bytree=colsample_bytree,
          colsample_bylevel=colsample_bylevel,
          reg_alpha=reg_alpha,
          reg_lambda=reg_lambda,
          scale_pos_weight=scale_pos_weight,
          base_score=base_score,
          seed=seed)
      return deepchem.models.xgboost_models.XGBoostModel(xgboost_model,
                                                         model_dir_xgb, **esr)

    model = deepchem.models.multitask.SingletaskToMultitask(tasks,
                                                            model_builder)

  print('-----------------------------')
  print('Start fitting: %s' % model_name)
  if nb_epoch is None:
    model.fit(train_dataset)
  else:
    model.fit(train_dataset, nb_epoch=nb_epoch)

  train_scores[model_name] = model.evaluate(train_dataset, metric, transformers)
  valid_scores[model_name] = model.evaluate(valid_dataset, metric, transformers)
  if test:
    test_scores[model_name] = model.evaluate(test_dataset, metric, transformers)

  return train_scores, valid_scores, test_scores

def low_data_benchmark_classification(train_dataset,
                                      valid_dataset,
                                      n_features,
                                      metric,
                                      model='siamese',
                                      hyper_parameters=None,
                                      seed=123):
  """
  Calculate low data benchmark performance

  Parameters
  ----------
  train_dataset : dataset struct
      loaded dataset, ConvMol struct, used for training
  valid_dataset : dataset struct
      loaded dataset, ConvMol struct, used for validation
  n_features : integer
      number of features, or length of binary fingerprints
  metric: list of dc.metrics.Metric objects
      metrics used for evaluation
  model : string,  optional (default='siamese')
      choice of which model to use, should be: siamese, attn, res
  hyper_parameters: dict, optional (default=None)
      hyper parameters for designated model, None = use preset values

  Returns
  -------
  valid_scores : dict
	predicting results(AUC) on valid set

  """
  train_scores = {}  # train set not evaluated in low data model
  valid_scores = {}

  assert model in ['siamese', 'attn', 'res']
  if hyper_parameters is None:
    hyper_parameters = hps[model]

  # Loading hyperparameters
  # num positive/negative ligands
  n_pos = hyper_parameters['n_pos']
  n_neg = hyper_parameters['n_neg']
  # Set batch sizes for network
  test_batch_size = hyper_parameters['test_batch_size']
  support_batch_size = n_pos + n_neg
  # Model structure
  n_filters = hyper_parameters['n_filters']
  n_fully_connected_nodes = hyper_parameters['n_fully_connected_nodes']

  # Traning settings
  nb_epochs = hyper_parameters['nb_epochs']
  n_train_trials = hyper_parameters['n_train_trials']
  n_eval_trials = hyper_parameters['n_eval_trials']

  learning_rate = hyper_parameters['learning_rate']

  tf.set_random_seed(seed)
  support_graph = deepchem.nn.SequentialSupportGraph(n_features)
  prev_features = n_features
  for count, n_filter in enumerate(n_filters):
    support_graph.add(
        deepchem.nn.GraphConv(int(n_filter), prev_features, activation='relu'))
    support_graph.add(deepchem.nn.GraphPool())
    prev_features = int(n_filter)

  for count, n_fcnode in enumerate(n_fully_connected_nodes):
    support_graph.add(
        deepchem.nn.Dense(int(n_fcnode), prev_features, activation='tanh'))
    prev_features = int(n_fcnode)

  support_graph.add_test(
      deepchem.nn.GraphGather(test_batch_size, activation='tanh'))
  support_graph.add_support(
      deepchem.nn.GraphGather(support_batch_size, activation='tanh'))
  if model in ['siamese']:
    pass
  elif model in ['attn']:
    max_depth = hyper_parameters['max_depth']
    support_graph.join(
        deepchem.nn.AttnLSTMEmbedding(test_batch_size, support_batch_size,
                                      prev_features, max_depth))
  elif model in ['res']:
    max_depth = hyper_parameters['max_depth']
    support_graph.join(
        deepchem.nn.ResiLSTMEmbedding(test_batch_size, support_batch_size,
                                      prev_features, max_depth))

  model_low_data = deepchem.models.SupportGraphClassifier(
      support_graph,
      test_batch_size=test_batch_size,
      support_batch_size=support_batch_size,
      learning_rate=learning_rate)

  print('-------------------------------------')
  print('Start fitting by low data model: ' + model)
  # Fit trained model
  model_low_data.fit(
      train_dataset,
      nb_epochs=nb_epochs,
      n_episodes_per_epoch=n_train_trials,
      n_pos=n_pos,
      n_neg=n_neg,
      log_every_n_samples=50)

  # Evaluating low data model
  valid_scores[model] = model_low_data.evaluate(
      valid_dataset, metric, n_pos, n_neg, n_trials=n_eval_trials)

  return valid_scores

redpajama_set_name: RedPajamaGithub


text:
Q: How to update php form but individually? I would like to update a record in the database but only one at a time. Currently, when i click submit all other values is null and will be deleted from the database. How do i make it so the other values are maintained?
The only work around i can think of is to make each field a separate process in itself but that seems unefficient
This is the processing file:
<?php
session_start();

$host="localhost";
$user="root";
$password="";
$db="portal";

$data=mysqli_connect($host,$user,$password,$db);
$currentuser = $_SESSION["username"];

if($data===false)
{
    die("connection error");
}

if(isset($_POST['submit']))
{
    $username=$_POST['username'];
    $password=$_POST['password'];
    $name=$_POST['name'];
    $phonenum=$_POST['phonenum'];
    $address=$_POST['address'];
    $email=$_POST['email'];

    $sql="UPDATE user SET username='$username', password='$password', name='$name', phonenum='$phonenum', address='$address', email='$email' WHERE username = '$currentuser'";
    $result=mysqli_query($data,$sql);
}
?>

<!doctype html>

<title>User Updated!</title>

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;600&display=swap" rel="stylesheet">

    Welcome, <?php echo $_SESSION["username"] ?>!

User Updated!

            <?php echo "Username: $username

";
            echo "Name: $name

";
            echo "Phone Number: $phonenum

";
            echo "Office Address: $address

";
            echo "Email: $email";?>

This is my html:
<?php
session_start();

$host="localhost";
$user="root";
$password="";
$db="portal";

$data=mysqli_connect($host,$user,$password,$db);
$currentuser = $_SESSION["username"];

if($data===false)
{
    die("connection error");
}

if(isset($_POST['submit']))
{
    $username=$_POST['username'];
    $password=$_POST['password'];
    $name=$_POST['name'];
    $phonenum=$_POST['phonenum'];
    $address=$_POST['address'];
    $email=$_POST['email'];

    $sql="UPDATE user SET username='$username', password='$password', name='$name', phonenum='$phonenum', address='$address', email='$email' WHERE username = '$currentuser'";
    $result=mysqli_query($data,$sql);
}
?>

<!doctype html>

<title>User Updated!</title>

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;600&display=swap" rel="stylesheet">

    Welcome, <?php echo $_SESSION["username"] ?>!

User Updated!

            <?php echo "Username: $username

";
            echo "Name: $name

";
            echo "Phone Number: $phonenum

";
            echo "Office Address: $address

";
            echo "Email: $email";?>

A: One way to do this is by building the query dynamically by checking the fields that you want to update before adding them to the query. This is untested, but should be the gist of what you're trying to do. It adds the various SET x = y values to an array (and separately, the parameterized values to avoid SQL injection).
<?php

if (isset($_POST['submit']))
{
    $username=$_POST['username'];
    $password=$_POST['password'];
    $name=$_POST['name'];
    $phonenum=$_POST['phonenum'];
    $address=$_POST['address'];
    $email=$_POST['email'];
}

// placeholder arrays while we determine which fields/values to update
$set = [];
$parameters = [];

// do we need to update address?
// note: check if it's set and if it's truthy so we don't submit empty strings (unless you want the user to be able to submit blank data?)
if (isset($address) && $address) {
    $set[] = ' address = ? ';
    $parameters[] = $address;
}

// do we need to update name?
if (isset($name) && $name) {
    $set[] = ' name = ? ';
    $parameters[] = $name;
}

// do we need to update phonenum?
if (isset($phonenum) && $phonenum) {
    $set[] = ' phonenum = ? ';
    $parameters[] = $phonenum;
}

// as long as we have some values to update, run the query
if (count($set) > 0) {
    // build the SQL query
    $sql = "UPDATE user SET ".implode(', ', $set).' WHERE username = ?';
    $parameters[] = $currentuser;

    //run the parameterized query
    $stmt = $pdo->prepare($sql);
    $stmt->execute($parameters);
}

Another method would be to first query the current user's data and use that to pre-populate the input fields, and then your query can always update every field. You'll likely want to build in some extra functionality/validation for the password field (confirm password? Special characters or length requirements?), but again this is the basic idea of how to do it:
<?php
    if(isset($_POST['submit'])) {
        $username=$_POST['username'];
        $password=$_POST['password'];
        $name=$_POST['name'];
        $phonenum=$_POST['phonenum'];
        $address=$_POST['address'];
        $email=$_POST['email'];

        $sql="UPDATE user SET username='$username', password='$password', name='$name', phonenum='$phonenum', address='$address', email='$email' WHERE username = '$currentuser'";
        $result=mysqli_query($data,$sql);
    } else {
        $stmt = $pdo->prepare("SELECT username, phonenum, name, address, email FROM user WHERE username = ?");
        $stmt->execute([$currentuser]);
        // https://www.php.net/manual/en/pdostatement.fetchall.php
        $result = $sth->fetchAll(PDO::FETCH_ASSOC);
    }
?>

<form>
    <input name="username" type="text" value="<?= $result['username']; ?>" />
    <input name="phonenum" type="tel" value="<?= $result['phonenum']; ?>" />
    <input name="name" type="text" value="<?= $result['name']; ?>" />
    <input name="address" type="text" value="<?= $result['address']; ?>" />
    <input name="email" type="email" value="<?= $result['email']; ?>" />
</form>

redpajama_set_name: RedPajamaStackExchange


The Woolshed Brewery is located in a 100 year old shearing shed at Wilkadene Station, located only 20 kilometres north of The Frames. The Woolshed's first brew day was in August 2009 and since then it has become one of the Riverland's top tourist destinations. Its rich history, stunning riverfront location make it the perfect place to kick back and relax with friends and family.
Guided tours are available by appointment or simply wander while tasting one of the locally made craft brews or ciders. BYO barbecue facilities are available or purchase a picnic pack full of yummy Riverland produce.


Some Questions on Social Experience (Teaser) – thinkJar, the blog!
I am doing a Webinar with the incredible Brent Leary and Jacada Wednesday on the topic of Social Experience.
Obviously, the first question is always "what is social experience", followed by the traditional "and why do I care". Those are questions that everyone is asking.
and, my most favorite question — "what if I don't do anything about it?".
There is a lot of be said and done, still, about the Social Experience. We are past definitions, we are past acknowledgements of its existence, and we are starting to figure out what we need to do about it.
Next PostNext Upcoming June Madness… Wanna Join Me?


Up to that point, things had been going well for the French and their armies looked to capture Vienna and take the Habsburgs out of the equation.
Marlborough changed all that, but only after lying to his Dutch allies and virtually "stealing" the army he marched 250 miles away from the Low Countries he was expected to protect.
The battle went back and forth, with each side having opportunities for success but seeing confusion and heavy losses confound good plans. Certainly Marlborough and Eugene worked together marvelously well, especially for allies, which may have been the key difference. Tallard and Marsin and the Bavarians had their chances but missed them, needing infantry where they had cavalry and cavalry where they had infantry. When the British attacked the "seam" between the two forces, Marsin's regiments fell back and Tallard's collapsed. French losses were heavy, and their army's aura of invincibility was gone forever.
Though the war would continue for over 10 more years, Blenheim rates as "decisive" because this cost Louis the chance to knock the Habsburgs out of the war early. Instead, it would be his Bavarian allies who would lose out and become vassals to Vienna.
The Battle of Blenheim focuses on the battlefield area itself, with each side having two distinct commands and forces. Players will command the varied forces of each side, with British, Dutch, Austrians, Prussians, Danes, and various German allies on one side and French, Bavarians, and even Irish fighting for Louis. Each unit in the game represents one brigade with each combat strength point around 400 men or 200 horses. One hex on the map equals 400 meters. A turn represents around one hour of action and the game can last up to 7 turns.
In the end, the war would end as countries spun into exhaustion and a number of rulers died from age or sickness, making separate treaties that were finally consolidated under the Treat of Utrecht. France would not dominate the continent and, the most visible effect to us today, Britain still possesses Gibraltar.
Can you, as the Allies, match this great victory and make England a first-rate power? Or will you, as the French, extend the domain of the Sun King and reduce the impact that the Churchill family (Marlborough's name) would have on English history?
About the Designer: Frédéric Bey is a graduate of the Rouen Business School and also of the Paris Pantheon-Sorbonne University majoring in Roman history.
A specialist in Napoleonic and Roman history, Bey is the author of a large number of articles on strategy in the ancient world and on the Napoleonic Wars which have appeared in Guerres & Histoire, Histoires de France , La Revue Napoléon, Prétorien, Traditions and Against the Odds Magazine.
His published wargame designs cover ancient, medieval and Napoleonic military history. They have been showcased in the French Casus Belli and Vae Victis magazines as well as in several American magazines, such as C3i.


text:
Et skridt af gangen er en dansk dokumentarfilm fra 2012, der er instrueret af Anders Aagaard Hansen og Asger Mindegaard.

Handling
'Road movie' om instruktørernes vandretur fra Mexico til Canada. Filmen er bygget kronologisk op omkring turen og giver et indblik i de udfordringer og oplevelser turen byder på.

Referencer

Eksterne henvisninger

Danske film fra 2012
Film fra Danmark (administrationskategori)
Dokumentarfilm fra Danmark

redpajama_set_name: RedPajamaWikipedia


Gaza's health ministry spokesperson said Egypt pumped toxic gas into border tunnel, suffocating two men.
Bozum said 39-year-old major Abdelhamid al-Akar and Sabhy Abu Qarushayn, 28, "suffocated due to the inhalation of toxic gases".
Civil defence crews, alerted on Sunday, retrieved the two bodies from the tunnel "after a great effort that lasted several hours", Bozum said in a statement.
Destruction from three Israeli offensives since 2008, including damage to the enclave's water, sanitation, energy, and medical facilities, coupled with slow reconstruction due to the blockade, led the UN in September to warn that Gaza could be "uninhabitable" by 2020.


"I want to take this opportunity to acknowledge all of your efforts in coordinating the Very Special Arts Festival for District 75. As various people spoke during the ceremonies, the high regard that business people, arts organizations, and community-based organizations have for your contribution to VSAF were clearly underscored. The halls and walls of Teachers College were covered with student work representing a variety of mediums. The auditoriums were booked with student performances as well as arts organizations presentations. The streets hosted bands and clowns who were there to greet and entertain the busloads of students and staff as they signed in were sent to various arenas. Even the sculpture garden was pressed into service as activities were scheduled in that beautiful space as well.
"Congratulations! During these fiscally difficult times I am pleased to be able to provide support for library improvements through the borough president's capital budget funds. I am confident that if we work together, we can build a better Brooklyn for our children, our families, and those enjoying their golden years." – Marty Markowitz, Brooklyn Borough President.
Office of the Brooklyn Borough President – Funding Award Notice Letter for a Library Multi-Media Computer Learning Center @ MSAP.
FY11: $10,000 New York State Office of Children and Family Services – Award # 0-3307 Legislative Grant Award for enriching students' arts and cultural learning @ MSAP.
Initiated a decade long cycle of iterative funding which expanded to include professional development for teachers across all arts disciplines (art, music, dance and theater) in District 75 NYCDOE including the innovative use of adaptive technology for student learning in the arts.


text:
News Current Events
These Winning Photos Are Snapshots of Everyday Life
Young farmers show need for food sustainability and ecological awareness.
Updated April 27, 2021 04:31PM EDT
Coenraad Heinz Torlage / 2021 Sony World Photography Awards
Young people on a farm in South Africa. Hands trapped in a curtain symbolizing how so many people have felt during the pandemic. An angel-like woman in Mexico's Sonora Desert.
These are more striking winners in the 2021 Sony World Photography Awards. They are tops in several categories including the Youth, Student, and Outstanding Contribution to Photography winners. The professional winners and open competition winners were also announced.
Above is "Sanele and Sisi," part of the "Young Farmers" series by Student Photographer of the Year winner Coenraad Heinz Torlage of South Africa.
Torlage describes his work:
"I was born on a farm in South Africa, and grew up with cattle, horses, donkeys and chickens, many of which I still own and love to this day. Farming is an intense occupation that requires passion and unwavering dedication. I set out to photograph young people who choose this life because, like me, they believe they have a responsibility. This sits heavily on all of our shoulders. South Africa is an unpredictable land with severe droughts, safety concerns and debates around land ownership. Despite these challenges, young farmers are working toward a fairer and more equitable future of sustainable food security. They are my peers, my friends and my family, and this is our time to feed the nation."
Torlage was awarded $36,000 worth of Sony photo equipment for his school.
"I have been through an experience that is almost impossible to describe. I often dreamt of winning and prayed that I could share my country and the amazing people in it with the world," Torlage said. "I believe in the young farmers of South Africa which this country needs in terms of food sustainability and ecological awareness."
Youth Photographer of the Year
Pubarun Basu / 2021 Sony World Photography Awards
"No Escape From Reality," Pubarun Basu
Pubarun Basu's photo was selected from six category winners. The 19-year-old from India says:
I created this picture with the idea of representing the feeling of being trapped in a moment, or in one's own reality. I saw the curtains as the fabrics of the space-time continuum, which those two hands fail to break out of. The shadow cast by the parallel railings on to the fabric also gives the impression of a cage, in which the entity is trapped for eternity.
Competition organizers describe the winning photograph:
"In the photograph the shadows of railings projected onto curtains create the illusion of cage bars from behind which a pair of hands is seen as if trying to break through. The illusion of shadows and hands gesture convey a sense of entrapment shared by so many across the world this past year."
Here are some of the finalists from the student and youth competition shortlists.
Outstanding Contribution to Photography
Graciela Iturbide / 2021 Sony World Photography Awards
"Mujer Angel, Desierto de Sonora, Mexico, 1979," Graciela Iturbide
This is what the competition directors had to say about the 2021 winner:
"This year's Outstanding Contribution to Photography has been awarded to the acclaimed Mexican photographic artist Graciela Iturbide. Widely recognized as Latin America's greatest living photographer, Iturbide's work offers a photographic account of Mexico since the late 1970s and is celebrated for its defining contribution to the country's visual identity. In images of everyday life and its culture alongside those of ritual and religion, Iturbide's work explores her country's many complexities and contradictions, questioning its inequalities and highlighting the tensions between the urban and rural, modern and indigenous. Her photographs go beyond straight documentary narratives and aim to provide a poetic vision of their subjects informed by the photographer's personal experiences and journey."
Latin American Professional Award Winner
Andrea Alkalay / 2021 Sony World Photography Awards
"Landscape on Landscape," Andrea Alkalay
This award highlights professionals from across Mexico, Central America, and South America. Winner Andrea Alkalay of Argentina earned the honors for her series, "Landscape on Landscape."
The contest organizers said:
"Fascinated by the idea of nature as a cultural construct, in this project Alkalay shows us what it looks like when the real and the manipulated overlap, resulting in a new landscape. In the foreground we see a tranquil monochrome scene, which is juxtaposed with the rear image, which shows a digitally manipulated colourful backdrop. The judges applauded how these images deal with observations such as the perception of colour through its absence, or the flatness of paper through its fold."
Addressing her win, Alkalay said, "It is so important to give visibility to the artwork to reach a wider audience, and as an Argentine artist, it represents a great opportunity, especially in these very rare times. With this recognition, I am lucky to be able to show the world another way of seeing (which is a thought) opening a dialogue with other photographers or art media people."
Alpha Female Award Winner
Adriana Colombo / 2021 Sony World Photography Awards
"The World in My Hands," Adriana Colombo
The Alpha Female Award recognizes female talent from around the world.
The award was given to Adriana Colombo of Italy for her black and white photo of a mother and her baby.
"Using a short depth of field to her advantage, the well conceived portrait radiates the intimate bond between a mother and child," the organizers said of the photo.
Michaela Ions, leader of Alpha Universe Platform & Alpha Female Program at Sony, says: "This year's winning photo elicits such emotion from the moment you see it, and the greatest part about it is that it means something different to everyone. When you can achieve that connection with your audience as a visual artist, you know you have something special on your hands."
Winning Photographs from Around the World Focus on Nature
Winking, Waving, Tumbling Animals Win Comedy Wildlife Photo Awards
Wildlife, Plants, and Climate Star in Winning Photo Awards
Nuzzling Foxes and Huddling Monkeys Vie for Photo Award
Photographer Celebrates Birds and Their Rainbow Wings
Grinning, Winking, Happy Animals Vie for Photo Honors
It's a Small, Small World in Photography
Wild Horses, Polar Bears, and Volcanoes Win National Photo Awards
City Critters Are Focus of Urban Wildlife Photo Awards
Snow, Bears, and Waves Are Finalists in Youth Photo Awards
Winning Images Focus on Wildlife, Climate Change, and Empathy
Striking Images Compete for Photo Awards
Young Photographers Share Images of Those Building a Better Future
Compelling Images of Nature Shine in Pro Photo Contest

redpajama_set_name: RedPajamaCommonCrawl


anyone know of a good recipe for etoufee....doesn't matter whats in it, i just want to cool some. i know there are a few Cajuns on here, maybe some of yall can help out. Thanks guys!
The French word "etouffee" means to stew, smother or braise. This technique is found in dishes using shrimp, crab, crawfish and, in some cases, meat or game. Though more Creole in origin, etouffees are found throughout Cajun country.
In a 2-gallon stock pot, melt butter over medium-high heat. Add onion, celery, bell peppers, garlic and bay leaves. Sauté until vegetables are wilted, approximately 3-5 minutes. Add tomato sauce and blend well into mixture. Using a wire whip, blend flour into the vegetable mixture to form a white roux. Slowly add crawfish stock or water, a little at a time, until sauce consistency is achieved. Continue adding more stock as necessary to retain consistency. Bring to a bubbling boil, reduce to simmer and cook for 15 minutes .. stirring occasionally. Add crawfish / shrimp , sherry, green onions and parsley and cook an additional 5-8 minutes. Season to taste using salt and cayenne pepper. Serve over steamed white rice.
Last edited by Cajun Blake; 07-09-2010 at 08:07 PM.
Man that makes hungry. When are you coming over to fix dinner?
Just tried this tonight, 6 guests said it was awesome, I loved it but I love just about any etoufee, it was very restaurant gourmet quality food. Thanks Blake.
yes, that looks delicious...i think ill make some this weekend. thanks man!
Wow, that looks good! I might have to try that recipe.
Only thing I'd do different is the rice. Use 20-minute Uncle Ben's white rice. Determine the amount of water you need for the amount of rice you are going to cook (directions on the box). Boil that amount of water and drop a beef bullion cube in for every cup of water. Mix that up until the cube dissolves. Shake in some Cajun Blaze seasoning.
Put some butter in a pan for the rice and melt it. Dump in the rice and saute the rice for a minute or two until all the rice is well-buttered. Now pour the bullion into the rice pan and stir it up, turn heat down to simmer. Put a lid on it and simmer for 20 minutes. Let it stand after that until all the water is gone/soaked up.
Now, THAT's some good rice.
I have to make this dish some day!
Just a suggestion, did you try Basmati rice, or Chinese perfume rice, those are wonderful!!!?
Really want to try this recipe. But all I could find was already cooked, ready to eat crawfish tails. Would you just drop em in for a minute just to heat em up or still cook the eight minutes?
i knew blake would come thru!
If they are allready cook all you want to do is heat them up which should only take a few minutes. Any longer and they will get rubbery. IMO though allready cooked ones wont be nearly as good b/c alot of the flavor in a crawfish etoufee comes from the fat on the uncooked tails which is what makes US crawfish tails the best to cook with over the Chineese and cooked ones.
Looks like I'm gonna have to find some fresh bugs around Dallas. Anybody know where preferablly around Denton?
Every time I make rice it comes out a sticky glob of goo. I'm following the directions on the packages but I don't thinktheir directions are supposed to yeild the gelatinous mass I manage to produce.
when water begins to boil , add rice ... stir around, then cover with top and set stove temp to 2 or slightly above "low"
In a stock pot, melt butter over medium heat. When butter is bubbling, add flour to make a roux, stirring constantly to prevent or remove any lumps. Cook the roux for 5 minutes. Do not brown.
Stir in onions and bell peppers; saute 10 minutes, or until onions are translucent. Add garlic, and saute for 3 minutes. Stir in crawfish tails. Slowly pour in enough water to reach a little thicker than soup-like consistency. Season with cumin, Worcestershire sauce, hot sauce, and salt and pepper. Reduce heat, and simmer for 10 minutes.
Whoo tried it and loved it thanks Cajun blake.
That's an awesome looking dish. I've not seen one without an cream based sauces.
Quick question. I love seafood dishes, but never have the guts to cook them. I dont know if the local HEB has the crawfish tails. But if it does, do I get crawfish tails and clean them out and use those tails and boil them in water to make the 2 quarts of crawfish stock. And what about if I would like to add shrimp to it?
nothing to be afraid of brother, just get in the kitchen and follow the recipe directions..... cooking is very simple .
if possible, buy Louisiana crawfish as the tails are peeled and come in a 1 lb. vacuum sealed bag. LA crawfish are farm raised to be fuller and have more meat, as you can definitely taste the difference from imported crawfish. LA crawfish tails are already cleaned, peeled, and de-veined.
LA seafood processors have to have a permit and meet strict gov't regulations before their food product can be sold to the public.
Chinese crawfish have flooded the market are are much smaller and tatse "mealy". China does NOT regulate the farming industry and for all we know, these crawfish could be raised in a sewer with chemicals added.
On avg., peeled LA crawfish tails will cost $8 - $10 per pound, as Asian crawfish sell for $4 pound.
You can easily substitute shrimp yet buy local and avoid the imported stuff. You get what you pay for, and not worth ruining a meal by saving a few dollars to buy a lesser quality product.
Crawfish stock is made by boiling the shells & heads to get flavored water. It's not necessary for the etoufee' as you can use regular water. For shrimp etoufee', you can use the shells & heads to make a stock, or just use powdered shrimp which also makes a seafood stock.
Certified LA product, with permit number on packaging.
Last edited by Cajun Blake; 01-20-2011 at 02:18 PM.
Well, I tried it last Friday. It came out awesome. I didn't find Louisiana crawfish but cooked it anyway. I used 1 pound crawfish and 1 pound shrimp. I can't imagine how much better it would of come out if I would of used the non-imported crawfish. Thanks!!
You guys are all making me hungry.
Actually, using it as a sause over fish or steak sounds like a great idea.
THis is excellent over steak but a crawfish cream sauce is even better imo over a ribeye and only takes about 10 minutes to make.
sautee onion, garlic, bell pepper. add whipping cream and crawfish along with seasoning. reduce cream down to about half. Turn fire down to warm and add diced greenn onions and let mixture thicken. Pour over ribeye.
Last edited by RaginCagin; 02-10-2011 at 02:17 PM.
Ragin Cagin- I made this for my wife on V Day. It was absolutely outstanding. And easy to make.
Served it over rib-eyes. She couldn't get over how good it was. Said it was "restaurant quality".
glad you liked it man. I cooked 15 lbs of crawfish for some of our vendors last night in a etoufee and got a few packs left so i think i will have to make a little cream sauce for some steaks this weekend.
I got a WHOLE book of recipes when I was visiting with Blake last summer!!!!
We have ribeyes covered in etoufee' for our Christmas meal... We're done it the last 4 years and love it over the traditional turkey and dressing. The other entrees change a little, had stuffed flounder this last year. Delish!
Chicken and sausage instead of crawfish is awesome, then it become a sauce picante. One of my favorite meals.
these recipes sound so good! got to try one!
Bumping this to the top. I have just enough crawfish left over to make it.
Ragin' Blaze baked tilapia. Smothered in crawfish étouffée. Delicious!


text:
var events = require('../events.json');

exports.eventInfo = function(req, res) {
	var eventId = req.params.id;
	if (eventId == "random") {
		eventId = Math.floor(Math.random() * events.length) + 1;
	} else {
		eventId = parseInt(eventId);
	}

  	var event = events[eventId-1]; // of by one, our first project has index 0
  	res.json(event);
}

exports.all = function(req, res) {
  	var search = [];

		for (var i = 0; i < events.length; i++){
			if (events[i].created == false && events[i].joined == false){
				search.push(events[i]);
			}
		}
  	res.json(search);
}


Please upload your pet's vaccination files using the following form.
Enter the information for your pets. To add more rows, click on the plus sign next to the row.
I certify that the information contained in this client information sheet is correct to the best of my knowledge. I understand that Mutts & Co. LLC is not responsible for any incidents that may arise from an un-diagnosed medical condition.


text:
package freemarker.cache;

import freemarker.template.Configuration;

/**
 * Interface that can be implemented by {@link TemplateLoader}-s that maintain some
 * sort of internal state (i.e. caches of earlier lookups for performance
 * optimization purposes etc.) and support resetting of their state.
 */
public interface StatefulTemplateLoader extends TemplateLoader {
    /**
     * Invoked by {@link Configuration#clearTemplateCache()} to instruct this
     * template loader to throw away its current state and start afresh.
     */
    public void resetState();
}


text:
Project to widen access to demand modelling for EV chargepoints
The Geospatial Commission has published a report on how location data can support the rollout of electric vehicle (EV) chargepoints and announces a project to improve access to demand modelling.
To build a chargepoint network that can work for everyone, chargepoints must be rolled out where they are needed for today and tomorrow. Location data is key to building the right infrastructure in the right places, giving confidence to current and future EV owners that they can efficiently reach their destination.
The UK government has committed to ending the sale of new petrol and diesel vehicles by 2030. A comprehensive and reliable public EV chargepoint network is critical to greater adoption of EVs. The UK's charging network must expand rapidly so that it is dependable, fair and covers the entire country.
The report identifies how location data can help model future demand, select suitable sites, create a seamless consumer experience and track rollout.
To improve the use of location data, the report announces that the Geospatial Commission will launch a feasibility study into how to widen access to demand modelling, to provide planners with data-driven evidence to identify how many and what types of chargepoints need to go where and by when.
They will explore the creation of a geospatial dataset for off-street parking, to support planners to identify suitable sites for chargepoints and avoid wasted effort.
They will also support the government to make chargepoint data more Findable, Accessible, Interoperable and Reusable (FAIR) and track how market innovators use the data to create new services which enhance the consumer experience.
Baroness Neville Rolfe, Minister of State, Cabinet Office, said: "The UK must have an electric vehicle chargepoint network that works for the entire country. The Geospatial Commission's report highlights how location data can help build the right infrastructure in the right places. Drivers will then have the confidence to switch to EVs in the knowledge that they will be able to charge them easily and efficiently and not be delayed in reaching their destination wherever it is."
Jesse Norman, Minister of State, Department for Transport, said: "We want to ensure that the UK keeps its position as a world leader in decarbonising road transport. That is why the government is working to build an electric vehicle chargepoint network that works for everyone, everywhere. Location data is a crucial part in accelerating the transition to a sustainable transport system, and I look forward to working with the Geospatial Commission to realise our ambition for electric vehicles."


Today, Financeit pulled in a $17 million venture funding round that was led by new investors Pritzker family business interests advised by The Pritzker Organization and DNS Capital. Existing investors also contributed. The new installment boosts the Canada-based company's total funding to more than $38 million since it was established in 2011.
This comes less than a month after Financeit announced the acquisition of TD Bank Group's indirect home improvement financing assets. Today's installment will be used to fund the $339 million transaction, which included the purchase of more than 800 merchant dealer agreements. Once things have settled from the deal, Financeit will be servicing 45,000 existing TD consumer loans.
The secondary purpose of today's round will be to "support the ongoing needs of the company as it continues its rapid growth." In a press release, Michael Garrity, founder and CEO of Financeit, said, "As more merchants embrace the benefits of offering cloud and mobile-based financing options to their customers, Financeit expects to increase its sizable signature in this market. We continue to focus on innovation for our merchant partners and market growth through both organic tactics and acquisition." The company has already increased its lending activity in the home improvement industry by almost 2X since 2015.
Last month, Financeit made headlines when it recruited Ian Hanning, the CFO from Capital One Canada. Earlier this fall the company debuted its direct-to-consumer financing platform, Financeit Direct, which enables consumers to apply for funds via their mobile device. At FinovateFall 2014, Financeit made its U.S. debut in conjunction with FIS.


text:
Indonesia returns 49 Vietnamese fishermen
Indonesia on August 11 repatriated 49 Vietnamese fishermen who were arrested two to three months ago for accidentally fishing in Indonesia's seas.
VNA Thursday, August 11, 2016 18:52
Vietnamese rep. offices work to protect nationals' legitimate rights
Thursday, August 04, 2016 21:03
Fishermen in distress off Tonkin Gulf saved by China
Vietnam, Indonesia boost cooperation in fisheries
Indonesia returns Vietnamese fishermen
Tuesday, July 26, 2016 21:01
65 other Vietnamese fishermen repatriated at Soekarno Hatta International Airport on July 26 (Source: VNA)
Jakarta (VNA) – Indonesia on August 11 repatriated 49 Vietnamese fishermen who were arrested two to three months ago for accidentally fishing in Indonesia's seas.
Most of the fishermen, who were sent back to Vietnam via Soekarno Hatta International Airport, hail from the southern province of Ba Ria-Vung Tau, the Mekong Delta provinces Kien Giang and Vinh Long, and the central province of Quang Ngai.
The Vietnamese Embassy in Jakarta has exerted all-out efforts to bring Vietnamese fishermen detained in Indonesia home as soon as possible, whose numbers have been increasing in recent years.
The embassy plans to propose necessary measures to deal with the situation in the time ahead.
From the outset of this year, more than 500 Vietnamese fishermen have been captured by Indonesian forces for encroaching upon their seas, doubling the figure from the same period last year.
Indonesia has affirmed that it will continue its strict measures on fishing vessels operating illegally in its waters. Two months ago, the country destroyed 23 foreign fishing boats, some of which were from Vietnam.-VNA
Soekarno Hatta International Airport Vietnamese fishermen fishing boats Vietnamese Embassy Related stories Indonesia
Minster suggests considering school reopening
It is time to consider school reopening in a safe manner in line with Prime Minister Pham Minh Chinh's instructions on safe and flexible adaptation to and effective control of the COVID-19 pandemic, Minister of Education and Training Nguyen Kim Son told an online seminar on January 19.


text:
WPI Biomedical Engineer Helps Build Living Human Tracheas
Marsha Rolle collaborates with researchers at Case Western Reserve University to engineer a natural windpipe replacement, an alternative to the synthetic scaffolding now being used
Biomedical engineers at Worcester Polytechnic Institute (WPI) and Case Western Reserve University are growing tracheas by coaxing cells to form three distinct tissue types after assembling them into a tube structure—without relying on scaffolding strategies currently being investigated by other groups.
Successful trials and further research and development could someday allow surgeons the option of replacing a damaged or faulty trachea with a fully functional natural-tissue trachea in both adults and children, said Eben Alsberg, professor in biomedical engineering and orthopaedic surgery and director of the Alsberg Stem Cell & Engineered Novel Therapeutics (ASCENT) Lab at Case Western Reserve University.
Marsha Rolle, associate professor of biomedical engineering at WPI, and Hannah Strobel, a graduate student in biomedical engineering, are co-authors with Alsberg of a paper in the most recent issue of Advanced Science that details this step toward building living windpipe structures from self-assembled modules. Calvin Cotton, a professor of pediatrics and physiology and biophysics at Case Western Reserve, and nine researchers from Alsberg's lab, including co-first authors Anna Dikina and Daniel Alt, are the paper's other co-authors.
"The unique approach we are taking to this problem of trachea damage or loss is forming tissue modules using a patient's cells and assembling them like the childhood toy Legos into a more complex tissue," said Alsberg, who is leading the research.
The research was supported by a $1.9 million grant from the National Institutes of Health's National Institute of Biomedical Imaging and Bioengineering awarded to Alsberg and Rolle.
The trachea, commonly called the windpipe, is the airway between the voice box and the lungs. Patients may need a rebuilt trachea because of tumor resection or an injury that results in tracheal stenosis, a narrowing or constricting of the windpipe, which inhibits breathing. Damage to or loss of trachea tissue can be life-threatening or lead to a significantly reduced quality of life, Alsberg said.
Doctors have limited solutions for patients with damaged tracheas. If a portion of the trachea is damaged, for example, they can only surgically join the ends if less than half of the trachea is damaged in adults or less than 30 percent in children.
Other procedures, such as implanting a stent or simply clearing away tissue obstructing the airway, offer only short-term relief as the repaired tube tends to close off again after about a year. Recent tissue-engineering approaches using synthetic or natural materials as scaffolding for cells have been met with challenges.
Difficulties have included uniformly seeding cells on the scaffolding, recreating the multiple different tissue types found in the native trachea, tailoring the scaffolding degradation rate to equal the rate of new tissue formation, and recreating important contacts between cells because of the intervening scaffold.
Improving Upon Current Treatments
The trachea engineering strategy now being pursued at Case Western Reserve and WPI, however, wouldn't have those problems because it doesn't rely on a separate scaffold structure, Alsberg said.
According to Alsberg's research, a new trachea replacement must do three critical things to function properly:
maintain rigidity to prevent airway collapse when the patient breathes;
contain immunoprotective respiratory epithelium, the tissue lining the respiratory tract, which moistens and protects the airway and functions as a barrier to potential pathogens and foreign particles; and
integrate with the host vasculature, or system of blood vessels, to support epithelium viability.
The self-assembling rings developed by the Alsberg and Rolle labs meet all three of those requirements because they can fuse together to form tubes of both cartilage and "prevascular" tissue types. Prevascular refers to tissues potentially ready to participate in the formation of blood vessels, though not yet functional in that way.
The cartilage rings are formed by aggregating marrow-derived-stem cells in ring-shaped wells. Polymer microspheres containing a protein that induces the stem cells to become "chondrocytes," or cells that form cartilage, are also incorporated into the cell aggregates.
"The combination of creating self-assembled tissue ring modules with polymer microspheres to direct tissue fate is what makes it possible to create the complex multi-tissue structure that makes up the trachea," Rolle said. "This is truly a collaborative effort that brings together technologies developed in both of our labs to try to find a solution to an important problem."
The prevascular rings are composed of both these marrow-derived stem cells and endothelial cells, the thin layer of cells that line the interior of blood vessels.
The researchers then coat the tubes with epithelial cells to form multi-tissue constructs that satisfy all of those requirements: cartilage provides rigidity, epithelium serves the role of immunoprotection, and the vascular network would ultimately permit blood flow to feed and integrate the new trachea tissue.
Using this method, Alsberg, Rolle and their team have been able to engineer highly elastic "neo-tracheas" of various sizes, including tissues similar to human trachea. When these tracheas were implanted under the skin in mice, there was evidence the prevascular structures could join up with the host vascular supply.
"The hope is that a surgeon could implant the tissue tube into the body and it will grow and incorporate into the existing tissue," Alsberg said. "We're excited about this approach, as it may have broad applicability to bottom-up engineering of many other complex tissues and organs."
Marsha Whitney Rolle
Hannah Strobel


text:
/ Herman's Hermits
Herman's Hermits
from Wonderful World
No Milk Today
from The Very Best Of Herman's Hermits (Explicit)
No Milk Today (Re-Record)
from No Milk Today (Re-Record)
3:19 From kr 9,00
I'm into Something Good
There's A Kind Of Hush
from Best Of Herman's Hermits
Preview I'm into Something Good
I'm into Something Good Herman's Hermits 2019 From kr 41,00
Preview Highlights of Herman's Hermits
Highlights of Herman's Hermits Herman's Hermits 2017 From kr 55,00
Preview I'm in to Something Good
I'm in to Something Good Herman's Hermits 2016 From kr 49,00
Preview Sea Cruise Re-recorded version
Sea Cruise Re-recorded version Herman's Hermits 2014
Preview Rock n' Roll Masters: Herman's Hermits
Rock n' Roll Masters: Herman's Hermits Herman's Hermits 2014
Preview Herman's Hermits Greatest Hits (Rerecorded Version)
Herman's Hermits Greatest Hits (Rerecorded Version) Herman's Hermits 2013
Preview There's a Kind of Hush (UK Chart Top 40 - No. 7)
There's a Kind of Hush (UK Chart Top 40 - No. 7) Herman's Hermits 2020 From kr 6,00
Preview There's a Kind of Hush (Billboard Hot 100 - No 04)
There's a Kind of Hush (Billboard Hot 100 - No 04) Herman's Hermits 2020 From kr 6,00
I'm Into Something Good Herman's Hermits 2015
Preview There's a Kind of Hush (All over the World)
There's a Kind of Hush (All over the World) Herman's Hermits 2013 From kr 9,00
Preview Fortune Teller
Fortune Teller Herman's Hermits 2011
30 Albums & 36 Singles & EPs
Lulu, Roy Orbison, The Hollies, Bay City Rollers, Walker Brothers, Jackie Wilson
Pop, Pop Rock, 1960s


text:
Board index Weeaboo Central Anime Series
Aura Battler Dunbine (Seisenshi Dunbine)
Discuss various anime series here. And please, no manga spoilers...
Moderator: Judgement
Seisenshi Dunbine
Alternative Title(s): Aura Battler Dunbine
Status: Finished Airing
Air date: Feb 5, 1983 to Jan 21, 1984
Studio(s): Sunrise
Source: Original
Genre(s): Action, Sci-Fi, Adventure, Drama, Fantasy, Mecha
Synopsis: Shou Zama is an ordinary 18-year-old from Tokyo who finds himself summoned to the medieval fantasy world of Byston Well. Upon arrival, he is put into service under the ambitious lord Drake Luft, who seeks to greatly expand his power. Those like Shou who come from "Upper Earth" possess strong aura power and are ordered to pilot "Aura Battlers," insectoid mecha designed by a man named Shot Weapon, who also came from Upper Earth.
However, Shou's alliances quickly change when he meets Marvel Frozen, a young woman who has decided to rebel against Drake's political agenda. As he realizes the lord's true intentions, the boy chooses to join the fight against Drake and team up with Neal Given, who leads the resistance movement. The resistance isn't alone—Riml, daughter of their enemy and Neal's secret love, aids their efforts, hoping to escape from her father's clutches. As Shou finds himself fighting alongside his new comrades, they put their lives on the line to prevent the villainous Drake from taking over Byston Well before it's too late.
(Source: myanimelist.net)
Return to "Anime Series"


text:
Shatila Camp (Lebanon)
Shatila Refugee Camp (Lebanon)
A view over Shatila camp. (D. Sánchez)
A community leader by one of the water tanks. (I. Polochova/MSF)
Interior shot of a convenient store for the local community. (I. Polochova/MSF)
A narrow alley with dangerous electric cables hanging above. (I. Polochova/MSF)
Shatila's streets have little room to dispose garbage in a safe way. (I. Polochova/MSF)
A few of the locals use horses for transport. (I. Polochova/MSF)
An advert for low prices of goods. (I. Polochova/MSF)
Electrical wires, old signs, and political posters hang over the streets. (I. Polochova/MSF)
Mothers and their children in the waiting room of a primary health clinic. (I. Polochova/MSF)
A resident hanging her laundry on her apartment building's roof. (I. Polochova/MSF)
The Shatila refugee camp was set up by the International Committee of the Red Cross in 1949 (officialised in 1954) as a temporary space for the hundreds of Palestinian refugees who fled from the north of historic Palestine during the period known as the "nakba" in 1947-1948. The people remained there ever since, generation after generation. Shatila has transformed from a collection of temporary tents to a poor, run-down neighbourhood, located today just four kilometres from the Beirut downtown area.
One of the most tragic episodes for the camp occurred during the Lebanese civil war in September 1982, the now infamous Sabra-Shatila massacre, which lasted several days and resulted in the deaths of an estimated 3000 people.
Since the Syrian crisis began in 2011, a large number of Syrian refugees and Palestinian-Syrians have arrived to Shatila. Moreover, the camp also became a home for poor, vulnerable Lebanese and other nationalities.
Prior to the influx of refugees to the camp, the population was estimated between 7,000 to 15,000 people. Now the estimates are around 30,000 people. Around a quarter of the population are Palestinians, more than half are Syrians, while the rest are Lebanese and various other nationalities. All of them are cramped within a half square kilometre.
Shatila was and continues to be considered one of the most densely populated spaces in the world.
Living conditions are extremely bad, with poor water & sanitation, regular power cuts, and very limited access to the few services that are provided locally by the United Nations Relief and Works Agency for Palestine Refugees in the Near East (UNRWA) and various NGOs.
MSF began work in Shatila in September 2013. The international humanitarian and medical organization currently offers free of charge medical services in Shatila via a primary health care clinic and a women's health centre to address the needs of vulnerable populations in the south of Beirut. The majority of patients are Syrian refugees and Palestinian refugees from Syria.
A total of 6,000 to 8,000 consultations per month are managed by MSF staff, with the majority related to paediatric patients, followed by non-communicable diseases (hypertension, diabetes, etc.), while the women's health center (WHC) does around 280 deliveries per month.
share Donate
Visiting family
Where refugees come from: The Palestinian refugees come from the northern parts of historical Palestine. The Syrian-Palestinians are mainly from the Yarmouk refugee camp in Damascus, while most of the Syrians now living in Shatila come from the major cities in Syria that were devastated during the early years of the crisis.
Other nearest refugee camps: The Mar Elias refugee camp, another refugee camp turned into a neighbourhood, is around 2.6 kilometres north west of Shatila, while the Bourj al-Barajneh camp is 4.3 kilometres south east.
What do people say about Shatila Camp
A 16 year old Syrian mother
The family and I used to regularly visit Lebanon before the war to spend some time as tourists. However, when we once again traveled here, we could not return back to our home in Syrian governorate of Idlib. When the crisis in Syria began, Idlib, like many other regions, was not a safe place for us. We were forced to stay in Lebanon. That was five years ago and since that day, we have been unable to return home... ..read more
Umm Tarek
30 year old mother of five children
I am 30 years old. I am married with five children. I am from a small village in northern Syria. I came to Lebanon four months ago. We left our home because of the heavy shelling and airstrikes. We slept outside for four days with the children. We suffered from hunger, thirst, cold, and shelling. Then we all decided to leave to Lebanon. ..read more
Mahmoud Darwish Sallam
MSF social worker in Shatila
I started working with MSF four months ago as a social worker, networking and interacting with the community in terms of all the services for the patients. I also do field networking with the NGOs, and we deal with Syrian, Palestinian, and even Iraqi refugees – or anyone else for that matter. ..read more
Foued Gamoud
MSF Field Coordinator, Shatila
Life in the Palestinian camp of Shatila is very difficult. It is not a closed camp; people can move in and out freely. But Palestinians are not allowed to own anything in Lebanon, nor to have a business outside of the camps, and they have limited access to work in the Lebanese public and private sectors. They also have little to no access to the Lebanese public healthcare system. Palestinians in Lebanon are not granted basic civil rights, so they stay in this neighbourhood because it's more affordable for them to live here and because they would prefer to live among other Palestinians to feel that they are part of a community. ..read more
Ali Othman
49 years old, a camp leader
There are around 30 thousand people living in an area of about half square kilometres. Because Shatila cannot expand horizontally it grows vertically. A few years ago, the population density in Shatila was smaller but after Syrian crisis began many Syrian refugees moved into the camp. There are also vulnerable Lebanese living here. ..read more
Arraf Khalil
Camp resident
I came from the outskirts of Aleppo. I have five children; three boys and two girls. We've been living in Shatila for around two and a half years to escape the insecurity. There was the Syrian army, then the Free Syrian Army, then ISIS, and then the Free Syrian Army again. It was never calm. ..read more
Chirine Khodor
My name is Chirine Khodor. The past years have not been easy. If I had to describe my time since leaving Syria, I would say that I have one good day for every bad month. I try my best to share these good days with my family. When we can, we go to the public beach or for a picnic. ..read more
Rateb Khodor
My name is Rateb Khodor, I'm a refugee from the Rif Dimashq region of Syria and I live in Shatila camp, Beirut, with my wife and three children. We've lived here for three years. ..read more
Facilities in Shatila Camp
Drinking water is of poor quality and very unpredictably available in Shatila. Most of the water coming out of the taps in the apartments is salty, can turn metal into rust, and is heavily contaminated with parasites. The population has to rely on water brought in by camp authorities and sold through local vendors. Food is bought from convenience stores, vegetable and fruit markets that lie on the fringes of the neighbourhood, as well as from the bakeries, catering services, restaurants established within the camp, or it is obtained through food donations by NGOs and other charity organizations. However, food insecurity is a risk due to the lack of adequate income for some of the camp's residents.
Internet services are available, but it is very slow and mainly provided by unofficial internet service provider companies. The services are affected by frequent and long electricity cuts. Many of the residents have mobile phones, yet the reception is very weak or non-existent in many spots within Shatila.
There are two main schools for Palestinians run by the UN, as well as smaller kindergartens and classes that are mainly provided for Syrian refugees and other residents of the camp by various local NGOs. The teaching staff tends to work double time since classes are severely overcrowded.
In Shatila, the residents' health are affected by the damp, dense living quarters, as well as the low hanging electrical wires that dangerously criss-cross above people's heads, and often break apart and fall on the streets – with fatal results – during rain storms. There are two non-MSF health centres in the camp, as well as private clinics and pharmacies, and hospitals outside the neighbourhood – but only for those who can afford the high-priced services since non-Lebanese do not have access to public healthcare. MSF currently offers free of charge medical services in Shatila via a primary health care clinic and a women's health centre to address the needs of vulnerable populations in the south of Beirut, mainly Syrian refugees and Palestinian refugees from Syria. The primary health care clinic offers paediatric care for children under 15 years of age, including vaccinations. In addition, the clinic provides chronic diseases treatment, mental health counseling, health promotion activities, and patient education and support activities. The women's health centre offers sexual reproductive health services that include pre- and post-natal care, and family planning. This centre provides a place for safe deliveries, with complicated pregnancy cases being referred to secondary care level hospitals.
Like any poor neighbourhood, apartments are equipped with bathrooms but are constantly affected by water cuts and poor quality, highly saline water.
Shatila is an open neighbourhood, and its security is handled by various Palestinian factions. The main security problem, like any impoverished neighbourhood, results from poverty or the eruption of disputes between families and/or individuals that can escalate quickly.
The residents of Shatila strive to create a life in what feels like an eternal limbo. They have built businesses, community gatherings, and even a museum to showcase their history, culture, and art. There are music shows, Ramadan dinners, and other events that have been organised by the residents or local NGOs to make life in this poor, down-trodden neighbourhood bearable.
Reasons why people choose Shatila Camp
No choice
The Palestinians did not have any choice when they fled north from historical Palestine in the late 1940s. Similarly, many of the refugee population today have come to live in Shatila due to a lack of options to live elsewhere.
The Syrian and Syrian-Palestinian refugees, as well as other nationalities, live in Shatila due to the low prices of rent. Costs range from $150 to $300, which is still a hefty sum for many.
Some may have relatives already living in the neighbourhood.
Number of people living in this camp: ~ 30,000
The Shatila refugee camp was set up by the International Committee of the Red Cross in 1949 (officialised in 1954) as a temporary space for the hundreds of Palestinian refugees who fled from the north of historic Palestine during the period known as the "nakba" in 1947-1948. The people remained there ever since, generation after generation. Shatila has transformed from a collection of temporary tents...
Look now!
Nduta Camp (Tanzania)
Despite its scale and huge population, Nduta camp is not widely known. Situated in Tanzania`s north-western Kigoma region, close to the border with Burundi, it is now the size of a small town. Though the number of new arrivals has decreased since April 2017, prior to that month there has been a huge influx in Burundian refugees seeking safety in the camp, which has become severely overcrowded....
Domiz Camp (Iraq)
Located 60 kilometres away from the Syrian border, the refugee camp of Domiz 1, established in response to an influx of refugee from northern Syria, has quickly turned into a "Little Syria" within Iraqi Kurdistan. With a population of more than 32,000 currently spread over 1,142,500 m²; Domiz 1 is the biggest refugee camp in Iraq.The camp was hastily established on site of a former army base in Dohuk...
Dadaab Camp (Kenya)
The Dadaab refugee camp complex is situated in northeastern Kenya, near the border with Somalia. Until early 2017, it consisted of five refugee camps. However, one of the camps, Kambioos, which was also the newest, was recently closed as refugees began returning to Somalia and the few remaining moved into the other camps.Dadaab was established in the year 1991 following the beginning of the civil war...
Greco-Serbian Route
The Greek-Serbian route is a major path for people attempting to escape war, persecution, poverty, and instability to reach asylum in the European continent, particularly when there are no safe alternatives in place. While the pathway has been used for decades, in recent times the large influx of people moving through the trail has drawn significant spotlight. Until March 2016, thousands were arriving on Greek...
Click here for more information on what Médecins Sans Frontières (MSF) is doing worldwide
65,6 million people had to flee in 2017
Let's care about their access to basic needs
Welcome to the World of Camps website. This website was created to raise awareness about people's living conditions in refugee camps. The website looks like a travel site but it is not a real booking site. The information comes from Doctors Without Borders / Médecins Sans Frontières (MSF) platforms and publications, as well as MSF staff and MSF patients living and working in refugee camps.
FAQ for WORLD OF CAMPS
1. Why have you chosen to present refugee camps in a travel website format?
Many of us use travel websites to find the best options for our holidays and discover practical information about the places we plan to visit. This website uses a travel website format - a format often utilized by many consumers as a luxury of choice - as an opportunity to find out about places we are less likely to visit: the refugee camps which host people who have no other options or alternatives. Our aim is to raise awareness about the lives of refugees, noting their reasons for being forced to flee or migrate from their home countries and noting how many of them are being forced to stay in deplorable conditions because of a range of barriers.
2. Do you want me to visit the refugee camps?
No. The aim is not for you to visit the camps in person, but to understand the challenges faced by people living and working in them.
3. Why does Médecins Sans Frontières (MSF) take care of refugees and why has it created this website?
Médecins Sans Frontières provides assistance for people in distress and for the victims of conflict, disease outbreaks and natural and manmade disasters. As a medical humanitarian organization, many of our projects are located in refugee or internal displaced camps across the globe. We try to provide the people with everything they need from psychological care to lifesaving nutrition, including setting up hospitals in refugee camps, helping women give birth safely, vaccinating children to prevent epidemics, and providing access to safe drinking water. We also work to raise awareness and encourage debate about humanitarian crises. One of our core principles is to speak out about the plight of the people we help. We created this website to raise awareness about the issues facing refugees.
4. Does this website provide a service to people who are seeking refuge?
People running away from danger very often do not have the choice or resources to decide where they will go, and therefore they flee to the nearest and safest place. Some people cannot even move freely. The aim of this website is to simply show the complexity and conditions a refugee's life in camps: their living conditions, the decisions people take before they flee, and other matters related to living and surviving in a camp.
5. Where did you get the information for this website?
The information on the website came from MSF staff and MSF patients in each of the selected refugee camps, as well as information shared by MSF.
6. Why did you select these particular camps?
We chose these particularly camps in different countries to highlight the similarities and differences between refugees' experiences across continents. Each camp has a unique character and context. Shatila, in Lebanon, was established in 1949, making it one of the world's longest-established refugee camps. Dadaab, in Kenya, is one of the biggest camps in the world akin to a complex of refugee camps; Domiz, in Iraq, is one of the newest, constantly evolving; Nduta, in Tanzania, is one of the least known, away from the media spotlight. Finally, the settlements on the refugee trail through Greece and Serbia show the contemporary face of refugee camps in 21st century Europe.
7. Why should I care?
Millions of people across the world have been forced to leave their homes due to wars, political unrest, natural disasters or extreme poverty. Like everyone else, they have dreams, ambitions, concerns, needs and desires. Anyone can be a refugee regardless of their background. At MSF, we believe that every person deserves dignity, medical care and the recognition of their humanity, and we hope that you believe it too.
8. I want to help – what can I do?
MSF teams are providing care for refugees all around the world and you can help by supporting our work. There are lots of ways you can support us: by volunteering to join our teams, by donating money to MSF, by raising awareness about the issues facing refugees, or by discussing the topic with friends and family. You can also support other humanitarian organisations which deliver aid to refugees. If you like this website, please share it on social media. You can also follow MSF on Facebook, Twitter, Instagram etc. Every type of support counts. Many refugees live in difficult conditions, frequently without sufficient food, water, shelter or medical care. Our MSF teams working in refugee camps around the world provide these essentials. For that aid to continue, we rely on support and funding from the public. Please consider clicking on the donation button and giving what you can to support our work or view links to other MSF websites about the topic.
What else to explore


Buying new siding for your home, whether you are remodeling or building, is a big decision that requires you to make a number of choices. For instance, you will have to decide what contractor to choose, what siding product is right for your home, what color you want it to be, what the trim will look like, and more. As you walk through all of your options, one mistake you should never make is to pass up this great opportunity to add insulation to the outside walls of your home.
Q: Why do I need insulation on the outside of my home?
A: Exterior insulation helps to break your home's thermal bridge, an energy leak in the walls?that you might not even know is there. Check out this house as an example. Thermal imaging helps reveal where heat is escaping from this house (yellow, orange and red indicates warmth while blue and green is cooler). As you can see, the yellow lines are revealing this hidden energy leak. Heat from inside the home is bypassing the pink insulation in the wall cavities and escaping to the cool outdoors across the wooden studs and other framing members in the wall. This is what building scientists call thermal bridging.
Q: How dramatic is the heat loss due to thermal bridging?
A: The studs and wooden framing members that causes thermal bridging account for 25% of your wall surface. This means that if you took all of the studs in your home and pushed them together, it would be like having one entire wall of your home with no insulation at all!
Q: If I break the thermal bridge with exterior insulation, how much will it reduce my energy bills?
A: As you can see from this after picture, the home from before has now broken the thermal bridge with exterior insulation. The big energy leaks are eliminated, which helps to reduce the homeowner's utility bills. Every home is different, which makes it hard to estimate how much you will save on your utility bills every month by installing exterior insulation under your new siding. The amount you save will vary based on your location, your home and the products you choose. We suggest having a certified energy rater perform an energy evaluation on your home to give you an accurate representation of how much you can expect to save.
Q: Are there additional benefits of adding insulation, beyond energy savings?
A: There are plenty of other benefits to adding exterior insulation under your new siding. Rigid siding insulation will help to level out the wall surface, enhancing the appearance of your new siding. Some siding insulation products provide protection against moisture damage and pest infestation. In addition, there are other siding insulation products contoured to fit the unique profile of the siding you choose. This helps to provide more support to the siding panel, allowing for wider, flatter profiles in some cases as well as enhanced durability.
When you're ready to have new siding installed on your home, don't miss the opportunity to easily add insulation to the exterior of your home. You will enhance the performance and energy efficiency of your siding for now and years to come!


We are applying patch on Oracle 12c and we got Prerequisite check "CheckActiveFilesAndExecutables" failed error. By looking the error we can see that files are active and used by some active processes.
[Sep 6, 2018 6:56:10 PM] [SEVERE] OUI-67073:UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
[Sep 6, 2018 6:56:10 PM] [INFO] Stack Description: java.lang.RuntimeException: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Caused by: java.lang.RuntimeException: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Caused by: oracle.opatch.PrereqFailedException: Prerequisite check "CheckActiveFilesAndExecutables" failed.
[Sep 6, 2018 6:55:49 PM] [INFO] Prerequisite check "CheckActiveFilesAndExecutables" failed.
Either you stop the processes or kill the process. Once the processes is stopped you can proceed with opatch again and it should be successful.
Note that after patch is successful check for "SEVERE" errors if any in the log file.
Very nice information. I would like to appreciate you. Keep it up!
I read this post. This post containing such a good post. Thanks for sharing. We are offering the services of Buddhist circuit train. You can visit the website for more information.
Chandigarh to Shimla Taxi Service then contact 1313 taxi chandigarh.