text:
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif

using System;
using System.Collections;
using System.Text;

namespace Cubiquity
{
	namespace Impl
	{
		public class OctreeNode : MonoBehaviour
		{
            [System.NonSerialized]
            public uint structureLastSynced;
			[System.NonSerialized]
            public uint propertiesLastSynced;
            [System.NonSerialized]
            public uint meshLastSynced;
            [System.NonSerialized]
            public uint nodeAndChildrenLastSynced;
            [System.NonSerialized]
            public bool renderThisNode;
			[System.NonSerialized]
			public Vector3 lowerCorner;
			[System.NonSerialized]
			public GameObject[,,] children;

            [System.NonSerialized]
            public uint height;

			public static GameObject CreateOctreeNode(uint nodeHandle, GameObject parentGameObject)
			{
                // Get node position from Cubiquity
                CuOctreeNode cuOctreeNode = CubiquityDLL.GetOctreeNode(nodeHandle);
                int xPos = cuOctreeNode.posX, yPos = cuOctreeNode.posY, zPos = cuOctreeNode.posZ;

                // Build a corresponding game object
				StringBuilder name = new StringBuilder("OctreeNode (" + xPos + ", " + yPos + ", " + zPos + ")");
				GameObject newGameObject = new GameObject(name.ToString ());
                newGameObject.hideFlags = HideFlags.HideInHierarchy;

                // Use parent properties as appropriate
                newGameObject.transform.parent = parentGameObject.transform;
                newGameObject.layer = parentGameObject.layer;

                // It seems that setting the parent does not cause the object to move as Unity adjusts
                // the child transform to compensate (this can be seen when moving objects between parents
                // in the hierarchy view). Reset the local transform as shown here: http://goo.gl/k5n7M7
                newGameObject.transform.localRotation = Quaternion.identity;
                newGameObject.transform.localPosition = Vector3.zero;
                newGameObject.transform.localScale = Vector3.one;

                // Attach an OctreeNode component
                OctreeNode octreeNode = newGameObject.AddComponent<OctreeNode>();
                octreeNode.lowerCorner = new Vector3(xPos, yPos, zPos);

                // Does the parent game object have an octree node attached?
				OctreeNode parentOctreeNode = parentGameObject.GetComponent<OctreeNode>();
				if(parentOctreeNode)
				{
                    // Cubiquity gives us absolute positions for the Octree nodes, but for a hierarchy of
                    // GameObjects we need relative positions. Obtain these by subtracting parent position.
                    newGameObject.transform.localPosition = octreeNode.lowerCorner - parentOctreeNode.lowerCorner;
				}
				else
				{
                    // If not then the parent must be the Volume GameObject and the one we are creating
                    // must be the root of the Octree. In this case we can use the position directly.
					newGameObject.transform.localPosition = octreeNode.lowerCorner;
				}

				return newGameObject;
			}

            public static void syncNode(ref uint availableSyncOperations, GameObject nodeGameObject, uint nodeHandle, GameObject voxelTerrainGameObject)
			{
                OctreeNode octreeNode = nodeGameObject.GetComponent<OctreeNode>();
                CuOctreeNode cuOctreeNode = CubiquityDLL.GetOctreeNode(nodeHandle);

                ////////////////////////////////////////////////////////////////////////////////
                // Has anything in this node or its children changed? If so, we may need to syncronise the node's properties, mesh and
                // structure. Each of these can be tested against a timestamp. We may also need to do this recursively on child nodes.
                ////////////////////////////////////////////////////////////////////////////////
                if (cuOctreeNode.nodeOrChildrenLastChanged > octreeNode.nodeAndChildrenLastSynced)
                {
                    bool resyncedProperties = false; // See comments where this is tested - it's a bit of a hack

                    ////////////////////////////////////////////////////////////////////////////////
                    // 1st test - Have the properties of the node changed?
                    ////////////////////////////////////////////////////////////////////////////////
                    if (cuOctreeNode.propertiesLastChanged > octreeNode.propertiesLastSynced)
                    {
                        octreeNode.renderThisNode = cuOctreeNode.renderThisNode != 0;
                        octreeNode.height = cuOctreeNode.height;
                        octreeNode.propertiesLastSynced = CubiquityDLL.GetCurrentTime();
                        resyncedProperties = true;
                    }

                    ////////////////////////////////////////////////////////////////////////////////
                    // 2nd test - Has the mesh changed and do we have time to syncronise it?
                    ////////////////////////////////////////////////////////////////////////////////
                    if ((cuOctreeNode.meshLastChanged > octreeNode.meshLastSynced) && (availableSyncOperations > 0))
                    {
                        if (cuOctreeNode.hasMesh == 1)
                        {
                            // Set up the rendering mesh
                            VolumeRenderer volumeRenderer = voxelTerrainGameObject.GetComponent<VolumeRenderer>();
                            if (volumeRenderer != null)
                            {
                                MeshFilter meshFilter = nodeGameObject.GetOrAddComponent<MeshFilter>() as MeshFilter;
                                if(meshFilter.sharedMesh == null)
                                {
                                    meshFilter.sharedMesh = new Mesh();
                                }
                                MeshRenderer meshRenderer = nodeGameObject.GetOrAddComponent<MeshRenderer>() as MeshRenderer;

                                if (voxelTerrainGameObject.GetComponent<Volume>().GetType() == typeof(TerrainVolume))
                                {
                                    MeshConversion.BuildMeshFromNodeHandleForTerrainVolume(meshFilter.sharedMesh, nodeHandle, false);
                                }
                                else if (voxelTerrainGameObject.GetComponent<Volume>().GetType() == typeof(ColoredCubesVolume))
                                {
                                    MeshConversion.BuildMeshFromNodeHandleForColoredCubesVolume(meshFilter.sharedMesh, nodeHandle, false);
                                }

                                meshRenderer.enabled = volumeRenderer.enabled && octreeNode.renderThisNode;

                                // For syncing materials, shadow properties, etc.
                                syncNodeWithVolumeRenderer(nodeGameObject, volumeRenderer, false);
                            }

                            // Set up the collision mesh
                            VolumeCollider volumeCollider = voxelTerrainGameObject.GetComponent<VolumeCollider>();
                            if (volumeCollider != null)
                            {
                                bool useCollider = volumeCollider.useInEditMode || Application.isPlaying;

                                if (useCollider)
                                {
                                    // I'm not quite comfortable with this. For some reason we have to create this new mesh, fill it,
                                    // and set it as the collider's shared mesh, whereas I would rather just pass the collider's sharedMesh
                                    // straight to the functon that fills it. For some reason that doesn't work properly, and we see
                                    // issues with objects falling through terrain or not updating when part of the terrain is deleted.
                                    // It's to be investigated further... perhaps we could try deleting and recreating the MeshCollider?
                                    // Still, the approach below seems to work properly.
                                    Mesh collisionMesh = new Mesh();
                                    if (voxelTerrainGameObject.GetComponent<Volume>().GetType() == typeof(TerrainVolume))
                                    {
                                        MeshConversion.BuildMeshFromNodeHandleForTerrainVolume(collisionMesh, nodeHandle, true);
                                    }
                                    else if (voxelTerrainGameObject.GetComponent<Volume>().GetType() == typeof(ColoredCubesVolume))
                                    {
                                        MeshConversion.BuildMeshFromNodeHandleForColoredCubesVolume(collisionMesh, nodeHandle, true);
                                    }

                                    MeshCollider meshCollider = nodeGameObject.GetOrAddComponent<MeshCollider>() as MeshCollider;
                                    meshCollider.sharedMesh = collisionMesh;
                                }
                            }
                        }
                        // If there is no mesh in Cubiquity then we make sure there isn't one in Unity.
                        else
                        {
                            MeshCollider meshCollider = nodeGameObject.GetComponent<MeshCollider>() as MeshCollider;
                            if (meshCollider)
                            {
                                Utility.DestroyOrDestroyImmediate(meshCollider);
                            }

                            MeshRenderer meshRenderer = nodeGameObject.GetComponent<MeshRenderer>() as MeshRenderer;
                            if (meshRenderer)
                            {
                                Utility.DestroyOrDestroyImmediate(meshRenderer);
                            }

                            MeshFilter meshFilter = nodeGameObject.GetComponent<MeshFilter>() as MeshFilter;
                            if (meshFilter)
                            {
                                Utility.DestroyOrDestroyImmediate(meshFilter);
                            }
                        }

                        octreeNode.meshLastSynced = CubiquityDLL.GetCurrentTime();
                        availableSyncOperations--;
                    }

                    // We want to syncronize the properties before the mesh, so that the enabled flag can be set correctly when the mesh
                    // is created. But we also want to syncronize properties after the mesh, so we can apply the correct enabled flag to
                    // existing meshes when the node's 'renderThisNode' flag has changed. Therefore we set the 'resyncedProperties' flag
                    // previously to let ourseves know that we should come back an finish the propertiy syncing here. It's a bit of a hack.
                    if (resyncedProperties)
                    {
                        VolumeRenderer volumeRenderer = voxelTerrainGameObject.GetComponent<VolumeRenderer>();
                        if(volumeRenderer != null)
                        {
                            syncNodeWithVolumeRenderer(nodeGameObject, volumeRenderer, false);
                        }

                        VolumeCollider volumeCollider = voxelTerrainGameObject.GetComponent<VolumeCollider>();
                        if (volumeCollider != null)
                        {
                            syncNodeWithVolumeCollider(nodeGameObject, volumeCollider, false);
                        }
                    }

                    uint[, ,] childHandleArray = new uint[2, 2, 2];
                    childHandleArray[0, 0, 0] = cuOctreeNode.childHandle000;
                    childHandleArray[0, 0, 1] = cuOctreeNode.childHandle001;
                    childHandleArray[0, 1, 0] = cuOctreeNode.childHandle010;
                    childHandleArray[0, 1, 1] = cuOctreeNode.childHandle011;
                    childHandleArray[1, 0, 0] = cuOctreeNode.childHandle100;
                    childHandleArray[1, 0, 1] = cuOctreeNode.childHandle101;
                    childHandleArray[1, 1, 0] = cuOctreeNode.childHandle110;
                    childHandleArray[1, 1, 1] = cuOctreeNode.childHandle111;

                    ////////////////////////////////////////////////////////////////////////////////
                    // 3rd test - Has the structure of the octree node changed (gained or lost children)?
                    ////////////////////////////////////////////////////////////////////////////////
                    if (cuOctreeNode.structureLastChanged > octreeNode.structureLastSynced)
                    {
                        //Now syncronise any children
                        for (uint z = 0; z < 2; z++)
                        {
                            for (uint y = 0; y < 2; y++)
                            {
                                for (uint x = 0; x < 2; x++)
                                {
                                    if (childHandleArray[x, y, z] != 0xFFFFFFFF)
                                    {
                                        uint childNodeHandle = childHandleArray[x, y, z];

                                        if (octreeNode.GetChild(x, y, z) == null)
                                        {
                                            octreeNode.SetChild(x, y, z, OctreeNode.CreateOctreeNode(childNodeHandle, nodeGameObject));
                                        }
                                    }
                                    else
                                    {
                                        if (octreeNode.GetChild(x, y, z))
                                        {
                                            Utility.DestroyOrDestroyImmediate(octreeNode.GetChild(x, y, z));
                                            octreeNode.SetChild(x, y, z, null);
                                        }
                                    }
                                }
                            }
                        }

                        octreeNode.structureLastSynced = CubiquityDLL.GetCurrentTime();
                    }

                    ////////////////////////////////////////////////////////////////////////////////
                    // The last step of syncronization is to apply it recursively to our children.
                    ////////////////////////////////////////////////////////////////////////////////
                    for (uint z = 0; z < 2; z++)
                    {
                        for (uint y = 0; y < 2; y++)
                        {
                            for (uint x = 0; x < 2; x++)
                            {
                                if (octreeNode.GetChild(x, y, z) != null && availableSyncOperations > 0)
                                {
                                    OctreeNode.syncNode(ref availableSyncOperations, octreeNode.GetChild(x, y, z), childHandleArray[x, y, z], voxelTerrainGameObject);
                                }
                            }
                        }
                    }

                    // We've reached the end of our syncronization process. If there are still sync operations available then
                    // we did less work then we could have, which implies we finished. Therefore mark the whole tree as synced.
                    if (availableSyncOperations > 0)
                    {
                        octreeNode.nodeAndChildrenLastSynced = CubiquityDLL.GetCurrentTime();
                    }
                }
			}

            public static void syncNodeWithVolumeRenderer(GameObject nodeGameObject, VolumeRenderer volumeRenderer, bool processChildren)
            {
                OctreeNode octreeNode = nodeGameObject.GetComponent<OctreeNode>();

                MeshRenderer meshRenderer = nodeGameObject.GetComponent<MeshRenderer>();
                if (meshRenderer != null)
                {
                    meshRenderer.enabled = volumeRenderer.enabled && octreeNode.renderThisNode;

                    meshRenderer.receiveShadows = volumeRenderer.receiveShadows;

					// Shadow casting behaviour is specified differently in Unity 4 vs. Unity 5.
#if (UNITY_4_3 || UNITY_4_5 || UNITY_4_6)
                    meshRenderer.castShadows = volumeRenderer.castShadows;
#else
					meshRenderer.shadowCastingMode = volumeRenderer.castShadows ?
						UnityEngine.Rendering.ShadowCastingMode.On : UnityEngine.Rendering.ShadowCastingMode.Off;
#endif

                    switch (octreeNode.height)
                    {
                        case 0:
                            meshRenderer.sharedMaterial = volumeRenderer.material;
                            break;
                        case 1:
                            meshRenderer.sharedMaterial = volumeRenderer.materialLod1;
                            break;
                        case 2:
                            meshRenderer.sharedMaterial = volumeRenderer.materialLod2;
                            break;
                        default:
                            meshRenderer.sharedMaterial = volumeRenderer.material;
                            break;
                    }
#if UNITY_EDITOR
                    EditorUtility.SetSelectedWireframeHidden(meshRenderer, !volumeRenderer.showWireframe);
#endif
                }

                if (processChildren)
                {
                    foreach (Transform child in nodeGameObject.transform)
                    {
                        OctreeNode.syncNodeWithVolumeRenderer(child.gameObject, volumeRenderer, processChildren);
                    }
                }
            }

            public static void syncNodeWithVolumeCollider(GameObject nodeGameObject, VolumeCollider volumeCollider, bool processChildren)
            {
                MeshCollider meshCollider = nodeGameObject.GetComponent<MeshCollider>();
                if (meshCollider != null)
                {
                    meshCollider.enabled = volumeCollider.enabled;
                }

                if (processChildren)
                {
                    foreach (Transform child in nodeGameObject.transform)
                    {
                        OctreeNode.syncNodeWithVolumeCollider(child.gameObject, volumeCollider, processChildren);
                    }
                }
            }

			public GameObject GetChild(uint x, uint y, uint z)
			{
				if(children != null)
				{
					return children[x, y, z];
				}
				else
				{
					return null;
				}
			}

			public void SetChild(uint x, uint y, uint z, GameObject gameObject)
			{
				if(children == null)
				{
					children = new GameObject[2, 2, 2];
				}

				children[x, y, z] = gameObject;
			}
		}
	}
}


Finding cheap airfare is the fastest way to cut down on your travel expenses, especially in more expensive regions like Europe. Next time you're planning to travel around Europe, check out these cheap airlines to stretch your budget.
When flying on cheap airlines, keep an eye out for fees (there's a reason the airfare is so affordable). Read the fine print for the airline you're interested in to avoid booking, check-in, and luggage fees.


Chili season is in full swing. The weather has turned blustery and football has taken over Sundays. Many people cook chili at home, but like all comfort food, sometimes it just tastes best when it's cooked for you. Here are 10 of the best places to grab a bowl of chili around Milwaukee.
The gold standard for chili in Milwaukee, Real Chili is especially loved by Marquette students thanks to its campus location. The chili recipe goes back to at least 1931 when they opened in MKE, and it's served similar to Cincinnati-style chili, with your choice of beans, spaghetti noodles, mounds of shredded cheese and other toppings. Order "the Marquette" to get a medium-spicy bowl with spaghetti and beans, then top it with endless oyster crackers. People tend to either love Real Chili or hate it, but no one can deny its iconic status in Milwaukee.
The chili at this exceptional downtown dive bar is home style, so you'll find ground beef, beans and veggies like green peppers and celery. It leans toward the brothy—as opposed to thick tomato sauce—side of the chili spectrum, but it's still rich and meaty. Get it KC's style and it's served over a big piece of crusty bread with sour cream and cheese on top, or try it on a chili cheese dog on Mondays.
Beer and chili go together well, which is presumably why Stubby's has chili on the menu. They go a step further in their Pigs n' Pints chili and use beer in the recipe. It's pork based, with beer and various types of chiles, and has won local chili cookoff contests. Standard toppings are available, but the best way to try it may be on top of their Westsider nachos. An already massive pile of chips, cheese, pico and corn salsa gets covered in chili and then topped with big scoops of sour cream and guacamole.
The chili at Beans & Barley is vegetarian, but meat eaters seem to love it just as much as herbivores. It's more filling than you'd imagine a veggie chili to be, thanks to the substantial addition of bulgur wheat to the traditional base of tomatoes, beans, peppers and onions. If that's still not enough for you, get it topped with cheese, onions and sliced avocado, a primo chili topper that isn't a common option around here.
The restaurant inside the Harley-Davidson Museum serves up a meaty, Texas-style roadhouse beef chili, perfect for satisfying your appetite after a long Harley ride. You can get it in a bowl with cheese, onion and sour cream, but why stop there? It's also available on top of a baked potato, Cincy-style with noodles as an entree, and stuffed into mini cornbread mini muffins as an appetizer. Cornbread and chili are a matched pair, so why not?
If you can deal with the crowd that leans heavily toward college age (this is Water St., after all), then you'll be rewarded with a top notch bowl of chili. They call it Texas red, and it's chock full of meat, likely because BBQ makes up most of the menu. Steak, brisket and bacon are mixed with bourbon, beer and a great hit of hot spice. If you want to temper the heat a little, try it on top of mac and cheese or chili cheese fries.
Known primarily as a sports bar with a popular Miller Park shuttle, chili is the best thing I've found on Rounding Third's menu (though, their burgers are pretty solid, too). It's thick and hearty, with black beans, corn and just a little bit of heat. It's just fine in a crock on its own, but go for the gold and get the chili cheese fries. Thick, crisp fries hold up amazingly well under a blanket of chili, then topped with grated cheddar, red onion and sour cream. They're the best chili cheese fries around.
Suitable for its neighborhood, the chili at Fuel Cafe in Riverwest is vegan. It's only available on weekends and does sell out, but it's a delicious bargain when you can get it. Lots of peppers, onions, beans and tomatoes make up the base, and you can get it topped with noodles, sour cream (vegan or dairy), cheddar and onions all for free. Also free: the big chunk of French bread and butter served on the side.
The Fire Pit is located on the first floor of Potawatomi, in the back corner of the old casino area. It's one of the best places to watch sports thanks to giant TVs and great viewing angles. They have a number of Native American-inspired dishes, including a chili made with bison meat, not beef. Bison is lean and rich, which makes it perfect for a long-cooking chili. Try it with an order of fry bread on the side, on their nachos or in a quesadilla.
Available at both the Wauwatosa and downtown locations, the chili at Jackson's is made with filet, ground chuck and andouille sausage. Andouille is a Cajun sausage often used in jambalaya, giving this chili a unique spice. Perhaps the best part of the chili here are the toppings, though: onions, sour cream and fried cheese curds. Why don't more places put cheese curds on top of their chili? Get on that, restaurants.


Industrial hygiene is the science of anticipating, recognizing, evaluating, and controlling workplace conditions that may cause workers' injury or illness.
At Evergreen AES, we provide industrial hygiene solutions and environmental compliance services to industrial, commercial, institutional and governmental customers throughout Kentucky, Indiana, Ohio, and Tennessee. Our experienced industrial hygienists to perform environmental monitoring and testing to detect the extent of worker exposure to potentially harmful conditions, and employ engineering, work practice controls, and other methods to control potential health hazards.
Evergreen AES recognizes that engineering, work practice, and administrative controls are the primary means of reducing employee exposure to occupational hazards. Engineering controls minimize employee exposure by either reducing or removing the hazard at the source or isolating the worker from the hazards. Evergreen AES can assist clients in eliminating toxic chemicals and replacing harmful toxic materials with less hazardous ones; enclosing work processes or confining work operations; and installing general and local ventilation systems.
Evergreen AES can also recommend administrative controls such as scheduling production and workers' tasks in ways that minimize exposure levels to harmful environments. In addition, use of personal protective equipment such as gloves, safety goggles, helmets, safety shoes, and protective clothing further improves workplace safety. In order to maximize the effectiveness of the industrial hygiene plan, personal protective equipment must be individually selected, properly fitted and periodically refitted, conscientiously and properly worn, regularly maintained, and replaced as necessary.
While working with our customers to develop effective and thorough industrial hygiene plans and recommendations for our clients, our experienced staff are able to design and implement cost-effective and practical health and safety programs that efficiently manage any risk and liability factors associated with the business.


text:
Bioneers At Standing Rock
Alexis Bunten Bioneers NewsIndigeneityJustice Article
An update from the front lines by the Bioneers Indigeneity Program
#DAPL, #waterislife, #KeepItInTheGround, #sacredstonecamp, #bioneers
Many bioneers are on the frontlines protesting the 1,200 mile, $3.7 billion Dakota Access Pipeline, or DAPL. Dallas Goldtooth, Kandi Mosset, Xiuhezcatl Martinez, and Clayton Thomas-Muller are among the thousands of Indigenous peoples from Alaska to Florida who have joined "the largest gathering of Native Americans in more than 100 years," according to the BBC. They are protesting on behalf of the millions of people whose drinking water is threatened by the pipeline construction, as well as the plants and animals that also depend on clean water.
Indigenous Environmental Network Organizer and Bioneers faculty member Dallas Goldtooth describes the effort:
"As Oceti Sakowin people, our relationship to the land and water is the foundation of our identity. Understand this, we will stop this pipeline… Our resistance is based on love for our people and the land, not out of hate for others. We utilize peaceful direct action to demonstrate our will and lead with the original instructions our ancestors have left for us. . . We must keep this oil in the ground for the benefit of all future generations."
Dallas Goldtooth at the Standing Rock Camp.
(photo: Josué Rivas, the Guardian)
Fossil Fuels and Cultural Trauma
The proposed pipeline cuts along several Native American reservations, crossing through sacred tribal lands that are protected by treaty. Over the Labor Day weekend, Energy Transfer Partners, the company behind the pipeline, illegally bulldozed burial grounds and sacred sites of prayer in a violent attack on the Native "protectors" who are standing bravely on behalf of the water and land. Paid security personnel pepper-sprayed and released attack dogs on the protectors.
We are reminded in this horrifying moment to acknowledge the ongoing traumas that our Indigenous brothers and sisters around the world face every day, as they stand on the frontlines resisting the fossil fuel industry. Standing Rock is another pinnacle moment in our human history. Or, as Bioneers co-founder, Nina Simons, put it, "Standing Rock is this generation's Selma."
"It's a familiar story in Indian Country," writes the Chairman of the Standing Rock Sioux, David Archambault," in a New York Times Op Ed piece.
"This is the third time that the Sioux Nation's lands and resources have been taken without regard for tribal interests. The Sioux peoples signed treaties in 1851 and 1868. The government broke them before the ink was dry. When the Army Corps of Engineers dammed the Missouri River in 1958, it took our riverfront forests, fruit orchards and most fertile farmland to create Lake Oahe. Now the Corps is taking our clean water and sacred places by approving this river crossing. Whether it's gold from the Black Hills or hydropower from the Missouri or oil pipelines that threaten our ancestral inheritance, the tribes have always paid the price for America's prosperity."
Too often, Indigenous voices are silenced when it comes to threats to environmental and social health. The protection of Indigenous homelands and cultural landscapes are critical to the wellbeing of all Americans. Beyond the flagrant and shocking destruction of burial grounds and sacred sites, beyond unleashing attack dogs on innocent victims of the fossil fuel industry, this issue shows that Indigenous voices of protest speak for all of us. We all have the right to clean drinking water. Our children and grandchildren don't deserve to inherit the global warming crisis caused by our generation's relentless fossil fuel consumption.
You can follow what's happening live at Standing Rock, by following the Sacred Stone Camp and Dallas Goldtooth via social media.
To learn more about Native American activism against the fossil fuel industry, check out these past Bioneers' videos:
Indigenous Women on the Frontlines, Kandi Mosset
Stopping the Energy Colonization of Sacred Native Lands, Clayton Thomas-Muller
Repairing our connection to the earth, Xiuhtezcatl Martinez
You are also invited to join us for live discussion October 20-23 at the Marin Center in San Rafael, California. Many of the bioneers protecting our rights at Standing Rock will be at the 2016 Bioneers Conference to talk about these critical issues. Highlights include:
A Preconference intensive: Looking to Our Original Instructions for Climate Solutions
Indigenous Rising: Solutions to the Climate Crisis
Act Now Before It's Too Late: Messages From Indigenous Elders
Dallas Goldtooth will make a special presentation and update on the situation
For more information, feel free to contact us at natives@bioneers.org
Cara Romero (Chemhuevi) and Alexis Bunten (Aleut/Yup'ik)
Bioneers Indigeneity Program
Conserving Native LandsCross-Cultural Alliancesenvironmental justiceHuman RightsRacial JusticeRights of Nature
Beyond Capitalism and Socialism: A Conversation On Inventing the Regenerative Economy
The Bioneers Pulse: Climate Solutionaries Spotlight
Terry Tempest Williams, Eve Ensler, Valarie Kaur & Nina Simons: Grief, Sacred Rage, Reckoning, and Revolutionary Love

redpajama_set_name: RedPajamaCommonCrawl


It's difficult to explain in a few lines, let's try it anyhow.
And one history in common : the surf.
With the purpose to carry what we really like and what make us unique even in our job dimension.
It's a special work that we do for several years with real passion from which we seek to derive satisfactions.
That kind of satisfaction that keep us on the wave of pursuing and realizing our dreams.
The two of us are working in parallel but always with different and personal ways hooked by the same ambiences : water , snow and air …important elements for life.
Alessandro and Valerio are our names: friends since our birth and surf lovers since our first wave.
The feelings of catching waves give us always unique and unforgettable trips.
We grew up together and we got involved into the surf mood influencing each other more and more…until now that after 20 years this wonderful sport has become our reason of life.
The name Boardy wants to indicate that is not just about surfboarders but it's extended to other cool sports such as snowboarding and skateboarding.
In a few words this website , with its products , will carry you ,swimming,in a different dimension.
We'll try to show you something different with new shades, without forgetting about quality, which remains always.
So don't hesitate : enter in BOARDY.IT open a new account and browse the catalogue. You won't regret it. It will have changes and updates so you have to remember to take a look at the NEWS LETTER.
At this point we just wish you a good sailing aboard of BOARDY.IT !!


text:
Ⓒ Ginkgo Press
your tour staff
As of August 24 at 8:30pm, the tour is full. If you would like to be on the waiting list, please send an email to Joan Peterson. (There are times when people have to cancel.)
Joan Peterson and Marcella Croce,
authors of EAT SMART IN SICILY
Invite you to
"Embark on a Tasting Adventure" In Sicily
Rich with seafood, citrus, olives, and almond sweets, the cuisine of the sun-drenched island of Sicily reflects the influence of Greeks, Norman French, Tunisians, and Italians, among others.
Let us take you to the heart of Sicilian culture through an exploration of its cuisine. Sample the most authentic regional cuisine in homes, neighborhood eateries, and elegant gourmet restaurants. Enjoy informative culinary demonstrations with renowned chefs and home cooks as they prepare delectable, traditional Sicilian dishes. Visit wineries and the vibrant, bustling markets for spices and a cornucopia of other foodstuffs.
This tour is more than just about eating, however, We visit classic historical sites on route to help you digest…. and stop here and there to shop and relax.
Thursday September 27, 2018 - Depart for Sicily
Welcome to beautiful Sicily. You arrive today in Palermo, the Italian Capital of Culture for 2018. Palermo has an exciting blend of Medieval areas and posh residential sections with palatial villas awash with palm trees. Settle into Hotel La Torre, which is in walking distance of the colorful main square of the fishing village of Mondello 5 miles from downtown Palermo. Mondello is also a seaside resort filled with beautiful vistas.
Enjoy the afternoon at your leisure.
7:00pm Departure for Orientation Walk in Mondello and Welcome Dinner at Le Terrazze to begin your discovery of the flavors of Sicilian cuisine.
At the end of day settle into to Hotel La Torre.
Saturday September 29, 2018 - Palermo / Sferracavallo
Breakfast at the hotel.
9:00am Departure from hotel for Sightseeing Tour of Palermo's Architectural Treasures. Major sites will include:
Quattro Canti (Four Corners). These historic corners, built in the 17th century, have three-tiered Baroque facades that symbolically divide the city into four sections. The ornate facades have statues of the four patron saints of Palermo, the four Spanish kings of Sicily, and statues of the four seasons.
Chiesa della Martorana (Church of the Martorana) dominates the Piazza Bellini. Its architecture is a blend of Byzantine, Norman, and Baroque styles. Glittering Norman-Byzantine mosaics cover the interior and the columns that support the major cupola.
Adjacent to the Chiesa della Martorana is the small 12th-century Norman church, Chiesa di San Cataldo (Church of San Cataldo). It is topped by a row of three red domes. The austere, Medieval interior was never finished; the only decoration is mosaic tiles on the floor.
Chiesa di Santa Caterina is an important example of Sicilian Baroque. You will be overwhelmed by the lavish, ornate sculpture, marble inlay, and ceiling frescoes. Although begun in 1566, most of the internal decoration of Santa Caterina dates from the 17th and 18th centuries.
Lunch at a neighborhood eatery popular with locals.
Afternoon visit to the Palazzo dei Normanni (Palace of the Normans). The royal palace in the center of the old city, originally built by the Saracens in the 9th century, was subsequently enlarged by the Normans. During their rule it became the seat of the most splendid of Medieval European courts. The Spanish viceroys later used it as a residence. Since 1947, the Sicilian regional parliament has been housed here.
Within the Palazzo dei Normanni is the Cappella Palatina (Palatina Chapel), the splendid private royal chapel. It was built by Norman King Roger II between 1130-1140. Much of the interior is covered with exquisite mosaics.
Return to Hotel La Torre for a short rest.
Dinner at a fish restaurant in Sferracavallo.
Return to Hotel La Torre.
SUNDAY September 30, 2018 - Castelbuono / Cefalù
9:00am Departure from the hotel. Drive to Castelbuono, an attractive and lively town on the north slope of the Madonie Mountains. It was built around a 14th-century castle. The Madonie is the highest mountain range after Mt. Etna.
Browse the shops selling oils and sweets, especially nougat made with manna, a natural sweetener used as a sugar substitute in some local products in the area around Castelbuono. Interestingly, manna comes from the sap of a variety of ash tree unique to Madonie Park. Recently it has received special recognition from the Slow Food International Movement.
Lunch at the renowned Hostaria Nangalarruni in Castelbuono. Chef Giuseppe Carollo is an experienced mushroom hunter and specializes in dishes featuring them. A picture of him is on the cover of our culinary guide, Eat Smart in Sicily.
After lunch, drive to Cefalù, a charming maritime town and holiday resort on the northern coast of Sicily, built below a huge crag that once was the site of the Temple of Diana. Enjoy the sights in the Piazza del Duomo including the stunning Norman Cathedral and a multitude of enticing shops to explore.
Return to Hotel La Torre. Dinner on your own.
Ⓒ Marcella Croce
MONDAY October 1, 2018 - Erice / Marsala
9:00am Departure from hotel for Erice, the Medieval mountaintop fortress overlooking the Mediterranean Sea. On a clear day one can see Tunisia from the castle. The city offers charming old stone streets and several medieval churches.
Visit La Pasticceria di Maria Grammatico in Erice. Ms. Grammatico spent her early years in a convent-like orphanage in Erice where she learned to make the exquisite sweets and pastries that she now sells in her pastry shop. She will demonstrate making frutta di martorana, life-like fruit that are hand-molded of sweetened almond paste. Joining her will be Mary Taylor Simeti, author of Bitter Almonds, a biography of Ms. Grammatico. Afterwards we will enjoy a sampling of the treats sold in the shop.
Drive toward Marsala along the Via del Sale (salt road) to see the historic salt pans. Ever since Phoenician times, there has been a salt works in the area. Windmills to grind the salt and channel the water, and dazzling white mounds of salt covered with terracotta tiles make for a picturesque scene.
Visit and have lunch with couscous at the Museum of Salt at Nubia.
End the day by learning the wine-making process at the 150-year-old Pellegrino Winery, one of Sicily's foremost wine producers. Tour the Cantina in downtown Marsala and enjoy a Wine Tasting accompanied by a Tasting of Sicilian food.
Ⓒ Andrea Matranga
Tuesday October 2, 2018 - Palermo / Monreale
9:00am Departure to visit the Pasqualino Marionette Museum. The Puppet Theatre is one of the most well-known and popular forms of art of the Sicilian tradition.
Proceed to the Capo Market, one of Palermo's historical open-air food markets. Here you will discover the colors, tastes, smells, faces, and voices of the city. After the market visit the Massimo Theatre and Opera House, which is one of the major European theatres. It is the lyrical temple of Palermo. Construction was begun in 1875. The spectacular interior is embellished with works of art. In the main hall there are 1500 seats in a gallery and five tiers.
Lunch at the Caffè del Teatro Massimo.
Drive a short distance from Palermo to visit the magnificently adorned Duomo (Cathedral) high on a hill in Monreale. It was founded in 1174 by William II, the last of the great Norman kings and is widely regarded as the finest example of Norman architecture in Sicily. While the exterior of the Duomo is lovely, it provides no hint of the awesome splendor inside. The interior has a staggering array of gold leaf, glittering mosaics (68,220 square feet!), paintings, and colored marble.
Visit to a Ceramics and Mosaics Shop in Monreale.
Cooking Demonstration and Dinner with Giovanni Matranga and Marcella Croce. Marcella is co-author of Eat Smart in Sicily with Joan Peterson. She and her husband Giovanni were teachers and co-ordinators of Elderhostel Programs (now Road Scholar) in Sicily organized by Trinity College in Hartford, Connecticut for 20 years.
WEDNESDAY October 3, 2018 - Piazza Armerina / Modica
Breakfast at the hotel. Check out of hotel following breakfast.
9:00am Departure from hotel for the town of Piazza Armerina, famous for the nearby Roman Villa of Casale.
Demonstration and Lunch at Al Fogher, a restaurant set in an old railway gatekeeper's lodge on the outskirts of Piazza Armerina. Chef Angelo Treno serves excellent local food.
After lunch, visit the Roman Villa of Casale, one of several elaborate country lodges and villas built by Roman aristocrats as retreats. The polychrome floor mosaics of this villa are extensive and among the most beautiful in the world. The villa complex is a World Heritage Site. Excavated in the 1900s, it had been buried in mud from a landslide in the 12th century.
Depart for Modica, a jewel of a town reconstructed in the Baroque style in the 18th century after an earthquake razed the old city.
Check into L'Orangerie, a stylish Bed & Breakfast in the heart of Modica and in the nearby Residence delli Vausi.
The rest of the day at leisure.
Dinner at Osteria dei Sapori Perduti.
Return to L'Orangerie B&B / Residence delli Vausi.
THURSDAY October 4, 2018 - Modica / Syracuse
9:00am Chocolate demonstration at Di Lorenzo chocolate shop and departure for Syracuse.
The historic center of Syracuse is the island of Ortygia, which is linked to the mainland via two causeways. Major sightseeing sites in the historic center and the extensive archeological zone will include:
The Duomo (Cathedral). It is the last of a succession of religious structures that have existed on this site over 2500 years. The cathedral was built in the 7th century on the remains of the ancient Doric temple of Athena from the 5th century BCE. Inside the Duomo, the ancient Doric columns of the temple are embedded in the wall and are visible on the north side.
Parco Archeologico (Archeological Park). This park was created in the 1950s and contains most of the classical monuments from Greek and Roman Syracuse.
Teatro Greco (Greek Theatre). The theatre seated 15,000 spectators and was completely carved out of the rock.
Lunch at a typical trattoria in Syracuse.
Return to Modica.
Demonstration and Dinner at the esteemed Fattoria delle Torri in Modica, in what used to be the vaults of a patrician palazzo. Chef Peppe Barone, the inventive chef and owner, features seasonal regional produce in his dishes as well as the
famous chocolate of Modica. Aficionados declare the restaurant has the finest wine cellar in Sicily.
Return to L-Orangerie B&B / Residence delli Vausi.
FRIDAY October 5, 2018 - Catania / San Giovanni La Punta / Mascalucia
Breakfast at the hotel. Check out from the hotel after breakfast.
9:00am Departure for Catania, the second largest city in Sicily, bordered by Mt. Etna to the west, and the Mediterranean to the east.
Check in to hotel in nearby San Giovanni La Punta, the lovely Villa Paradiso dell'Etna.
Lunch at Azienda Agrituristica Trinita owned by the Bonajuto family. It is located in Mascalucia, a village on the eastern slope of Mt. Etna. The rural buildings of the agriturismo date back to 1609 and include the manor, stable, and millstone. The farm includes organic vegetable gardens and citrus groves that thrive on the rich volcanic soil. There also is a winery.
Afternoon sightseeing tour of the vibrant city of Catania including the Bonajuto Chapel, a small building hidden by the walls of an eighteenth century aristocratic palace. It is the only building of the late Middle Age to have survived the devastating earthquakes of 1693. It has been in the Bonajuto family for centuries.
Major sites in the splendid historic center of Catania will include:
Open-air Food Market
Piazza del Duomo, at the crossroads of the two main thoroughfares of the city, is surrounded by elegant baroque buildings. It is a UNESCO World Heritage site. In the middle of the square is Fontana dell'Elefante (Lava Stone Elephant Fountain).
Sant' Agata Cathedral. Agata is Catania's patron saint. Her final resting place is behind the marble walls. According to legend, her breasts were cut off for spurning the advances of a Roman governor of Sicily. Small, breast-shaped cakes called minne di Sant' Agata (St. Agatha's breasts) are dedicated to her.
Teatro Romano (Roman Theatre), including gladiator tunnels and the circular auditorium.
Stroll down Via Etnea to view the 4-foot Sicilian Pupi puppets and other local crafts.
Return to Villa Paradiso dell'Etna. Farewell Dinner at La Pigna restaurant in Villa Paradiso dell'Etna.
SATURDAY October 6, 2018
Depart for home from Catania Airport.
Eat Smart in Sicily
How to Decipher the Menu, Know the Market Foods & Embark on a Tasting Adventure - by Joan Peterson & Marcella Croce
Paperback - $13.95
2008 National Best Books Awards - Winner- Travel Guides - USABookNews.com
2009 Next Generation Indie Book Award - Finalist - Travel/Travel Guides
Eric Hoffer Book Award - First Runner Up - Reference/Travel
2008 from Planeta.com - Winner - Best Food Guidebook of the Year
EAT SMART ABROAD - SMARTPHONE APP


I love this line. If you haven't seen it before, it's the headline of an article posted last Spring in The Onion. In it, the satirical newspaper pokes fun at the hobbies that we are most passionate about, yet don't do for a living.
This is quite the interesting topic for sewists. For many of us, sewing certainly isn't a money-maker (especially if you spend about a month's worth of rent on the hobby each year like I do). And while I find my day job very fulfilling, I often wonder why I haven't made more of a career out of my creative pursuits. The Onion article certainly makes me feel a bit guilty.
One reason, I remind myself, is that I have varied interests. While I love to sew and make my own clothes, I am also passionate about working with other people towards a common good, and am happy to have my job helping non profits achieve that goal. I also enjoy a sense of balance in my life - if I HAD to sew for a living, would I still like it? Coming home at the end of the day full of ideas for new projects is part of the fun!
And now another article, this time from the more reputable (and factual) Time Magazine, has given me a new reason to keep sewing away during free time. According to a study published in the Journal of Occupational and Organizational Psychology, being creative outside of work actually makes you better at your job. Whatever the creative activity, researchers found that subjects not only became more relaxed but also gained new skills - such as problem solving - that allowed them to perform better at work.
Well, I recently quit my day job to become a seamstress at a local studio, so I have some perspective on this now after a couple years of wondering "What if...". It's possible that if I had been working at a different place in a different department or with different people, I would have been more fulfilled in an office job, but where I was, I only resented it. I spent more and more time on my work computer looking at sewing blogs, and I started being late every day because I practically had to tear myself away from my sewing room in the morning. Not good! I figured I might as well try to make a living out of my hobby while I still had a chance to make such a risky decision. I can now say that while I make way less money, I am actually much happier. No more Sunday-night-sick-dread feeling for the work week ahead. My job consists of a lot of alterations and sewing things I would never wear myself, but I'm learning new skills that I can apply to my personal sewing and share with my blog readers. As of yet, I still enjoy sewing for myself after a day of sewing for others. Maybe I'm just freakishly obsessed.
As I sit here and read this on my work computer, I can totally relate. Congrats on your job change and the positive impact its had. I was wondering about the comment you'd made in your last post that you no longer work in an office!
I'm in the process of going back to school to get a degree in nursing. After almost 2 years of working in the industry have I realized that my inner social butterfly is not really doing well in the solitary confines of the chemistry lab. Again like you said, different department with different people? Maybe. But where I am? Definitely not.
My mom and I run an Etsy shop where we sell crocheted items, and during the busy holiday season there is nothing I hate more than crocheting. Mostly because the whole time I'm churning out the same hat in 5 different colors, I'm thinking of what else I could be making for me or my friends/family that I would actually be enjoying. But I'm incredibly happy every weekend in my sewing space. I wake up thinking about sewing, I go to bed thinking about it, I still check my blog roll incessantly. So maybe sewing is different than crochet? Maybe some day I'll be able to find out!
I actually had a hobby (drawing) become a job before, and I can tell you that you need to be conscious about it before making the switch, in order to keep it fun. Most other artists I know are aware of the risk and make sure they get to do something for themselves from time to time, without pressure or deadlines. The man I did my internship with went out into the countryside once a week to paint classic oil landscapes, for example! I used to do concert photography as a hobby, but it sort of lost its appeal as soon as people asked me to photograph for websites or articles... Suddenly there were deadlines and expectations.
At the moment I try to keep my sewing just for me. I would happily combine my drawing with the sewing world, as in designing fabrics and things like that, but the idea of making things for others scares me. What if I lose this hobby as well?
Good subject for a post.
I'm mid career, and up until about 5 years ago, headlines like the one in the Onion would make me feel like a sellout for not pursuing my creative interests for my living. But now that i know myself a little better, i think my younger self knew what it was doing by keeping my hobby to myself. Sewing and my other creative outlets have been good for stress busting and, well, keeping my creative side alive. Personally i would go crazy if I had to make the same thing over and over again, or in colors I hate, or to hear nitpicky complaints about why it doesn't look store bought. And then to get paid pennies on the dollar!
lots to think about! right now i'm in the position of being mere months away from my youngest (of four) heading off to all day kindergarten. i never got into a career field post-college (just secretarial work) before i quit and stayed home with the kids. so with the eminent prospect of being able to have a "real" job, i keep wondering what direction to go: utilize my sewing skills or pursue the career i intended? tough decisions!


text:
Schitu é uma comuna romena localizada no distrito de Giurgiu, na região de Muntênia. A comuna possui uma área de 55.86 km² e sua população era de 1992 habitantes segundo o censo de 2007.

Comunas de Giurgiu (distrito)

redpajama_set_name: RedPajamaWikipedia


text:
France continues to ignore human rights abuses and invests in Egypt
November 10, 2021 at 3:25 pm | Published in: Africa, Article, Egypt, Europe & Russia, France, HRW, International Organisations, Opinion
This photograph taken on September 6, 2021 shows Alstom's logo [FRANCOIS LO PRESTI/AFP via Getty Images]
amyinthedesert
This week the French train manufacturer Alstom announced that it had secured a $1 billion deal to upgrade Cairo's oldest metro line.
It follows a contract the same company signed in 2019, to design, implement and operate two monorail lines between the new capital and east Cairo, and another between 6th October City and Giza at a cost of $2.7 billion.
News of Alstom's victory comes as the French beauty company L'Oreal has said it is expanding in the Egyptian market and plans to invest $50 million in its factory in 10 Ramadan, a city on the outskirts of Cairo.
France and Egypt have made no secret of the fact that they are strategic economic partners. During a recent visit to Paris, Egyptian Prime Minister Mostafa Madbouly called on French companies to increase investment in Egypt.
In May, Egyptian President Abdel Fattah Al-Sisi met with French Minister of Economy and Finance Bruno Le Maire and discussed prospects for maximising France's investment in Egypt.
Roughly 160 French companies operate in the Egyptian market across a variety of different fields. According to Egypt's state-run press, the volume of France's investment in Egypt exceeds $5.8 billion and the volume of trade between them reaches $3.5 billion annually.
READ: Freedom Initiative launches campaign to highlight targeting of US rights defenders
In the past, rights groups have called on France to put human rights at the centre of its relationship with Egypt and have accused President Emmanuel Macron of sidelining the rule of law in favour of building economic ties.
Alstom and L'Oreal's announcements come as lawyer Ahmed Helmy was arrested in Egypt and accused of insulting the judiciary after asking for solid evidence to support an investigation into his client, a female political prisoner who is being investigated on terror charges.
Tawqa Abdel Basser Abdullah is being held in Al-Qanater women's prison where inmates have complained about being tortured and subject to physical and sexual abuse. Over recent years, several human rights lawyers in Egypt have been arrested whilst defending political prisoners, in contravention of fair trial procedures for prisoners like Tawqa.
In 2019 France sold over $1 billion worth of arms to Egypt. In a joint statement the following year, Human Rights Watch (HRW) and 17 other organisations said that "French diplomacy has, at the highest levels, long indulged President Sisi's brutal repression of any form of dissent."
The letter was published ahead of a visit by Al-Sisi to France, but it made little difference. When confronted on the issue, Macron said he would not force the topic of human rights, having in the past called Al-Sisi a friend.
READ: Egypt places female political prisoner in cell with criminals, ENHR reports
Macron also reiterated that he believed Al-Sisi to be vital for regional security and that on this basis, taking a tougher line would be counterproductive in the fight against terrorism. "I will not condition matters of defence and economic cooperation on these disagreements over human rights," Macron said.
Whilst Al-Sisi added: "You cannot present the state of Egypt, with all that it has done for its people and for stability in the region, with being a dictatorship."
Egypt Sisi's Prisons – Cartoon [Sabaaneh/MiddleEastMonitor]
Among Egypt's 65,000 political prisoners is the Palestinian-Egyptian Ramy Shaath, who was arrested in 2019 for his ties to the Coalition of Hope, a political alliance formed of youth leaders, politicians and journalists who planned to run in the 2020 parliamentary elections.
Leading efforts for his release is his wife, Celine Lebrun Shaath, who is French. Whilst Macron did raise his case in last year's press conference with Al-Sisi, Celine has said she was disappointed to find that France stopped short of conditioning its strategic partnership on human rights.
In August this year, Egypt's Lord International razor manufacturer fired 84 workers in one week after they participated in a strike over pay rises and warned them against further protests which would lead to harsher punitive measures.
One month earlier, the International Trade Confederation listed Egypt as one of the world's worst ten countries for workers in the world. Independent workers' unions are banned, and sit-ins are quashed before they have begun.
When choosing to pour money into Egypt, companies like L'Oreal and Alstom simply turn a blind eye to how the Egyptian government treats its workers.
The views expressed in this article belong to the author and do not necessarily reflect the editorial policy of Middle East Monitor.
AfricaArticleEgyptEurope & RussiaFranceHRWInternational OrganisationsOpinion


text:
Sepi Aghdaee
Rachel Baker
Cathy Cha
Denis Chicola
Holly Delany Cole
Matt Foreman
Victor Garcia
Cynthia Gibson
Robert D. Haas
Walter J. Haas
Ira Hirschfield
Jennifer Kirschenbaum
Raquiba LaBrie
Paula Morris
Beth Rayfield
Victoria Rodarte
Robert Ross
Jennie Lehua Watson
Evan Wolfson
Sylvia Yee
Show Me Perspectives In
Topic All Topics Immigrant Rights Gay & Lesbian Rights Education Equity Leadership Community Fundraising Fund News
Researchers Weigh California's Progress in Educational Opportunities
Extensive survey affirms a stubborn opportunity gap for low-income students of color and English learners.
At the Haas, Jr. Fund, we've been working for a decade with the San Francisco Unified School District to try and improve educational outcomes for low-income students of color. All along, we've known that the state g…
California Campuses Expanding Services for Undocumented Students and Families
A new fund supports campus efforts to help undocumented students persevere and succeed.
Across California, 25,000 undocumented young people graduate from public high schools every year. Estimates are that more than 70,000 undocumented students are enrolled in the state's public colleges and universitie…
The Hero's Journey
Students Reflect on How They Made It to a Four-Year Degree
Undocumented graduates' stories show the value of investing in critical supports and services for a very vulnerable population.
People who study storytelling know that one of the universal themes found in the ancient stories of many cultures is the "hero's journey." During this journey, heroes grapple with fear, encounter guides who he…
Michele Siqueiros
President, Campaign for College Opportunity
Michele Siqueiros on political will, Muhammad Ali and changing the odds for all California students.
What's something that not many people know about you? I can rap to Tupac and Dr. Dre without much prompting. What's an important lesson you've learned through your work? One lesson I had to learn through experience…
john a. powell
Director, Haas Institute for a Fair and Inclusive Society
john powell on consciousness, living beyond the cognitive space and bringing love into the public discourse.
What did you eat for breakfast this morning? Tea Where are you from? Detroit Who are your heroes? My mother, my father, and Nelson Mandela. What would be a perfect day for you? I like a mix of quiet a…
The Next Big Thing in San Francisco
Great public schools
In an op-ed for the San Francisco Chronicle, VP of Programs Sylvia Yee talks about the difference that Vision 2025 can make in kids' and families' lives.
From the Gold Rush days, San Francisco has been a city of entrepreneurs and innovation. It is home to some of the world's finest cultural institutions and most savvy and creative businesses. At the same time, income…
What Does a Fair and Inclusive Society Look Like?
September 23, 2014 | by
How research and community collaboration are coming together at Cal
The Haas Institute for a Fair and Inclusive Society at U.C. Berkeley is asking hard questions, and transforming research into impact.
I recently had the pleasure of spending my Monday evening on the Cal campus, in beautiful fall weather at the foot of one of the university's most recognizable landmarks, the Campanile. I was there to hear about a n…
Letter from the VP
Education Equity Starts with Vision & Leadership
Envisioning a brighter 2025
Vice President of Programs Sylvia Yee talks about the San Francisco School District's exciting, and difficult, work to transform public schools.
I am excited to share the latest news about the San Francisco Unified School District's work to transform public education, close the opportunity gap and improve lifetime chances for all of our city's children. T…
Sepi supports the Fund's grantmaking across programs and issues, including longtime community partnerships in the Bay Area.
Rachel works to strengthen the field of leadership development for social change.
Cathy leads the Fund's work to advance rights and create opportunities for all people.
Denis works to ensure that communications are at the core of the Fund's efforts to advance rights and create opportunities.
Holly directs the Fund's flagship leadership investment program, which helps grantees to build the leadership they need to reach their goals.
Matt oversees the Fund's extensive support for the drive for equal rights and opportunities for LGBT people.
In his leadership of the Haas, Jr. Fund, Walter J. Haas is guided by a commitment to serving the community and to creating opportunities for all people to succeed.
Ira oversees the Fund's investments and leads its work on selected community partnerships.
Paula has worked with the Fund's Flexible Leadership Awards program since its inception in 2005, and was its program director until January 2015.
Beth Rayfield is the director of institutional advancement at the Center for Community Change (CCC) and former development director at CHIRLA.
Jennie leads the Fund's work to advance rights and create opportunities for all people.
Evan is the founder and President of Freedom to Marry, a longtime Fund partner and key player in the campaign to win marriage equality nationwide.
Sylvia served as the Fund's Vice President of Programs


There are two ways to view the lost and how they treat you. At first, David saw the lost as his wicked enemy with their words and actions wounding him. These wounds began to consume his thoughts until a fire burned deep in his soul at which point he reacted and spoke revealing his frail and vain condition.
Later, David's view changed. He still saw the lost as wicked and desired deliverance from them, but one thing was distinctly different. David viewed the actions of the lost as God's strokes upon him (vs. 10). Instead of reacting against the wicked, he yielded himself to God. He allowed God to purge him from sinful acts.
The former reaction is a struggle and battle with the world and with no benefit, but the latter works good out of evil and brings hope, correction, and strength to the humble.
As you face the hardship of living the Christian life, strive to recognize the handiwork of God: even in the lives of the lost.
A number of years ago, my son came to me for help. It seemed that through a series of wrong decisions, he had found himself in a very poor state spiritually: sin seems to do that. Although I was greatly disappointed, I willfully stepped in to help. My support was not based on the severity of his situation, but instead on my love for him.
From this passage, we can see that good men, walking in the direction of the Lord, will fall and it is not of their own volition that they get back up and continue on for the Lord. They don't get up: in fact it is the Lord who lifts them up and supports them to stand again.
You have seen card board cut outs of people, which contain a prop in the back to keep it standing. This item illustrates what the Lord does for us. When we can't get up, he picks us up. When we cannot stand, he props us up. Whatever victory we get, it will not be based on our self will or determination. It will be based on the goodness of God and his support and strength in our lives.
When you fall, instead of trying harder, look to God for the support and strength you need. He will be there for you and do the work that only he can do.
As for my son, he too found strength that only God could bring to him. He stood him up, established his feet and has been guiding him to victory ever since.
Years ago, the GI Joe cartoon had a slogan, "Knowing is half the battle." That slogan is true for believers as well. How do you know or view God determines your level of trust.
If you know God as one who is quickly angered at you and ready to judge, then you will have a difficult time trusting him. However, if you have experienced God's faithfulness and see him as a loving father full of mercy, then you will wholeheartedly cling to him in times of trouble.
The secret to the Christian life is not trying harder or laboring to mustarding up faith, but instead to get closer to him. Just as you and I can trust true friends but shy away from trusting strangers, we will more comfortably trust God as we move from a practically stranger relationship to one as a son resting in the bosom of his father.


text:
.. _sqs_tut:

=======================================
An Introduction to boto's SQS interface
=======================================

This tutorial focuses on the boto interface to the Simple Queue Service
from Amazon Web Services.  This tutorial assumes that you have boto already
downloaded and installed.

Creating a Connection
---------------------
The first step in accessing SQS is to create a connection to the service.
The recommended method of doing this is as follows::

    >>> import boto.sqs
    >>> conn = boto.sqs.connect_to_region(
    ...     "us-west-2",
    ...     aws_access_key_id='<aws access key>',
    ...     aws_secret_access_key='<aws secret key>')

At this point the variable conn will point to an SQSConnection object in the
US-WEST-2 region. Bear in mind that just as any other AWS service, SQS is
region-specific. In this example, the AWS access key and AWS secret key are
passed in to the method explicitely. Alternatively, you can set the environment
variables:

* ``AWS_ACCESS_KEY_ID`` - Your AWS Access Key ID
* ``AWS_SECRET_ACCESS_KEY`` - Your AWS Secret Access Key

and then simply call::

    >>> import boto.sqs
    >>> conn = boto.sqs.connect_to_region("us-west-2")

In either case, conn will point to an SQSConnection object which we will
use throughout the remainder of this tutorial.

Creating a Queue
----------------
Once you have a connection established with SQS, you will probably want to
create a queue.  In its simplest form, that can be accomplished as follows::

    >>> q = conn.create_queue('myqueue')

The create_queue method will create (and return) the requested queue if it does not
exist or will return the existing queue if it does.  There is an
optional parameter to create_queue called visibility_timeout.  This basically
controls how long a message will remain invisible to other queue readers
once it has been read (see SQS documentation for more detailed explanation).
If this is not explicitly specified the queue will be created with whatever
default value SQS provides (currently 30 seconds).  If you would like to
specify another value, you could do so like this::

    >>> q = conn.create_queue('myqueue', 120)

This would establish a default visibility timeout for this queue of 120
seconds.  As you will see later on, this default value for the queue can
also be overridden each time a message is read from the queue.  If you want
to check what the default visibility timeout is for a queue::

    >>> q.get_timeout()
    30

Listing all Queues
------------------

To retrieve a list of the queues for your account in the current region::

    >>> conn.get_all_queues()
    [
        Queue(https://queue.amazonaws.com/411358162645/myqueue),
        Queue(https://queue.amazonaws.com/411358162645/another_queue),
        Queue(https://queue.amazonaws.com/411358162645/another_queue2)
    ]

This will leave you with a list of all of your :py:class:`boto.sqs.queue.Queue`
instances. Alternatively, if you wanted to only list the queues that started
with ``'another'``::

    >>> conn.get_all_queues(prefix='another')
    [
        Queue(https://queue.amazonaws.com/411358162645/another_queue),
        Queue(https://queue.amazonaws.com/411358162645/another_queue2)
    ]

Getting a Queue (by name)
-------------------------
If you wish to explicitly retrieve an existing queue and the name of the queue is known,
you can retrieve the queue as follows::

    >>> my_queue = conn.get_queue('myqueue')
    Queue(https://queue.amazonaws.com/411358162645/myqueue)

This leaves you with a single :py:class:`boto.sqs.queue.Queue`, which abstracts
the SQS Queue named 'myqueue'.

Writing Messages
----------------
Once you have a queue setup, presumably you will want to write some messages
to it.  SQS doesn't care what kind of information you store in your messages
or what format you use to store it.  As long as the amount of data per
message is less than or equal to 256Kb, SQS won't complain.

So, first we need to create a Message object::

>>> from boto.sqs.message import Message
>>> m = Message()
>>> m.set_body('This is my first message.')
>>> q.write(m)

The write method will return the ``Message`` object.  The ``id`` and
``md5`` attribute of the ``Message`` object will be updated with the
values of the message that was written to the queue.

If the message cannot be written an ``SQSError`` exception will be raised.

Writing Messages (Custom Format)
--------------------------------
The technique above will work only if you use boto's default Message payload format;
however, you may have a lot of specific requirements around the format of
the message data.  For example, you may want to store one big string or you might
want to store something that looks more like RFC822 messages or you might want
to store a binary payload such as pickled Python objects.

The way boto deals with this issue is to define a simple Message object that
treats the message data as one big string which you can set and get.  If that
Message object meets your needs, you're good to go.  However, if you need to
incorporate different behavior in your message or handle different types of
data you can create your own Message class.  You just need to register that
class with the boto queue object so that it knows that, when you read a message from the
queue, it should create one of your message objects rather than the
default boto Message object.  To register your message class, you would::

>>> import MyMessage
>>> q.set_message_class(MyMessage)
>>> m = MyMessage()
>>> m.set_body('This is my first message.')
>>> q.write(m)

where MyMessage is the class definition for your message class.  Your
message class should subclass the boto Message because there is a small
bit of Python magic happening in the __setattr__ method of the boto Message
class.

Reading Messages
----------------

So, now we have a message in our queue.  How would we go about reading it?
Here's one way:

>>> rs = q.get_messages()
>>> len(rs)
1
>>> m = rs[0]
>>> m.get_body()
u'This is my first message'

The get_messages method also returns a ResultSet object as described
above.  In addition to the special attributes that we already talked
about the ResultSet object also contains any results returned by the
request.  To get at the results you can treat the ResultSet as a
sequence object (e.g. a list).  We can check the length (how many results)
and access particular items within the list using the slice notation
familiar to Python programmers.

At this point, we have read the message from the queue and SQS will make
sure that this message remains invisible to other readers of the queue
until the visibility timeout period for the queue expires.  If you delete
the message before the timeout period expires then no one else will ever see
the message again.  However, if you don't delete it (maybe because your reader crashed
or failed in some way, for example) it will magically reappear in my queue
for someone else to read.  If you aren't happy with the default visibility
timeout defined for the queue, you can override it when you read a message:

>>> q.get_messages(visibility_timeout=60)

This means that regardless of what the default visibility timeout is for
the queue, this message will remain invisible to other readers for 60
seconds.

The get_messages method can also return more than a single message.  By
passing a num_messages parameter (defaults to 1) you can control the maximum
number of messages that will be returned by the method.  To show this
feature off, first let's load up a few more messages.

>>> for i in range(1, 11):
...   m = Message()
...   m.set_body('This is message %d' % i)
...   q.write(m)
...
>>> rs = q.get_messages(10)
>>> len(rs)
10

Don't be alarmed if the length of the result set returned by the get_messages
call is less than 10.  Sometimes it takes some time for new messages to become
visible in the queue.  Give it a minute or two and they will all show up.

If you want a slightly simpler way to read messages from a queue, you
can use the read method.  It will either return the message read or
it will return None if no messages were available.  You can also pass
a visibility_timeout parameter to read, if you desire:

>>> m = q.read(60)
>>> m.get_body()
u'This is my first message'

Deleting Messages and Queues
----------------------------
As stated above, messages are never deleted by the queue unless explicitly told to do so.
To remove a message from a queue:

>>> q.delete_message(m)
[]

If I want to delete the entire queue, I would use:

>>> conn.delete_queue(q)

This will delete the queue, even if there are still messages within the queue.

Additional Information
----------------------
The above tutorial covers the basic operations of creating queues, writing messages,
reading messages, deleting messages, and deleting queues.  There are a
few utility methods in boto that might be useful as well.  For example,
to count the number of messages in a queue:

>>> q.count()
10

This can be handy but this command as well as the other two utility methods
I'll describe in a minute are inefficient and should be used with caution
on queues with lots of messages (e.g. many hundreds or more).  Similarly,
you can clear (delete) all messages in a queue with:

>>> q.clear()

Be REAL careful with that one!  Finally, if you want to dump all of the
messages in a queue to a local file:

>>> q.dump('messages.txt', sep='\n------------------\n')

This will read all of the messages in the queue and write the bodies of
each of the messages to the file messages.txt.  The option sep argument
is a separator that will be printed between each message body in the file.

redpajama_set_name: RedPajamaGithub


text:
Outlaws, Midgets were bookends to a solid Bakersfield Speedway season
It's a track where stock car racing is king, but a pair of open wheel events provided a bit of thunder in 2018 at Bakersfield Speedway.
The World of Outlaws Series, which opened the season after the first three weekends were rained out, and the season-ending USAC National Midget race both had stellar fields and superb racing on the third-mile clay oval.
In between it was a banner year for a number of local racers who came away with season championships.
"We had some good racing, some good points battles," said Speedway owner Scott Schweitzer, who admitted he was unable to give the track his full attention this year.
Schweitzer's daughter, Bailey, was killed in the Route 91 Harvest Festival mass shooting in October 2017 and this year was a struggle for him.
"This year, with my family situation and personal life, I'm just glad to get the year under my belt," he said. "I probably didn't do as much as I needed to do, there was a lot of healing to do with my family. I concentrated more on that than the track."
The Outlaws race was the first in two years at the track and lured 35 drivers, up significantly from the previous event.
That was the same case in the season-ender on Nov. 17 when the track hosted a USAC National race for the second straight year, which lured 35 drivers to the track.
"It was a great car count for the Outlaws and I was just glad to get my season kicked off after three straight rainouts," Schweitzer said. "And we gained 10 to 12 more Midgets for National show. All-in-all it was a great night of racing and a good way to finish the 2018 season."
As for the regular season, two classes went down to the wire in the championship race. Tyler Johnson won the IMCA title by a mere two points and Cody Johnson won the Hobby Stock championship by 10 points.
While Brad Pounds (IMCA Modified) and Nick Spainhoward (Sports Mods) had championships locked up before the season ended, both of those classes featured nine different winners, illustrating how hard it is to win in those classes.
Big events, such as the Fourth of July week fireworks race, the Mike Moshier Memorial and the Bud Nationals drew strong fields and good crowds but Schweitzer said the overall season was a mixed bag.
"There were some great events but we had some slow nights as well and you're going to have those," Schweitzer said.
Through his 16 years of ownership, Schweitzer has pretty much stuck to a schedule of racing all but one or two Saturdays from the first Saturday of March into September.
That will change in 2019, he said, noting he saw racing from a new angle this season.
"It gave me a new perspective, made me realize not every Saturday night is the way to go. Cut back some to try to help the racers and the staff.
"It's time to start putting that into effect."
Schweitzer said he is currently finalizing the 2019 schedule and said breaks would most likely be during the long, hot summers.
"I think it would benefit everyone: fans, staff, racers to have a few breaks," he said.
December 18, 2018 News


*Ourisman Price includes Customer Cash Rebate only. Ourisman price DOES NOT include the Military or any other Competitive/Loyalty Rebates. If you qualify for these rebates it will further reduce the Ourisman Price by the appropriate amount. Please contact dealer for further details. We make every effort to provide accurate pricing. Prices do not include Taxes, Tags Freight ( 895-990 ) or Dealer Processing of $749. An additional charge may apply for bringing in a vehicle from Out-of-Stock.


BRACE YOURSELF. I'm about to go after some of your favorite foods – sodas, snacks, treats, and more. These ingredients can also be found in foods like pasta sauces, cereals, and side dishes – things you eat at meals every day.
All five have all been linked to serious health problems. In some cases the evidence is clear, in others, the jury is still out – we still aren't sure whether the ingredient is harmful or not – but the risk isn't worth it.
Getting these five ingredients out of your house will make your family healthier, cut down on useless calories and chemical additives, and could save you money (if you can stop or cut back on buying certain products).
YOU MAY OR MAY NOT THINK YOU CAN ELIMINATE these ingredients completely from your shopping list, but limit them as much as you can. Sometimes an alternative product is available; sometimes the food item can be removed from your family's daily consumption all together. In some cases, maybe the best you can do is cut back.
But even that will help.
Used in: Sports drinks, fruit drinks, candy, cereal, crackers, cereal bars, ice pops, most anything with bright colors, even color you think is from fruit.
Usually made from petrochemicals, dyes are used to make food brightly colored and "fun" and/or to make food look as if it contains healthy fruits and vegetables.
Food dyes like yellow 5 and red 40 are linked to various health problems in children such as hyperactivity, impulsivity, learning difficulties, and Attention Deficit Hyperactivity Disorder (ADHD). Â Studies on the blue dyes show potential kidney problems.
Because of those links, dyes commonly used in the United States in have already been banned in the U.K. Food makers, such as Kellogg's, make two versions of products, one without dyes (using colorings made from real food ingredients) for U.K. and one with dyes for U.S.
I talked about dyes in more detail (with references) in Red Dye 40 and Its Colorful Friends.
Benzoates have recently been linked to several health problems, leading scientists to call for the FDA to retest these ingredients. Original tests are quite old.
Professor Peter Piper (okay, it sounds fake, but stay with me) has done research linking sodium benzoate to cellular damage, specifically to cell mitochondria.
When benzoates are combined with ascorbic acid in the ingredients of a food product, benzene, a known carcinogen, is created – albeit in levels not considered dangerous for consumption.
Finally, studies done in the U.K. in 2007 linked sodium benzoate to hyperactivity when used with artificial colors.
Used in: Crackers, fast food, snack foods, cookies, margarines, and more.
Trans fats have been directly linked to coronary heat disease, Alzheimer's, cancer, diabetes, obesity, liver dysfunction, infertility in women.
The evidence is so strong, there are movements to ban trans fats in several cities and states in the U.S., including New York City, Philadelphia, Chicago, Massachusetts, Maryland, and Vermont. Denmark already has a nationwide ban and other countries are attempting the same.
Artificial sweeteners are hundreds of times sweeter than sugar. As a result, your palate grows accustomed to needing super-sweet foods. This leads to consumption of more artificially sweetened foods and less naturally sweet foods like fruit.
Studies on animals have been done to see how the body reacts to some artificial sweeteners. The results aren't pretty. Artificial sweeteners can actually cause weight gain. The sweet taste creates an insulin response, but there is no increase of blood sugars. The result is hypoglycemia and increase food consumption at the next meal.
For every study saying artificial sweeteners are safe, there's one saying they aren't. Evidence is far from clear. Here's a rundown of the five FDA-approved artificial sweeteners.
Saccharin (Sweet and Low, Sweet Twin, Sweet'N Low, and Necta Sweet): Listed as a carcinogen for decades for causing cancer in laboratory animals, it was delisted in the 1990's after the original studies were criticized for high dosages (hundreds of times the "normal" human intake). As a result, the FDA has strict regulations about allowable amounts and many people believe saccharin should be avoided by infants, pregnant women, and small children.
Aspartame (Â Nutrasweet, Equal, and Sugar Twin): Linked to headaches and depression, both of which can be severe in people with mood disorders. Ongoing studies are researching a possible link to cancer and weight gain.
Acesulfame Potassium (acesulfame K, Ace-K, or Sunett): This sweetener has not been subjected to long-term studies. It contains the carcinogen methylene chloride, which can cause headaches, depression, nausea, mental confusion, liver effects, kidney effects, visual disturbances, and cancer in humans with long-term exposure. The FDA has not required any further testing.
Neotame: A new version of aspartame without the phenylalanine dangers, so it can be consumed by people with PKU. The makers of Neotame claim 100 studies have been done, although these studies are not available to the public. No independent studies have been done.
Sucralose (Splenda): Contains chlorine, a carcinogen. There have been no long-term studies on sucralose to determine how it's digested and absorbed into the body. Short-term studies have linked it to bloating, gas, diarrhea, nausea, skin irritations, wheezing, cough, runny nose, chest pains, anxiety, moods swings, depression, and itchy eyes.
No point in beating a dead horse; I wrote about why to avoid HFCS before and we've all heard about the potential health problems associated with HFCS. The bottom line is that no one yet knows whether HFCS causes metabolism problems, weight gain, or worse. You don't want to fool yourself into thinking a food is healthy just because it contains sugar not HFCS. But scientists are very clear on how bodies process sugar, while they aren't 100% certain about HFSC and whether it's causing unintended effects.
HFCS is often found in highly processed foods – foods that can often be avoided or limited. Why mess around? Avoid HFCS whenever you can.
The bottom line: Avoid buying food products with these ingredients. Find alternatives or skip the product all together. What you can't avoid, limit. Your family will be healthier and you'll cut back on unneeded calories and additives. If you need help finding good alternatives, email me and I'll do my best to help.