text:
Q: Missing member in AutoMapper 2.1.265 In AutoMapper 2.0 I used Profiles to configure my mapping.  I useSourceMemberNameTransformer and DestinationMemberNameTransformer to match my source and destination property names.
In 2.1.265 these properties are no longer on Profile.  Does anyone know why they were removed?  But more importantly, how can I duplicate this functionality.
Edit
I've been looking at the SourceMemberNamingConvention and DestinationMemberNamingConvention, but I cannot find any documentation as to how those work.  Does anyone have experience using a custom INamingConvention?
Edit 2
Source members are generated from a 3rd party database.  Typically they use all lowercase column names with underscores between words.  Sometimes they leave out underscores, sometimes they throw in random capitalization.
Destination members try to follow .NET naming conventions as much as possible.  Underscores were removed, the first character following the underscore were capitalized.  Additional case changes were made to make member names easier to read.
To solve this, I set
SourceMemberNameTransformer = name => name.Replace("_", "").ToUpper()
DestinationMemberNameTransformer = name => name.ToUpper()

Edit 3
More information for people from the future.
I inspected the source to see how INamingConvention is used.  The way it is designed it a little misleading.  The interface is befined as
public interface INamingConvention
{
    Regex SplittingExpression { get; }
    string SeparatorCharacter { get; }
}

However, AutoMapper does not user the full definition of the interface for both SourceMemberNamingConvention and DestinationMemberNamingConvention
It takes each member of the destination type and applies DestinationMemberNamingConvention.SplittingExpression.  It then takes those match parts and calls string.Join using SourceMemberNamingConvention.SeparatorCharacter.  It then attempts to match the source type members to the destination type members.
This is a very high level overview of what is does and is not an attempt to describe the full functionality.  It is merely meant to show how INamingConvention is used and to show that SourceMemberNamingConvention.SplittingExpression and DestinationMemberNamingConvention.SeparatorCharacter are never used.
If you are unable to transform the destination members using this strategy, then you must manually map the properties as nemesv's answer suggests.

A: It seams this feature is removed see GitHub.
EDIT Rewrite after question update:
Maybe the built in LowerUnderscoreNamingConvention solves your problem.
I've tested with this code:
Mapper.Initialize(c =>
    c.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention());
Mapper.CreateMap<Source, Dest>();
var test = Mapper.Map<Dest>(
    new Source() { test_Another_Prop = "test", test_this_prop = "test" });

Where Source and Dest:
public class Source
{
    public string test_this_prop { get; set; }
    public string test_Another_Prop { get; set; }
    public string test_wronglynamedprop { get; set; }
}

public class Dest
{
    public string TestThisProp { get; set; }
    public string TestAnotherProp { get; set; }
    public string TestWronglyNamedProp { get; set; }
}

If it doesn't cover all your cases you can check how it's implemented in the source and create your own convetion.
EDIT: After comment:
When the convention doesn't apply you can fall back to manually override the special cases:
Mapper.CreateMap<Source, Dest>()
    .ForMember(d => d.TestWronglyNamedProp, c => c
    .MapFrom(s => s.test_wronglynamedprop));

I see no other option in the current version. Because as far as see nothing replaces the MemberNameTransformers.


I'm not sure whether it's the scream of the slitting machines where steel on steel set's your teeth on edge, or the incessant thudding of steel presses, or my penchant for rock music that's done the damage , but after 30 odd years in Industry I am a bit "Mutt and Jeff".
Now, I am not saying that it does not occasionally have its advantages, it allows me a bit of leeway in what I choose to hear, but it can be bloody infuriating. I have said yes so often to "er indoors" only to find that I have just agreed to paint the fence, or put more bloody shelves up. I can't hear the "leakage" from the i-pod of the student sat next to me on the train, but then again I can't hear telly unless I sit on top of it.
Now it might be a bit late for me, but I am grateful to Joanna from Edelman, for alerting me to the upcoming Stop that Noise' awareness campaign which takes place next week from 24-28 October.
Around a third of employees in Europe are exposed to potentially dangerous levels of noise for at least a quarter of their time at work. Noise induced hearing loss is one of the most common occupational diseases in Europe and a survey by the UK's Medical Research Council estimated that around 500,000 people in the UK suffer from work-related hearing difficulties. In the metal manufacturing and metalworking world, a study in France showed that a third of industrial deafness cases were from this sector.
Despite progress in health and safety, I still see many workers in noisy factories, without ear protectors, it may seem unimportant when you are young, but deafness is a "bugger" when you get older.
Get "clued up" and go and check the campaign out here.


text:
package com.salesforce.samples.restexplorer;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TabHost;
import android.widget.TextView;

import com.salesforce.androidsdk.accounts.UserAccountManager;
import com.salesforce.androidsdk.app.SalesforceSDKManager;
import com.salesforce.androidsdk.rest.ApiVersionStrings;
import com.salesforce.androidsdk.rest.ClientManager;
import com.salesforce.androidsdk.rest.ClientManager.RestClientCallback;
import com.salesforce.androidsdk.rest.RestClient;
import com.salesforce.androidsdk.rest.RestClient.AsyncRequestCallback;
import com.salesforce.androidsdk.rest.RestRequest;
import com.salesforce.androidsdk.rest.RestRequest.RestMethod;
import com.salesforce.androidsdk.rest.RestResponse;
import com.salesforce.androidsdk.rest.files.FileRequests;
import com.salesforce.androidsdk.security.PasscodeManager;
import com.salesforce.androidsdk.util.EventsObservable;
import com.salesforce.androidsdk.util.EventsObservable.EventType;
import com.salesforce.androidsdk.util.UserSwitchReceiver;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import okhttp3.FormBody;
import okhttp3.RequestBody;

/**
 * Main activity for REST explorer.
 */
public class ExplorerActivity extends Activity {

	private static final String DOUBLE_LINE = "==============================================================================";
	private static final String SINGLE_LINE = "------------------------------------------------------------------------------";

	private PasscodeManager passcodeManager;
	private String apiVersion;
	private RestClient client;
	private TextView resultText;
    private UserSwitchReceiver userSwitchReceiver;
    private TabHost tabHost;
    private LogoutDialogFragment logoutConfirmationDialog;

	// Use for objectId fields auto-complete.
	private TreeSet<String> knownIds = new TreeSet<String>();

	RestClient getClient() {
		return client;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		passcodeManager = SalesforceSDKManager.getInstance().getPasscodeManager();
		apiVersion = ApiVersionStrings.getVersionNumber(this);
		setContentView(R.layout.explorer);
		tabHost = (TabHost) findViewById(android.R.id.tabhost);
		tabHost.setup();
		addTab("versions", R.string.versions_tab, R.id.versions_tab);
		addTab("resources", R.string.resources_tab, R.id.resources_tab);
		addTab("describe_global", R.string.describe_global_tab, R.id.describe_global_tab);
		addTab("metadata", R.string.metadata_tab, R.id.metadata_tab);
		addTab("describe", R.string.describe_tab, R.id.describe_tab);
		addTab("create", R.string.create_tab, R.id.create_tab);
		addTab("retrieve", R.string.retrieve_tab, R.id.retrieve_tab);
		addTab("update", R.string.update_tab, R.id.update_tab);
		addTab("upsert", R.string.upsert_tab, R.id.upsert_tab);
		addTab("delete", R.string.delete_tab, R.id.delete_tab);
		addTab("query", R.string.query_tab, R.id.query_tab);
		addTab("search", R.string.search_tab, R.id.search_tab);
		addTab("manual", R.string.manual_request_tab, R.id.manual_request_tab);
		addTab("search_scope_and_order", R.string.search_scope_and_order_tab, R.id.search_scope_and_order_tab);
		addTab("search_result_layout", R.string.search_result_layout_tab, R.id.search_result_layout_tab);
		addTab("owned_files_list", R.string.owned_files_list_tab, R.id.owned_files_list_tab);
		addTab("files_in_users_groups", R.string.files_in_users_groups_tab, R.id.files_in_users_groups_tab);
		addTab("files_shared_with_user", R.string.files_shared_with_user_tab, R.id.files_shared_with_user_tab);
		addTab("file_details", R.string.file_details_tab, R.id.file_details_tab);
		addTab("batch_file_details", R.string.batch_file_details_tab, R.id.batch_file_details_tab);
		addTab("files_shares", R.string.file_shares_tab, R.id.file_shares_tab);
		addTab("add_file_share", R.string.add_file_share_tab, R.id.add_file_share_tab);
		addTab("delete_file_share", R.string.delete_file_share_tab, R.id.delete_file_share_tab);

		// Makes the result area scrollable.
		resultText = (TextView) findViewById(R.id.result_text);
		resultText.setMovementMethod(new ScrollingMovementMethod());
        userSwitchReceiver = new ExplorerUserSwitchReceiver();
        registerReceiver(userSwitchReceiver, new IntentFilter(UserAccountManager.USER_SWITCH_INTENT_ACTION));
        logoutConfirmationDialog = new LogoutDialogFragment();
	}

	@Override
	public void onResume() {
		super.onResume();

		// Hides everything until we are logged in.
		findViewById(R.id.root).setVisibility(View.INVISIBLE);

		// Brings up the passcode screen if needed.
		if (passcodeManager.onResume(this)) {
			String accountType = SalesforceSDKManager.getInstance().getAccountType();

			// Gets a rest client.
			new ClientManager(this, accountType, SalesforceSDKManager.getInstance().getLoginOptions(),
					SalesforceSDKManager.getInstance().shouldLogoutWhenTokenRevoked()).getRestClient(this, new RestClientCallback() {

				@Override
				public void authenticatedRestClient(RestClient client) {
					if (client == null) {
						SalesforceSDKManager.getInstance().logout(ExplorerActivity.this);
						return;
					}
					ExplorerActivity.this.client = client;

					// Shows everything.
					findViewById(R.id.root).setVisibility(View.VISIBLE);
				}
			});
		}
	}

    @Override
    public void onPause() {
    	super.onPause();
    	passcodeManager.onPause(this);
    }

    @Override
    public void onDestroy() {
    	unregisterReceiver(userSwitchReceiver);
    	super.onDestroy();
    }

	@Override
	public void onUserInteraction() {
		passcodeManager.recordUserInteraction();
	}

	/**
	 * Returns the logout dialog fragment (used mainly by tests).
	 *
	 * @return Logout dialog fragment.
	 */
	public LogoutDialogFragment getLogoutConfirmationDialog() {
		return logoutConfirmationDialog;
	}

	private void addTab(String tag, int titleId, int tabId) {
		tabHost.addTab(tabHost.newTabSpec(tag).setIndicator(getString(titleId))
				.setContent(tabId));
	}

	/**************************************************************************************************
	 *
	 * Buttons click handlers
	 *
	 **************************************************************************************************/

	/**
	 * Called when the "print info" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onPrintInfoClick(View v) {
		printInfo();
	}

	/**
	 * Called when the "clear" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onClearClick(View v) {
		resultText.setText("");
	}

	/**
	 * Called when the "get versions" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onGetVersionsClick(View v) {
		sendRequest(RestRequest.getRequestForVersions());
	}

	/**
	 * Called when the "Switch Account" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onSwitchAccClick(View v) {
		final Intent i = new Intent(this, SalesforceSDKManager.getInstance().getAccountSwitcherActivityClass());
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		this.startActivity(i);
	}

	/**
	 * Called when the "get resources" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onGetResourcesClick(View v) {
		sendRequest(RestRequest.getRequestForResources(apiVersion));
	}

	/**
	 * Called when the "describe global" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onDescribeGlobalClick(View v) {
		sendRequest(RestRequest.getRequestForDescribeGlobal(apiVersion));
	}

	/**
	 * Called when the "metadata" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onGetMetadataClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.metadata_object_type_text))
				.getText().toString();
		sendRequest(RestRequest.getRequestForMetadata(apiVersion, objectType));
	}

	/**
	 * Called when the "describe" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onDescribeClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.describe_object_type_text))
				.getText().toString();
		sendRequest(RestRequest.getRequestForDescribe(apiVersion, objectType));
	}

	/**
	 * Called when the "create" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onCreateClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.create_object_type_text))
				.getText().toString();
		final Map<String, Object> fields = parseFieldMap(R.id.create_fields_text);
		RestRequest request = null;
		try {
			request = RestRequest.getRequestForCreate(apiVersion, objectType,
					fields);
		} catch (Exception e) {
			printHeader("Could not build create request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

	/**
	 * Called when the "retrieve" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onRetrieveClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.retrieve_object_type_text))
				.getText().toString();
		final String objectId = ((EditText) findViewById(R.id.retrieve_object_id_text))
				.getText().toString();
		final List<String> fieldList = parseCommaSeparatedList(R.id.retrieve_field_list_text);
		RestRequest request = null;
		try {
			request = RestRequest.getRequestForRetrieve(apiVersion, objectType,
                    objectId, fieldList);
		} catch (Exception e) {
			printHeader("Could not build retrieve request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

	/**
	 * Called when the "update" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onUpdateClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.update_object_type_text))
				.getText().toString();
		final String objectId = ((EditText) findViewById(R.id.update_object_id_text))
				.getText().toString();
		final Map<String, Object> fields = parseFieldMap(R.id.update_fields_text);
		RestRequest request = null;
		try {
			request = RestRequest.getRequestForUpdate(apiVersion, objectType,
                    objectId, fields);
		} catch (Exception e) {
			printHeader("Could not build update request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

	/**
	 * Called when the "upsert" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onUpsertClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.upsert_object_type_text))
				.getText().toString();
		final String externalIdField = ((EditText) findViewById(R.id.upsert_external_id_field_text))
				.getText().toString();
		final String externalId = ((EditText) findViewById(R.id.upsert_external_id_text))
				.getText().toString();
		final Map<String, Object> fields = parseFieldMap(R.id.upsert_fields_text);
		RestRequest request = null;
		try {
			request = RestRequest.getRequestForUpsert(apiVersion, objectType,
                    externalIdField, externalId, fields);
		} catch (Exception e) {
			printHeader("Could not build upsert request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

	/**
	 * Called when the "delete" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onDeleteClick(View v) {
		final String objectType = ((EditText) findViewById(R.id.delete_object_type_text))
				.getText().toString();
		final String objectId = ((EditText) findViewById(R.id.delete_object_id_text))
				.getText().toString();
		sendRequest(RestRequest.getRequestForDelete(apiVersion, objectType,
				objectId));
	}

	/**
	 * Called when the "query" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onQueryClick(View v) {
		final String soql = ((EditText) findViewById(R.id.query_soql_text)).getText()
				.toString();
		RestRequest request = null;
		try {
			request = RestRequest.getRequestForQuery(apiVersion, soql);
		} catch (UnsupportedEncodingException e) {
			printHeader("Could not build query request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

	/**
	 * Called when the "search" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onSearchClick(View v) {
		final String sosl = ((EditText) findViewById(R.id.search_sosl_text))
				.getText().toString();
		RestRequest request = null;
		try {
			request = RestRequest.getRequestForSearch(apiVersion, sosl);
		} catch (UnsupportedEncodingException e) {
			printHeader("Could not build search request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

	/**
	 * Called when the "manual" button is clicked.
	 *
	 * @param v View that was clicked.
	 */
	public void onManualRequestClick(View v) {
		RestRequest request = null;
		try {
			final EditText editText = (EditText) findViewById(R.id.manual_request_path_text);
			final String hintText = String.format(getResources().getString(R.string.path_hint),
					ApiVersionStrings.getVersionNumber(this));
			editText.setHint(hintText);
			final String path = editText.getText().toString();
			final RequestBody paramsEntity = getParamsEntity(R.id.manual_request_params_text);
			final RestMethod method = getMethod(R.id.manual_request_method_radiogroup);
			request = new RestRequest(method, path, paramsEntity);
		} catch (UnsupportedEncodingException e) {
			printHeader("Could not build manual request");
			printException(e);
			return;
		}
		sendRequest(request);
	}

    /**
     * Called when the "search scope and order" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onSearchScopeAndOrderClick(View v) {
        RestRequest request = null;
        try {
            request = RestRequest.getRequestForSearchScopeAndOrder(ApiVersionStrings.getVersionNumber(this));
        } catch (UnsupportedEncodingException e) {
            printHeader("Could not build search scope and order request");
            printException(e);
            return;
        }
        sendRequest(request);
    }

    /**
     * Called when the "search result layout" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onSearchResultLayoutClick(View v) {
        RestRequest request = null;
        final List<String> objectList = parseCommaSeparatedList(R.id.search_result_layout_object_list_text);
        try {
            request = RestRequest.getRequestForSearchResultLayout(ApiVersionStrings.getVersionNumber(this), objectList);
        } catch (UnsupportedEncodingException e) {
            printHeader("Could not build search result layout request");
            printException(e);
            return;
        }
        sendRequest(request);
    }

    /**
     * Called when the "owned files list" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onOwnedFilesListClick(View v) {
        RestRequest request = null;
		final String userId = ((EditText) findViewById(R.id.owned_files_list_user_id_text))
				.getText().toString();
        final String pageStr = ((EditText) findViewById(R.id.owned_files_list_page_text)).getText().toString();
        try {
            int page = Integer.parseInt(pageStr);
            request = FileRequests.ownedFilesList(userId, page);
        } catch (NumberFormatException e) {
            printHeader("Could not build owned files list request");
            printException(e);
            return;
        }
        sendRequest(request);
    }

    /**
     * Called when the "files in users groups" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onFilesInUsersGroupsClick(View v) {
        RestRequest request = null;
        final String userId = ((EditText) findViewById(R.id.files_in_users_groups_user_or_group_id_text))
                .getText().toString();
        final String pageStr = ((EditText) findViewById(R.id.files_in_users_groups_page_text)).getText().toString();
        try {
            int page = Integer.parseInt(pageStr);
            request = FileRequests.filesInUsersGroups(userId, page);
        } catch (NumberFormatException e) {
            printHeader("Could not build files in users groups request");
            printException(e);
            return;
        }
        sendRequest(request);
    }

    /**
     * Called when the "files shared with user" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onFilesSharedWithUserClick(View v) {
        RestRequest request = null;
        final String userId = ((EditText) findViewById(R.id.files_shared_with_user_user_id_text))
                .getText().toString();
        final String pageStr = ((EditText) findViewById(R.id.files_shared_with_user_page_text)).getText().toString();
        try {
            int page = Integer.parseInt(pageStr);
            request = FileRequests.filesSharedWithUser(userId, page);
        } catch (NumberFormatException e) {
            printHeader("Could not build files shared with user request");
            printException(e);
            return;
        }
        sendRequest(request);
    }

    /**
     * Called when the "file details" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onFileDetailsClick(View v) {
        final String documentId = ((EditText) findViewById(R.id.file_details_document_id_text))
                .getText().toString();
        final String version = ((EditText) findViewById(R.id.file_details_version_text)).getText().toString();
        RestRequest request = FileRequests.fileDetails(documentId, version);
        sendRequest(request);
    }

    /**
     * Called when the "batch file details" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onBatchFileDetailsClick(View v) {
        final List<String> documentIdList = parseCommaSeparatedList(R.id.batch_file_details_document_id_list_text);
        RestRequest request = FileRequests.batchFileDetails(documentIdList);
        sendRequest(request);
    }

    /**
     * Called when the "files shares" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onFileSharesClick(View v) {
        RestRequest request = null;
        final String documentId = ((EditText) findViewById(R.id.file_shares_document_id_text))
                .getText().toString();
        final String pageStr = ((EditText) findViewById(R.id.file_shares_page_text)).getText().toString();
        try {
            int page = Integer.parseInt(pageStr);
            request = FileRequests.fileShares(documentId, page);
        } catch (NumberFormatException e) {
            printHeader("Could not build files shares request");
            printException(e);
            return;
        }
        sendRequest(request);
    }

    /**
     * Called when the "add file share" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onAddFileShareClick(View v) {
        final String documentId = ((EditText) findViewById(R.id.add_file_share_document_id_text))
                .getText().toString();
        final String entityId = ((EditText) findViewById(R.id.add_file_share_entity_id_text))
                .getText().toString();
        final String shareType = ((EditText) findViewById(R.id.add_file_share_share_type_text))
                .getText().toString();
        RestRequest request = FileRequests.addFileShare(documentId, entityId, shareType);
        sendRequest(request);
    }

    /**
     * Called when the "delete file share" button is clicked.
     *
     * @param v View that was clicked.
     */
    public void onDeleteFileShareClick(View v) {
        final String shareId = ((EditText) findViewById(R.id.delete_file_share_share_id_text))
                .getText().toString();
        RestRequest request = FileRequests.deleteFileShare(shareId);
        sendRequest(request);
    }

    private RequestBody getParamsEntity(int manualRequestParamsText)
			throws UnsupportedEncodingException {
		Map<String, Object> params = parseFieldMap(manualRequestParamsText);
		if (params == null) {
			params = new HashMap<>();
		}
        FormBody.Builder builder = new FormBody.Builder();
        for (Entry<String, Object> param : params.entrySet()) {
            builder.add(param.getKey(), (String) param.getValue());
		}
        return builder.build();
	}

	private RestMethod getMethod(int methodRadioGroup) {
		RadioGroup radioGroup = (RadioGroup) findViewById(methodRadioGroup);
		RadioButton radioButton = (RadioButton) findViewById(radioGroup
				.getCheckedRadioButtonId());
		RestMethod method = RestMethod.valueOf((String) radioButton.getTag());
		return method;
	}

	/**
	 * Called when "Logout" button is clicked. Brings up the
	 * logout confirmation dialog.
	 *
	 * @param v View that was clicked.
	 */
	public void onLogoutClick(View v) {
		logoutConfirmationDialog.show(getFragmentManager(), "LogoutDialog");
	}

	/**
	 * Helper to read a JSON string representing field name-value map.
	 *
	 * @param jsonTextField Text field.
	 * @return Map of JSON.
	 */
	private Map<String, Object> parseFieldMap(int jsonTextField) {
		String fieldsString = ((EditText) findViewById(jsonTextField))
				.getText().toString();
		if (fieldsString.length() == 0) {
			return null;
		}
		try {
			JSONObject fieldsJson = new JSONObject(fieldsString);
			Map<String, Object> fields = new HashMap<String, Object>();
			JSONArray names = fieldsJson.names();
			for (int i = 0; i < names.length(); i++) {
				String name = (String) names.get(i);
				fields.put(name, fieldsJson.get(name));
			}
			return fields;
		} catch (Exception e) {
			printHeader("Could not parse: " + fieldsString);
			printException(e);
			return null;
		}
	}

	private List<String> parseCommaSeparatedList(int textField) {
		String fieldsCsv = ((EditText) findViewById(textField))
				.getText().toString();
		return Arrays.asList(fieldsCsv.split(","));
	}

	/**
	 * Helper that sends a request to the server and prints the result in a text field.
	 *
	 * @param request REST request.
	 */
	private void sendRequest(RestRequest request) {
		hideKeyboard();
		println("");
		printHeader(request);
		try {
			sendFromUIThread(request);
		} catch (Exception e) {
			printException(e);
		}
	}

	/**
	 * Sends a REST request using RestClient's sendAsync method.
	 * Note: Synchronous calls are not allowed from code running on the UI thread.
	 *
	 * @param restRequest REST request.
	 */
	private void sendFromUIThread(RestRequest restRequest) {
		client.sendAsync(restRequest, new AsyncRequestCallback() {
			private long start = System.nanoTime();

			@Override
			public void onSuccess(RestRequest request, final RestResponse result) {
                result.consumeQuietly(); // consume before going back to main thread
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            long duration = System.nanoTime() - start;
                            println(result);
                            int size = result.asString().length();
                            int statusCode = result.getStatusCode();
                            printRequestInfo(duration, size, statusCode);
                            extractIdsFromResponse(result.asString());
                        } catch (Exception e) {
                            printException(e);
                        }

                        EventsObservable.get().notifyEvent(EventType.RenditionComplete);
                    }
                });
			}

			@Override
			public void onError(final Exception exception) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        printException(exception);
                        EventsObservable.get().notifyEvent(EventType.RenditionComplete);
                    }
                });
			}
		});
	}

	/**
	 * Helper method to hide the soft keyboard.
	 */
	private void hideKeyboard() {
		final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(resultText.getWindowToken(), 0);
	}

	/**************************************************************************************************
	 *
	 * Pretty printing helpers
	 *
	 **************************************************************************************************/

	private void printRequestInfo(long nanoDuration, int characterLength, int statusCode) {
        println(SINGLE_LINE);
        println("Time (ms): " + nanoDuration / 1000000);
        println("Size (chars): " + characterLength);
        println("Status code: " + statusCode);
	}

	private void printException(Exception e) {
		println("Error: " + e.getClass().getSimpleName());
		println(e.getMessage());
	}

	private void printHeader(Object obj) {
		println(DOUBLE_LINE);
		println(obj);
		println(SINGLE_LINE);
	}

	/**
	 * Helper method to pretty print objects in the result_text field.
	 *
	 * @param object Object to print.
	 */
	private void println(Object object) {
		if (resultText == null) {
			return;
		}
		final StringBuffer sb = new StringBuffer(resultText.getText());
		String text;
		if (object == null) {
			text = "null";
		} else {
			text = object.toString();
		}
		sb.append(text).append("\n");
        resultText.setText(sb);

        // Auto scrolls to the bottom if needed.
        if (resultText.getLayout() != null) {
            int scroll = resultText.getLayout().getLineTop(
                    resultText.getLineCount())
                    - resultText.getHeight();
            resultText.scrollTo(0, scroll > 0 ? scroll : 0);
        }
	}

	/**
	 * Dumps info about the app and rest client.
	 */
	private void printInfo() {
		printHeader("Info");
		println(SalesforceSDKManager.getInstance());
		println(client);
	}

	/**
	 * Helper to show/hide several views
	 *
	 * @param resIds
	 */
	public void showHide(boolean show, int... resIds) {
		for (int resId : resIds) {
			View v = findViewById(resId);
			if (v != null) {
				v.setVisibility(show ? View.VISIBLE : View.GONE);
			}
		}
	}

	/**************************************************************************************************
	 *
	 * Extracting ids from response for auto-complete
	 *
	 **************************************************************************************************/

	private Pattern idPattern = Pattern.compile("0[0-9a-zA-Z]{17}");

	private void extractIdsFromResponse(String responseString) {
		Matcher matcher = idPattern.matcher(responseString);
		List<String> ids = new ArrayList<String>();
		while (matcher.find()) {
			ids.add(matcher.group());
		}
		knownIds.addAll(ids);
		fixAutoCompleteFields(R.id.retrieve_object_id_text, R.id.update_object_id_text,
				R.id.delete_object_id_text);
	}

	private void fixAutoCompleteFields(int... fieldIds) {
		for (int fieldId : fieldIds) {
			AutoCompleteTextView tv = (AutoCompleteTextView) findViewById(fieldId);
			tv.setAdapter(new ArrayAdapter<String>(this,
					android.R.layout.simple_dropdown_item_1line, knownIds
							.toArray(new String[] {})));
		}
	}

    /**
     * Refreshes the client if the user has been switched.
     */
	private void refreshIfUserSwitched() {
		if (passcodeManager.onResume(this)) {
			final String accountType = SalesforceSDKManager.getInstance().getAccountType();

			// Gets a rest client.
			new ClientManager(this, accountType, SalesforceSDKManager.getInstance().getLoginOptions(),
					SalesforceSDKManager.getInstance().shouldLogoutWhenTokenRevoked()).getRestClient(this, new RestClientCallback() {

				@Override
				public void authenticatedRestClient(RestClient client) {
					if (client == null) {
						SalesforceSDKManager.getInstance().logout(ExplorerActivity.this);
						return;
					}
					ExplorerActivity.this.client = client;
				}
			});
		}
	}

    /**
     * Acts on the user switch event.
     *
     * @author bhariharan
     */
    private class ExplorerUserSwitchReceiver extends UserSwitchReceiver {

		@Override
		protected void onUserSwitch() {
			refreshIfUserSwitched();
		}
    }
}

redpajama_set_name: RedPajamaGithub


text:
import Ember from 'ember';
import { singularize, pluralize } from './utils/inflector';
import Pretender from 'pretender';
import Db from './db';
import controller from './controller';

/*
  The Mirage server, which has a db and an XHR interceptor.

  Requires an environment.
*/
export default class Server {

  constructor(options) {
    if (!options || !options.environment) {
      throw "You must pass an environment in when creating a Mirage server instance";
    }

    this.environment = options.environment;
    this.timing = 400;
    this.namespace = '';

    this._setupStubAliases();

    /*
      Pretender instance with default config.

      TODO: Inject?
    */
    this.interceptor = new Pretender(function() {
      this.prepareBody = function(body) {
        return body ? JSON.stringify(body) : '{"error": "not found"}';
      };

      this.unhandledRequest = function(verb, path) {
        path = decodeURI(path);
        console.error("Mirage: Your Ember app tried to " + verb + " '" + path +
                      "', but there was no route defined to handle this " +
                      "request. Define a route that matches this path in your " +
                      "mirage/config.js file.");
      };
    });
    this.pretender = this.interceptor; // alias

    /*
      Db instance

      TODO: Inject?
    */
    this.db = new Db();

    // TODO: Better way to inject server into test env
    if (this.environment === 'test') {
      window.server = this;
    }
  }

  loadConfig(config) {
    config.call(this);
    this.timing = this.environment === 'test' ? 0 : (this.timing || 0);

    if (this.useBackendAPI) {
      this.pretender.shutdown();
    }
  }

  stub(verb, path, handler, code, options) {
    var _this = this;
    path = path[0] === '/' ? path.slice(1) : path;

    this.interceptor[verb].call(this.interceptor, this.namespace + '/' + path, function(request) {
      var response = controller.handle(verb, handler, _this.db, request, code, options);
      var shouldLog = typeof _this.logging !== 'undefined' ? _this.logging : (_this.environment !== 'test');

      if (shouldLog) {
        console.log('Successful request: ' + verb.toUpperCase() + ' ' + request.url);
        console.log(response[2]);
      }

      return response;
    }, function() { return _this.timing; });
  }

  /*
    Factory methods
  */
  loadFactories(factoryMap) {
    var _this = this;
    // Store a reference to the factories
    this._factoryMap = factoryMap;

    // Create a collection for each factory
    _.keys(factoryMap).forEach(function(type) {
      _this.db.createCollection(pluralize(type));
    });
  }

  create(type, overrides) {
    var collection = pluralize(type);
    var currentRecords = this.db[collection];
    var sequence = currentRecords ? currentRecords.length: 0;
    if (!this._factoryMap || !this._factoryMap[type]) {
      throw "You're trying to create a " + type + ", but no factory for this type was found";
    }
    var OriginalFactory = this._factoryMap[type];
    var Factory = OriginalFactory.extend(overrides);
    var factory = new Factory();

    var attrs = factory.build(sequence);
    var db_data = this.db[collection].insert(attrs);

    if (this.useBackendAPI) {
        var data = {};
        data[singularize(collection)] = db_data;
        var backend_data = null;

        Ember.$.ajax({
            url: '/api/' + collection,
            method: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data),
            async: false,
            success: function(result) {
              backend_data = result[singularize(collection)];
            }
        });
        return backend_data;
    }
    return db_data;
  }

  createList(type, amount, overrides) {
    var list = [];

    for (var i = 0; i < amount; i++) {
      list.push(this.create(type, overrides));
    }

    return list;
  }

  shutdown() {
    this.pretender.shutdown();
  }

  _setupStubAliases() {
    var _this = this;

    [['get'], ['post'], ['put'], ['delete', 'del']].forEach(function(names) {
      var verb = names[0];
      var alias = names[1];

      _this[verb] = function(/* path, handler, code, options */) {
        var args = _this._extractStubArguments.apply(this, arguments);
        args.unshift(verb);
        this.stub.apply(this, args);
      };

      if (alias) { _this[alias] = _this[verb]; }
    });
  }

  /*
    Given a variable number of arguments, it generates an array of with
    [path, handler, code, options], `path` and `options` being always defined,
    and `handler` and `code` being undefined if not suplied.
  */
  _extractStubArguments(/* path, handler, code, options */) {
    var ary = Array.prototype.slice.call(arguments);
    var argsInitialLength = ary.length;
    var lastArgument = ary[ary.length - 1];
    var options;
    var i = 0;
    if (lastArgument.constructor === Object) {
      argsInitialLength--;
    } else {
      options = { colesce: false };
      ary.push(options);
    }
    for(; i < 5 - ary.length; i++) {
      ary.splice(argsInitialLength, 0, undefined);
    }
    return ary;
  }

}


Was born on 17 may 1955.
I didn't have a normal background I was completely demented from a very early age.
I liked seeing myself in a different costumes and doing different actions. It's a chance to be something you're not.
Well, directing myself meant there was one less star I had to deal with, really, it was great. It was a big departure for me but I had a great time.


text:
Call 1-800-NEPTUNE | 1-800-637-8863
Report a Passing
A Loved One Has Passed Away (Report A Death)
A Loved One May Pass Away Soon
I'm Planning
What Benefits Does the U.S. Department of Veterans Affairs Offer?
What the Veterans Administration covers, as far as benefits when a person passes away, varies greatly. First of all, they provide a grave space or a cremation niche free of charge to the family.
They also provide the opening and closing of the grave and/or the niche. They also provide an American flag if you're going to have military honors at a service for your loved one. The Honor Guard would then present that American flag to you. The other item that they receive is a Presidential Certificate.
When it comes to a monetary amount, there's really a misconception sometimes in how that works. If someone is receiving a monthly allowance or being paid by the Veterans Administration on a monthly basis, they may be entitled to a one-time lump sum from the Veterans Administration.
You really need to check with your local funeral director, provider, and also with your local Veterans Administration. One of the forms that is required is the DD214 form, which is one of the most important forms. That would be required to start this process.
Download The Essential Veteran Death Benefits and Memorialization Guide
Answers from Other Funeral Directors Around the United States:
Honorably discharged veterans receive a United States flag and burial at a National Cemetery for no charge (also provided to the veterans spouse and any dependent children). If the veteran choses to be buried at a private cemetery, they are eligible for partial reimbursement of expense and a veteran's marker. Some veterans may receive additional financial reimbursements, but it is dependent on where the death occurs and years of service.
To learn more about veterans' benefits visit: va.gov.
The VA does not pay for the funeral home cost to be buried or cremated. The only time the VA pays for funeral home cost is if the veteran dies in active duty.
- Abby Schilling
Funeral Director in Richfield, MN
Veterans may receive a headstone, flag, Honor guard, and National Cemetery space for the veteran and their spouse. Double check the VA's requirements to see what you or your loved one are eligible to receive in benefits.
- C. A. Bankston
Funeral Director in Fort Worth, TX
All veterans who are honorably discharged are entitled to free burial at a National Cemetery. This includes a grave marker and military honors where Taps is played with a brief flag folding ceremony and the flag is presented to the next of kin.
- Michael Sollitto
Funeral Director in Charlotte, NC
If your loved one is a veteran there are benefits that may be available to you. There are National Cemeteries located in many areas throughout North America where the cremated remains may be interred if you so choose. You may be provided with a burial space or a niche and a memorial marker at no cost. You may be entitled to receive an American Flag in honor of your loved ones service in the military and a presidential certificate. If you choose a private cemetery you may be entitled to a flat rate monetary reimbursement that is generally paid at the maximum amount authorized by law for an eligible Veteran's burial and funeral costs. In order to assist you with this process, we will need you to provide us with proof of military service, either a copy of the military discharge papers or the DD2 I 4 form. Benefit eligibility is based on the veteran's service connection and disability.
- Jessica Watts
Funeral Director in Jacksonville, FL
Check Out Our Ask a Funeral Director Video Archive
Cremation and Funeral Jargon
Cremation Paperwork
The Cremation Process
Transportation of Cremated Remains
Obituary Information
Cremation and Memorialization
Receive our FREE Guide and Learn About Planning a Cremation
Proud Sponsor of the 2020 Better Business Bureau Torch Awards for Ethics
Everything was clear and Sheri was very helpful when making... Read More
Everything was clear and Sheri was very helpful when making my decision.
Michelle Paxton Wilson was wonderful. If it wasn't for her,... Read More
Michelle Paxton Wilson was wonderful. If it wasn't for her, I don't think we would have done it. Now I am so glad we did for peace of mind. Michelle took the time to explain everything to us. Because she is such a warm and caring person, it made the experience enjoyable. One less thing for our families to worry about when we are gone.
Huguette H.
When my husband passed away I wasn't prepared and the... Read More
When my husband passed away I wasn't prepared and the Neptune Society was very helpful in making arrangements. Sarah was kind and empathetic and very professional. Everything went beautifully.
Margaret A.
Hometown, IL
Empathic, professional, and prompt attention. Much easier and quicker than... Read More
Empathic, professional, and prompt attention. Much easier and quicker than I thought the experience would be.
Maribeth M.
Wonderful service during such a sad time. Bill Rafferty really... Read More
Wonderful service during such a sad time. Bill Rafferty really helped my family through the cremation process. I really appreciate everything!
My experience with Mercedes and the Neptune Society was wonderful!... Read More
My experience with Mercedes and the Neptune Society was wonderful! They made this difficult situation totally seamless and took a huge burden off my shoulders. I can't tell them enough how much I appreciate all they do and have done for me.
Janet H.
We have been very appreciative to our contact, Christina Stanley... Read More
We have been very appreciative to our contact, Christina Stanley at the Neptune Society. Our father had made his arrangements, prior to his death, and it was all handled so efficiently and professionally, that when his wife unexpectedly passed away, 4 months later, we contacted them again. Christina was compassionate and expedient in all our interactions. at a very difficult time. We are forever grateful she was there to guide us through the process and understood the complications of being out of state.
Colleen B.
I want to thank the services of the Neptune Society.... Read More
I want to thank the services of the Neptune Society. My mother signed up about 3 years ago. Unfortunately, we had to use Neptune in July. I can't state enough how simple the process was. All the Assisted Living had to do was make a phone call at my request. That was it. The very next day, Eric from the Salt Lake City office called me. I didn't have to worry about a thing just as you said. Thanks. It took a lot of pressure off my shoulders as we were also getting ready to leave on a long vacation 5 days later. Everything was done before then. The Metcalf Mortuary, they were wonderful. Neptune Society is awesome and provides as much needed service, thanks.
The people I talked to were so helpful, they guided... Read More
The people I talked to were so helpful, they guided me thru everything. They were uplifting, respectful, and down-to-earth. Mr. William Webb was patient with me. I filled out the death cert wrong, found my error in double-checking and there was no problem changing. He didn't make me feel stupid either. Every accommodation was made that I can think of. I highly recommended Neptune society. Extra thanks to you Bill Webb
Patti B.
When my husband's mother passed away recently, she had not... Read More
When my husband's mother passed away recently, she had not made any plans for her death. With the help and guidance of Julie at Kansas City Neptune Society, we were able to make plans for her and feel more at peace with her passing. There were many choices and options and Julie was there to answer our questions and walk us through everything. She was very thorough and kind. It can be a very stressful situation to have to plan for someone else when it is such an important decision. We were so thankful that we decided to use Neptune and have purchased plans for ourselves so that the decision will not have to be decided by our child in the future. We highly recommend Neptune Society and please don't delay planning for your future! Make these hard decisions for yourself so that your family doesn't have to. 😊
Everything to Know About the Interment of Ashes
Interment of ashes refers to cremated remains being buried in the ground or placed in a columbarium. A columbarium is a building specially designed to hold ashes. Interment is ideal for people who do not wish for their ashes to be scattered or displayed in the home. There are also religious reasons for ashes to
How Long To Wait Before Arranging Funeral Service
In most cases, funerals take place just a few days after the death of a loved one occurs. But is this the proper funeral etiquette? Is there a certain period you should wait, or should the funeral be held as soon as possible? What determines the length of time between the death and a funeral,
Virtual Funeral Etiquette
Virtual funerals have become increasingly common during the COVID-19 pandemic due to social distancing and restrictions on air travel. They are similar to traditional in-person funerals but are live-streamed on platforms such as Facebook, Skype, and Zoom. These platforms make it possible for anyone worldwide to view a funeral from their computer, smartphone, or tablet.
How to Plan a Virtual Funeral Service
Due to the global pandemic, people worldwide have had to cancel, reschedule and alter major life events to help prevent the spread of COVID-19. In addition to limits on social gatherings, the pandemic has increased travel restrictions for air and bus travel, making it difficult for friends and family to travel for funerals. In response
Ask a Funeral Director
Subscribe to the 12 Weeks of Peace E-Newsletter
Subscribe to the Thinking Ahead E-Newsletter
The Conversation Guidebook
A Guide to Cremation and Burial for Veterans
Cremation Answer Book
Unique Ways to Memorialize Cremation Ashes
A Complete Guide for When A Loved One Passes
The Essential Veteran Death Benefits and Memorialization Guide
The Ultimate Cremation Preplanning Guide
How to Get a Death Certificate
The Trustworthy Cremation Provider Guide
Choose Your State
Preplan A Cremation
Immediate Need Services
Veteran Cremation
Online Cremation Planning
About Cremation
Neptune Society Partners
Neptune Society In The News
The Neptune Society Memorial Reef
The San Francisco Columbarium
The Ask A Funeral Professional Series
Report a Loved One's Passing
Request Cremation Cost Quote
About Neptune Society
Neptune Society is the largest provider of affordable cremation services in the nation. Thanks to the loyal support of generations of families, we've now grown to 45 locations nationwide with continued expansion in the future. Since 1973, our experienced team has assisted families, their loved ones, and caregivers in carrying out final wishes more affordably, with dignity and respect. Please contact your local Neptune Society office for cremation prices, and to learn more about our cremation service.
© 2022 Neptune Society. All rights reserved.
Sitemap | Legal Notices and Disclaimers | Terms and Conditions | Privacy Policy | California Residents Goods and Services Info | Opt Out
Additional Legal Information | Additional Legal Information Regarding Veterans Offerings
Oregan Residents: Please note that in the State of Oregon, Funeral Board Rule 830-040-0000(3) requires our trade name include the identification of our funeral activity or function. As such, in the State of Oregon Preneed Crematory Sales and Services are conducted under the trade name "Neptune Cremation Service."
Ohio Residents: Neptune Society is affiliated with Okerwall Funeral Home.
Texas Residents: For additional information regarding prepaid funeral contracts, please visit the website www.prepaidfunerals.texas.gov which is maintained by the Texas Department of Banking. Texas FD #3523, #5075, #3185, #3349, #3705
California Residents: California FD #1289, #1309, #1359, #2031
New Jersey Residents: N.J. Lic. No. 5260 Daniel J. Enea, Manager. | All testimonials are written by persons unlicensed and not qualified to make funeral arrangements, embalm or conduct a funeral.
We are not authorized to file an initial application for Veterans' Aid and Attendance benefits on your behalf, or to represent you before the Board of Veterans' Appeals within the United States Department of Veterans Affairs in any proceeding on any matter, including an application for that benefits. It would be illegal for me to accept a fee for preparing that application on your behalf.
This event is not sponsored by, or affiliated with, the United States Department of Veterans Affairs, the California Department of Veterans Affairs, or any other congressionally chartered or recognized organization of honorably discharged members of the Armed Forces of the United States, or any of their auxiliaries. None of the insurance products promoted at this sales event are endorsed by those organizations, all of which offer free advice to veterans about how to qualify and apply for benefits.
Oregon Residents:
This program is not financed by or connected in any manner with any governmental agency or veteran's or other organization.

redpajama_set_name: RedPajamaCommonCrawl


Sharing is caring, especially in online marketing. When customers are introduced to a brand or product because a peer shared their content, they are five times more likely to convert into a customer themselves, and 56% of consumers say that seeing a branded post from a friend impacts their decision to purchase.
As great as this sounds, getting your customers to share your branded content is much easier said than done. These days, people really care about brands and the message their content conveys. They won't click share for just anything, so it is up to marketers to find meaningful reasons to encourage them to do so.
Here are three data-driven ways to increase social shares, grow your brand's reach, and boost conversions through simple content tweaks.
With all the millions of pieces of content floating around on the web, and the thousands of advertisements consumers are exposed to daily, customer trust in brands has really diminished over the years. According to Edelman's trust barometer, consumer trust is at a record low, especially in businesses and the media.
Building consumer trust is essential for conversions and loyalty, so your content must be able to convince people that your brand is trustworthy. One of the absolute best strategies to do so is by focusing on authenticity.
According to consumers, an authentic brand is nearly equally focused on the product and the people who use it. This is why user-generated content works so well; it showcases real people using the product. The sense of realism is much easier for people to connect with.
And, apart from the increase in customer trust, integrating UGC into your marketing strategy will bring about better results. In fact, advertisements that use UGC average four times higher click rates, and it increases the likelihood of conversions by 500%.
But how exactly can you turn your customers into content generating advocates for your marketing strategies?
First of all, encourage customer testimonials, especially on social media. 75% of social media users report that they would be likely to share a positive interaction with a brand through this medium. You can encourage the spread of positivity by including embedded social links in email messages and even on checkout pages to make it easier for people to share.
Another idea to get UGC flowing is to tell your audience the exact type of content you are looking for by cleverly disguising it through a giveaway. Ask your followers to post a picture of themselves using the product along with a branded hashtag for an entry, and voilà. Before you know it, you've got yourself an entire library of authentic content that can be used for later posts.
By using genuine and original content over heavily designed brand content, your customers will be far more likely to engage, share, and convert.
Edelman's report found that employees are often viewed as significantly more trustworthy than business leaders, especially if they are viewed as a "peer." And this not only builds their confidence in the message; it translates directly to more shares.
When brands implemented an employee advocacy program into their content strategy, they experienced remarkable results, including a 79% lift in visibility, 45% more web traffic, and increased content downloads.
Unfortunately, implementing an authentic employee advocacy program is easier said than done. Most workers will not naturally share content related to their work, and they certainly will not appreciate being forced to do so.
Thankfully, systems like Smarp can make employee advocacy easy and natural by creating internal content hubs to keep employees informed and engaged with what's going on in the business, as well as the industry as a whole. They can even sign up to receive tailored content that is relevant to their interests to increase their own knowledge and skills, in turn boosting their own thought leadership capabilities. From this system, employees can easily share branded content to their networks to improve their own influence while boosting their company's social reach.
The great news is that implementing an advocacy strategy like this not only increases a brand's reach and credibility, it benefits the employees as well.
One of the trickiest parts of marketing is you are always trying to out-do your past results. You're in a perpetual state of needing to come up with new and better ideas to keep your campaigns fresh and exciting. However, coming up with brand new content does not always guarantee better performance.
Revamping old pieces and turning them into something new is a surefire way to develop and maintain your library of content. You can see which pieces drove in the best results, whether it be in terms of shares, likes, conversions, or click-through rates. If audiences loved it before, why shouldn't they love it again after you've made some updates?
The way to guarantee higher shares with re-purposed content is to transform it into another format that tends to receive high engagement. For example, if you have a blog article that your readers enjoyed in the past, the information can be applied to an infographic, which typically reports higher shares than other types of content on social media.
In order to find the content that has worked best in the past, try using a content ROI tool like Hotjar, which measures the time that your audience spends on content. This can give you better insights into the exact pieces of content that your audience engages with thoroughly, rather than just the ones that receive the most likes or clicks.
Putting a new spin on old content can give it a second life and can help reach wider audiences who prefer certain formats over others. Marketers that re-purposed their content into something new reported up to 111% increases in organic traffic, and a 76% growth in conversions.
If you've got some content that performed well in the past, there's no need to let it just sit there. Re-purposing past pictures, articles, and videos and transforming them into something else can give old content new life and give your audience more opportunities to share.
Gaining shares will always be a tough task that never truly ends. By focusing on brand authenticity, your company is communicating that it cares about its audience. Customers trust employees and peers far more than brands themselves, so utilizing the people within a company as brand advocates creates highly trustworthy (and share-worthy) campaigns that can drive in amazing results. And finally, use the content that you already know performs well and give it new life with some re-purposing for a new take on great information.
Thanks for the great tips! I've always been an especially big advocate of #3. Repurposing content is the best way to win the content wars without driving yourself crazy and losing sleep. I hadn't thought about the sharability of infographics, though. That's a great point and I'll have to keep it in mind.
I'm glad to give you some new ideas! Infographics are a great way to share content.


For both listening and playing along, these orchestral accompaniments add a new dimension to the student's practice and performance enjoyment and also an invaluable tool for teaching rhythms and tempos. Each song is presented once at practice speed and once at performance speed. Use with Alfred's Basic Piano Course, Lesson Book 2.


RORATE CÆLI: On the 80th Anniversary of the Election of Pius XII - His prophetic words about a "Church which weakens the Law of God."
On the 80th Anniversary of the Election of Pius XII - His prophetic words about a "Church which weakens the Law of God."
Pius XII warns of "a Church which weakens the law of God, adapting it to the taste of human desires, when she should loudly proclaim and defend it" and which would give herself over to "the shifting sands of the opinions of the day." He asks: "Would you recognize in such a Church the features of your Mother's face? Can you imagine a Successor of the first Peter, who would bow to similar demands?" Can anyone now deny that we live in just such a time as this?
Source: Speeches and Radio Messages of Pope Pius XII , X, Tenth year of his pontificate, March 2, 1948 to March 1, 1949, pp. 389-391, Vatican Polyglot Press, https://w2.vatican.va/content/pius-xii/it/speeches/1949/documents/hf_p-xii_spe_19490220_popolo-roma.html.
English translation adapted and edited from excerpts provided on the official website of Pope Pius XII's cause for canonization.


text:
Home » Neurological Recovery Blog » Cerebral Palsy » Extrapyramidal Cerebral Palsy: Exploring Less Common Types of CP
Extrapyramidal Cerebral Palsy: Exploring Less Common Types of CP
Medically reviewed by Elizabeth Denslow, OTR/L — written by Flint Rehab.
Pyramidal and extrapyramidal cerebral palsy refer to the location of damage to the brain.
The pyramidal tracts run from the cerebral cortex down the brain stem and spinal cord. They're responsible for facilitating voluntary movement.
In contrast, extrapyramidal cerebral palsy is caused by damage outside the pyramidal tracts, to areas like the basal ganglia and cerebellum.
This article will go over different types of extrapyramidal cerebral palsy and how to manage them.
Types of Extrapyramidal Cerebral Palsy
There are 4 types of cerebral palsy and 3 of them can be classified as extrapyramidal. The pyramidal tracts are damaged only in spastic cerebral palsy, which makes up 80% of cerebral palsy cases.
This means that only about 20% of cerebral palsy cases are extrapyramidal.
The 3 types of extrapyramidal cerebral palsy are:
Dyskinetic cerebral palsy
Ataxic cerebral palsy
Mixed cerebral palsy
In the following sections, we'll go over the main characteristics of each type.
1) Dyskinetic Cerebral Palsy
The most common type of extrapyramidal cerebral palsy is dyskinetic CP. It makes up about 10-15% of cerebral palsy cases.
Dyskinetic cerebral palsy is caused by damage to the basal ganglia and/or the thalamus. These areas of the brain are often associated with facilitating and executing movements.
Therefore, individuals with dyskinetic CP may experience involuntary movements.
Dyskinetic cerebral palsy typically involves two major movement disorders: dystonia and choreoathetosis. They're often present at the same time but can also occur separately.
Dystonia is characterized by repetitive, twisting movements and abnormal postures due to involuntary muscle contractions.
Choreoathetosis is characterized by continuous writhing or jerky movements due to involuntary fluctuations between high and low muscle tone.
Typically, these uncontrollable movements worsen under stress and when trying to purposefully move, however they improve when relaxed or sleeping.
Learn more about dyskinetic cerebral palsy»
2) Ataxic Cerebral Palsy
©iStock.com/SbytovaMN
Ataxic cerebral palsy is the rarest type of CP, making up about 5% of all CP cases.
It's caused by damage to the cerebellum. This area of the brain is responsible for balance and coordination.
Therefore, individuals with this type of extrapyramidal cerebral palsy may struggle to perform tasks that require fine motor skills like writing or using silverware.
Many individuals with ataxic CP experience intention tremors, which is when shaking becomes more severe as they reach towards something and get closer to their target.
Ataxia can also affect walking patterns. Many people with ataxic CP tend to walk with their feet further apart because a wider stance helps create a more stable base.
Learn more about ataxic cerebral palsy»
3) Mixed Cerebral Palsy
Mixed cerebral palsy is caused by damage to multiple areas of the brain.
Individuals with mixed CP will experience symptoms of 2 or more types of cerebral palsy.
Mixed cerebral palsy can be both pyramidal and extrapyramidal. The most common type of mixed CP is spastic and athetoid.
Because this type of cerebral palsy is the result of various locations of brain damage, symptoms can vary quite a bit.
Managing Extrapyramidal Cerebral Palsy
Pyramidal cerebral palsy results in stiff movements due to high muscle tone. Extrapyramidal cerebral palsy typically involves some extent of low muscle tone (hypotonia).
This will be apparent through symptoms like floppy limbs and poor head control and posture.
Cerebral palsy management requires an individualized approach. Each person will need to undergo physical assessment so that their therapist can understand their functional abilities and create the most effective management plan.
Some of the most helpful management interventions for extrapyramidal cerebral palsy include:
©iStock.com/wavebreakmedia
Physical therapy focuses on improving motor functions through exercise.
By strengthening underused muscles, stretching tight muscles, and improving range of motion, physical therapy can help individuals with extrapyramidal cerebral palsy improve their posture, balance, and control. They may also identify which mobility aids are most appropriate to allow individuals to move most freely, such as crutches, a walker, or a wheelchair, and teach individuals how to use them correctly.
With cerebral palsy, there is usually nothing directly wrong with the body's ability to function. Rather, it's the brain's ability to transmit the right signals to the muscles of the body.
Through repetitive practice, individuals can stimulate neurological adaptations in the brain. Therefore, functions affected by brain damage can be rewired to healthy areas so communication to the body's muscles is not disrupted.
Occupational therapy for extrapyramidal cerebral palsy will focus on improving functional abilities through everyday activities.
Generally, activities of daily living like brushing your teeth, using silverware, and getting dressed require some precision.
By continuously practicing these activities, individuals with extrapyramidal CP can improve their fine motor skills and become more independent.
An occupational therapist will also teach individuals with extrapyramidal cerebral palsy how to use adaptive tools. For example, those with poor sitting balance may benefit from using a reacher and those with poor coordination might find it helpful to use universal cuffs.
©iStock.com/olesiabilkei
Wearing an orthotic device can be an extremely effective way to manage extrapyramidal symptoms like uncontrollable movements and poor posture.
A brace, splint, or cast will help promote proper body alignment and prevent excessive muscle tightening.
Individuals with low muscle tone can rely on their orthotics for extra support to stabilize their posture and improve mobility.
Extrapyramidal cerebral palsy can also affect the muscles around the mouth, resulting in drooling, difficulties speaking, and poor feeding.
At speech therapy, individuals will practice:
Activities to strengthen their oral muscles
Speech delivery (articulation, volume, pacing, etc.)
Those with more severe oral motor impairments will learn how to utilize alternative forms of communication like speech generators and communication boards.
Understanding Extrapyramidal Cerebral Palsy
Extrapyramidal cerebral palsy can be caused by damage to the developing basal ganglia, thalamus or cerebellum.
Basal ganglia or thalamus damage will result in uncontrollable movements. In contrast, cerebellum damage will affect balance and coordination.
When most people consider cerebral palsy, they'll think of spastic (pyramidal) CP because it makes up 80% of all cases. Although not as common, extrapyramidal cerebral palsy can affect motor functions in other, equally significant ways.
Hopefully, this article helped you understand how the location of brain injury can cause different types of cerebral palsy and the best ways to manage them. Good luck!
Featured image: ©iStock.com/jarenwicklund
Keep It Going: Download 19 Pages of Helpful Tips for Cerebral Palsy
Get our free 19-page PDF full of helpful tips for cerebral palsy by signing up below! You'll also receive our weekly Monday newsletter that contains 5 articles on cerebral palsy education.
We will never sell your email address, and we never spam. That we promise.
Free CP Tips Ebook
Flaccid Cerebral Palsy: How to Identify and Improve Low Muscle Tone
Mild Cerebral Palsy: How to Identify the Signs & Why Early Intervention Matters
Severe Cerebral Palsy: What to Expect and How to Manage
You're on a Roll: Read More Popular Articles About Cerebral Palsy
Best Recovery-Boosting Vitamins for Cerebral Palsy
Different Types of Cerebral Palsy: Spastic, Dyskinetic, Ataxic, and Mixed
Physical Therapy for Cerebral Palsy: Goals, Exercises, and Long-Term Effectiveness
You're Really on a Roll: Discover a Program for CP That's Actually Fun to Do!
At Flint Rehab, we understand that doing physical therapy at home can become tedious and repetitive. But when repetition is critical to recovery, it's important to stick with a repetitive regimen. But that doesn't mean it has to be boring.
Flint Rehab is the leading manufacturer of motion-sensing, gamified rehabilitation devices. Our bestselling recovery tool, FitMi, transforms full-body rehab exercises into an interactive experience.
See what individuals with CP are saying about FitMi:
"The FitMi and MusicGlove have done wonders for my son with hemiparesis from cerebral palsy and stroke. It motivates him to do his exercises. It does not seem like therapy for him since it is fun. FitMi monitors his progress so it is a great reinforcement for him. Music is a motivator for him. He has been using it on his arm and we will try the leg exercises soon."
-Manning
While FitMi is a recovery tool for the full-body, our other device, MusicGlove, helps target the hand to improve fine motor skills and dexterity.
See what others have said about MusicGlove:
"My granddaughter has right-side hemiplegia from Cerebral Palsy / stroke at birth. She states that this is a great product for anyone who has issues with the use of their hand(s), and that is has helped her tremendously. She also finds the music quite catchy (surprisingly!). Our occupational therapist has been impressed as well. I can say that it has arguably been the best tool of all our therapy resources."
Together, FitMi and MusicGlove make a powerful home therapy regimen for individuals with cerebral palsy. Best of all, you can save money when you bundle them together.
To learn more, click the button below:
Discover powerful recovery tools for CP
Do you have these 19 pages of helpful tips for CP?
Get a free copy of our ebook Helpful Tips for Managing Cerebral Palsy. Click here to get instant access.


Being diagnosed with a critical illness is not something that people like to think about. Perhaps you know someone who was recently faced with this situation, and saw firsthand the stresses of finding and receiving medical care, and paying the bills while recuperating.
Critical Illness insurance was first conceived by a surgeon who had seen patients struggling with medical bills, and today it is available from many top Canadian insurers. This type of coverage is for those who take great care of themselves and have above average health.
Your coverage benefit is paid out in a lump sum, tax-free in the event you are diagnosed with a covered condition and survive for a minimum period. The money can be used to pay a mortgage, take time off work, or for medical care. It's completely up to you.
The most common types of claims in Canada are for cancer, heart attack, and stroke, but most plans offer coverage of over 22 illnesses, which can also include Alzheimer's, multiple sclerosis, and Parkinson's.
An optional refund guarantee called Return of Premiums means your money can be returned if no claims are made.
For a free insurance needs analysis and comprehensive comparison of top insurer pricing, please call us at 604.872.2866 or email info@truebenefits.ca or request a quote here.


text:
Double Japanese Aster*
Kalimeris pinnatifida
Double Japanese Aster in bloom
Other Names: False Aster, Oriental Boltonia; Ghengis Khan Aster
A distinguished low growing relative of the aster that is noted for its lanced shaped green leaves; forms a blanket of daisy-like double flowers with yellow centers, rising above the stems until frost
Double Japanese Aster is blanketed in stunning white daisy flowers with yellow eyes at the ends of the stems from late summer to early fall. The flowers are excellent for cutting. Its attractive narrow leaves remain green in color throughout the season. The fruit is not ornamentally significant.
Double Japanese Aster is a dense herbaceous perennial with a mounded form. Its relatively fine texture sets it apart from other garden plants with less refined foliage.
This is a relatively low maintenance plant, and is best cleaned up in early spring before it resumes active growth for the season. It is a good choice for attracting butterflies to your yard. It has no significant negative characteristics.
Double Japanese Aster is recommended for the following landscape applications;
Double Japanese Aster will grow to be about 30 inches tall at maturity, with a spread of 24 inches. When grown in masses or used as a bedding plant, individual plants should be spaced approximately 18 inches apart. Its foliage tends to remain dense right to the ground, not requiring facer plants in front. It grows at a medium rate, and under ideal conditions can be expected to live for approximately 10 years.
This plant does best in full sun to partial shade. It does best in average to evenly moist conditions, but will not tolerate standing water. It is not particular as to soil type or pH. It is somewhat tolerant of urban pollution, and will benefit from being planted in a relatively sheltered location. This species is not originally from North America. It can be propagated by division.
Double Japanese Aster is a fine choice for the garden, but it is also a good selection for planting in outdoor pots and containers. Because of its height, it is often used as a 'thriller' in the 'spiller-thriller-filler' container combination; plant it near the center of the pot, surrounded by smaller plants and those that spill over the edges. It is even sizeable enough that it can be grown alone in a suitable container. Note that when growing plants in outdoor containers and baskets, they may require more frequent waterings than they would in the yard or garden.


text:
Argyle Chat: What went wrong for Plymouth Argyle in the Devon Derby?
This week's podcast reflects on events at St James Park
Plymouth Argyle suffered Devon Derby humiliation in the 4-0 loss to Exeter City (Image: PPAUK)
Get Chris Errington's exclusive behind-the-scenes take on life at Argyle in his weekly Inside Home Park newsletter
Defeats are hard to take at the best of times, but when it comes in the Devon Derby, they are even more difficult to digest.
After Plymouth Argyle's 4-0 hammering at Exeter City on Saturday, our football editor Chris Errington, and Argyle fans Jak Ball and Andy Bacon, join host Stuart James to reflect on events at St James Park.
Did Ryan Lowe underestimate the importance of the game? Was he disrespectful in the build-up? And most importantly, what went wrong for Argyle?
We look back on the Pilgrims' heaviest defeat against their bitter rivals since Christmas Day 1925, but there was one thing all the pundits wanted to see against Grimsby Town on Saturday... a reaction.
Before that, Lowe's troops are in action again as they play host to Chelsea in the Checkatrade Trophy, where they will qualify for the next stage of the competition by avoiding defeat at Home Park.
Exeter City wanted it more than Plymouth Argyle and that is simply inexcusable
Places are up for grabs, that's for sure, so there is an opportunity there for players to come in and stake a claim for a first team place.
So pour yourself a drink, sit back and enjoy 40 minutes of your favourite football club. It helped Andy and Jak get over Saturday's events. It may help you too...
Plymouth ArgyleStriker Niall Ennis signs two-and-a-half year deal with Plymouth ArgyleThe 21-year-old is Ryan Lowe's second signing of the January transfer window
Ryan Lowe defends Plymouth Argyle midfielder Panutche Camara over red card
Plymouth ArgyleCamara will be suspended for one match after being sent-off near the end of the 1-1 draw with Crewe Alexandra
Newcastle United's Kell Watts cannot wait for Sunderland away game with Plymouth Argyle
Plymouth ArgyleThe 21-year-old is on a season-long loan with the Pilgrims from the Premier League club
Plymouth Argyle strongly linked with move for Wolves striker Niall Ennis
Plymouth ArgyleThe 21-year-old was on loan to Burton Albion earlier this season
Ryan Lowe: Why Conor Grant is such a key part of my Plymouth Argyle squad
Plymouth ArgyleThe versatile 25-year-old has impressed in midfield as well as at left wing-back
UK & World NewsThe Health Secretary said there must be a significant reduction in infections and fatalities before schools reopen


There are moments when my Soul is so fully elated in higher Truth, that this manifest-world of physical nature becomes the Dream.
In these moments, understanding of this infinite nature, that normally lies beyond a veil of doubt, confusion, and separation, is clear and present within my conscious awareness and "I" feel the FORCE of all Life's potential flowing through me.
These are the moments that remind me of who I am.
Sometimes I share these experiences, with you, in as powerful a way as I know how. And sometimes, I mute these experiences quite a bit, in effort to keep them pure for mySelf.
As much as I do share with you. I haven't begun to share the most EPIC elements of my experience. That tendency, to tame some of my Truth, comes from a subconscious desire to "shield and protect" the deeper and most sacred Truths. As if holding them, in silent reverence, will honor their essence.
But, while in France, I was asked by Spirit, to begin sharing the hidden mysteries!! I was asked to begin sharing the deeper Truths that may not be understood by all, but would speak to those who sought this wisdom and knowledge.
It's time to remove the veils of separation, and plant the seeds of emPowerment and Light upon this earth plane.
We are ONE in infinite knowing and divine grace.
Moving through human ecstasy, one heartbeat at a time.
Stepping in, and out of, divine flow, by choice.
With awareness, dear one, we open the gate to inner source.
Moving beyond that which is here or there.
See only Life moving through, in fluid motion.
To touch, to feed, to emPower all expression, all truth, all beingness.
…of the most pure and pristine nature.
In love, for the art of being, it can be shaped and molded, by will and force.
It responds to your direction, to your prayer, to your desire.
It yields to your command.
As you are it and it is you.
One expression of Divine Beingness.
Nothing outside of your all-encompassing awareness, directs your experience.
Life, in all of its infinite wonder, only supports your experience.
It is intuitive, and responds to your direction.
This is why planes of higher consciousness begin to open, once you are ready to explore them.
This is why all becomes ease-filled and effortless, when you are in Joy and Love.
When your heart senses only Beauty, only Beauty shapes each experience.
All sense of resistance and limitation, lies within, and creates a path of Struggle for you to know outwardly.
It bows down to your will.
Move beyond the concept of being small, and bound to any single moment or identity.
See yourSelf in wholeness, as Life itself.
As the Peace you wish to know.
As the Love you wish to embody.
As the Joy you wish to embrace.
Become that which you seek, by will.
Innocently become that which you wish to be.
Breathe Life into manifest BEing.
Be the conduit, the vessel, the channel for Life, in its infinite wonder, to be.
You are no longer comfortable in your limited expression of being.
The Golden One, we speak of, is YOU in your most natural state of pristine Being.
A timeless one, pure and magnificent.
The Light you seek is not "with" you.
The initiation you stepped into, is of remembrance.
You are more than you see, in every regard.
You are not this mind.
You are not this string of choices in space and time.
You are the Force of LIFE itself, moving through this moment and all moments, simultaneously.
With awareness, your understanding of Life can shift, from here to there to everywhere.
Can contain you in full essence of BEing.
You are infinite in nature.
Held down to no law, beyond those You enact for yourSelf.
We say, "Imagine your Life beyond boundaries of conformity and order".
Imagine the infinite as your breath, your spirit, and your mind.
Shatter the paradigm of current awareness, if you must.
It will always be there to participate in, at will.
To 'know' Life beyond your current understanding, is your desire.
To be boundless and infinite, is your wish.
The Halls of Amenti only tether those who wish to be held.
To say "You are free of the Halls of Amenti", is to say that no single aspect of Light, no matter how great, can define YOU in any way.
You can come and go, to participate in the Dream.
But bound, you are not.
In its most natural form.
Anytime we question what will be, we deny the awesome-force that we most naturally are.
We are only limited by the constructs of our own thoughts and beliefs. Release all attachment to "the limited", in concept, and "the limited" no longer can exist within our personal experience.
Even when they speak of the Halls of Amenti, they remind us that we are only bound to this "cycle of Life" (the perception that it has a beginning and an end) as long as we see ourSelves as limited and separate in some way. Once we reMember that we are the Atman – the great infinite spirit that emPowers all Life – we could not experience ourSelves as any less.
Tales of our inferiority and insignificance no longer bind us. We are FREE to create our own experiences as we choose.
We are the masters, remembering that all Life is our masterpiece.


A modern adaptation of the Jane Austen classic written by Kate Hamill. Presented by Theatre Macon at 438 Cherry St., Macon.
$25. $20 seniors 60 and older, $15 students up to age 22 and military. 8 p.m. Jan. 25-26 and Feb. 1-2; 7:30 p.m. Jan. 31; 2:30 a.m. Jan. 27 and Feb. 3.
Show includes sculpture, jewelry, textiles, glasswork, metal, wood, ceramics, etc. Presented by Middle Georgia Art Association at Middle Georgia Art Association Gallery, 2330 Ingleside Ave., Macon.
Free. Noon and 6 p.m. through Feb. 9.
An exhibit of works by artist Andrew Catanese. Presented by Macon Arts Alliance at Macon Arts Gallery, 486 First St., Macon.
Free. 9 a.m. Jan. 25.
A performance of plays that are written, rehearsed and performed within a 24 hour period. Presented by Georgia College Theatre and Georgia College at Max Noah Recital Hall - Georgia College Department of Music and Theatre, Milledgeville.
$6, $5 for Georgia College faculty and staff and non-Georgia College students, $3 Georgia College students. 7:30 p.m. Jan. 26.
Singer/songwriter Maggie Renfroe will be in concert at to benefit the Fuller Center for Housing of Macon and help renovate derelict houses. Presented by The Library Ballroom and Macon Fuller Center for Housing at The Library Ballroom, 652 Mulberry St, Macon.
$20 advance, $25 day of show. 7:30 p.m. Jan. 26.
Create a beautiful mug in a laid back environment. Ages. 10 and older. All materials are included. The workshop last hour to 90 minutes. Presented by Yen-Ting Chiu Ceramics at stARTup Studios, 1055 Riverside Drive, Macon.
$35 per person/per mug. 2 p.m. and 4 p.m. Jan. 26.
Bring a bottle of your favorite wine or other beverage to sip on, bring a friend, and learn to create an 11x14 painting. No painting experience required. An artist will guide you through the steps. $28 includes all materials for the class. Presented by The 567 Center for Renewal at 456 First St., Macon.
$28, includes all materials (except the drinks). 7 p.m. Jan. 26.
Learn to create a painting guided by an artist. For kids age 6-12. Presented by The 567 Center for Renewal at 456 First St., Macon.
$20, includes all materials. 10:30 a.m. Jan. 26.
Learn to create a painting guided by an artist. Presented by The 567 Center for Renewal at 456 First St., Macon.
$28, includes all materials. 2 p.m. Jan. 26.
The movie will be coupled with a discussion of violence against women. Presented by Douglass Theatre at 355 Martin Luther King Jr. Blvd., Macon.
$10. 5:30 p.m. Jan. 27.
The Middle Georgia Harp Ensemble and the Middle Georgia Flute Choir perform on stage together. Presented by Middle Georgia Flute Choir and Middle Georgia Harp Ensemble at Fickling Hall, Mercer University, 1329 Adams St., Macon.
Free. 2 p.m. Jan. 27.
Features breathtaking special effects, concert style sound and lighting and three rings bursting with excitement alnd laughter. Presented by Garden Bro.s Circus at Macon Coliseum, 200 Coliseum Drive, Macon.
$20, $10 kids, $36 VIP adult seating, $20 VIP kids seating. Noon Jan. 27.
$10 per class per person. No partner necessary. 7 p.m. Jan. 28-March 4.
One of the most critically acclaimed films of all time. In post-war Italy, a working-class man's bicycle is stolen. He and his son set out to find it. Presented by Douglass Theatre at 355 Martin Luther King Jr. Blvd., Macon.
$5, free with student ID. 7:30 p.m. Jan. 31.
Clementine Margaine is opera's ultimate seductress, opposite Roberto Alagna. Louis Langree conducts Richard Eyre's lively production, a favorite in the Met's repertoire. Informational chat at 1:30 p.m. by Mary Keating of Georgia Military College. Presented by Douglass Theatre at 355 Martin Luther King Jr. Blvd., Macon.
$24, $20, $15. 2 p.m. Feb. 3.
Deborah Masters combines religious, personal and social imagery to evoke the essence of the living and the dead. Suspended from the ceiling, monumental sculptural heads with garments reflect the people she has known and venerated. Presented by Museum of Arts and Sciences at 4182 Forsyth Road, Macon.
Free with regular museum admission. 10 a.m. and 1 p.m. through April 14.
Rock and stroll through Macon's legendary and notorious music history. See the landmarks and favorite haunts of some of Southern music's most legendary players as well as the backstage cast of characters who played a crucial role in their fame. Presented by Rock Candy Tours at Rookery, 543 Cherry St., Macon.
$15, 24-hour reservations are required. 7:30 p.m. daily.
Rock and roll through Macon's music history with a driving tour that traces the journey of Southern rock and soul legends and their landmarks along the way. Tickets can be purchased at rockcandytours.com. Presented by Rock Candy Tours at Visit Macon Downtown Welcome Center, 450 Martin Luther King Jr. Blvd., Macon.
Enzo Staiola, left, and Lamberto Maggiorani star in "The Bicycle Thief," being shown at the Douglass Theatre on Jan. 31.


text:
The Blocks Pop-Up market coming to Belmont-DeVilliers for holidays
Madison Arnold
Pensacola will have another market this holiday season, but this one is not on Palafox.
The Blocks Pop-Up market will be held in Belmont-DeVilliers beginning Friday and running on weekends through Christmas.
The event aims to give vendors affected by Hurricane Sally and minority-owned businesses a consistent place to sell their merchandise for the holiday season, said Charles Houston, operations manager for the Studer Community Institute Building.
Studer Properties developed Savoy Place at 321 N. De Villiers St.
"We know that this has been a tough year for a lot of our vendors and a lot of our local community and local business owners," Houston said. "It also brings something new and different to the Belmont-DeVilliers neighborhood."
While Houston is helping to run the market, it will take place in the vacant retail section of new Savoy Place apartment complex in Belmont-DeVilliers. The space has yet to have a tenant so workers this week were finishing up measures like adding sheetrock to the walls to make it conducive for visitors.
Apartments open:Savoy Place apartments, named to honor iconic ballroom, set to open in Belmont-DeVilliers
Market expansion:DIB looks at potential ways to expand Palafox Market by closing streets for more vendors
Streetscape work:Belmont-DeVilliers project aims to restore neighborhood to glory days
The market starts this Friday and will continue on Fridays, Saturdays and Sundays for three weeks until the final market Dec. 20. Hours are from 4 to 8 p.m. Fridays, 10 a.m. to 6 p.m. Saturdays and noon to 5 p.m. Sundays.
Houston said shoppers can expect a variety of vendors throughout the weekends. A total of 26 can fit in the space at one time.
One of those vendors will be the brand-new Taste of Pensacola, which will make its debut at the market. Tia Robbins, founder of Taste of Pensacola, stumbled onto the market when she inquired about renting a spot in Savoy Place to open her business.
Instead, she's taking the opportunity to test her concept of a local gifts curation company. Her booth will feature products from seven local female "makers and bakers" that shoppers can choose from to make a gift basket.
"The Blocks is special. Belmont-DeVilliers is a special historic place and I think with that space, if they don't have anything going on in there, what a perfect place to really highlight minority-owned businesses," she said. "There's so many markets and there's not enough room to showcase all these makers and bakers."
For TaLacey Stallworth, the owner of VisuallyLaced, a company that sells products like handbags and candles, the Blocks will be the fourth market she's participated in so far. She founded the business in 2015 when she was in college but actually had a positive year in 2020 after shifting to also making and selling face masks.
She said she has high expectations for this market since it is located in Belmont-DeVilliers, a place where she spent a lot of time before going to college.
"I graduated college. I feel very accomplished to go back to where I started from but from a different perspective," she said. "It's just great to see Pensacola changing and changing culturally and adding diversity to a lot of things that I feel like we didn't really have when I was younger."
Pensacola-area development projects to watch in 2022: From luxury apartments to parks Pensacola prosecutors take on new case: Mentoring 'little brothers' and 'little sisters' Marlette: Gaetz's fate in federal court? Capt. Terrence 'Village' Shashaty takes over command of NAS Pensacola
Charles McCaskill Jr., a local self-published author, usually sells his poetry books at his own events but decided to dive into selling at markets with the Blocks. His third book recently come out and McCaskill had to have a much smaller launch than normal.
Much of his material covers grief, loss and his experience growing up in Pensacola.
He said he hoped the variety of items at the market will help shoppers who come for a particular vendor be exposed to products they might not have been otherwise.
"I feel like it's going to be a little bit of a learning curve the first go-around. I hope that if it's a little slower or people are a little less enthused right away, I hope we can just keep going because we're in an unprecedented time with COVID restrictions," McCaskill said.
Madison Arnold can be reached at marnold@pnj.com and 850-435-8522.