This isn't a slam-dunk into progressive rock, but it's clearly progressive music. There are parts that are decidedly rock oriented, too.
I pretty much always like anything from Ian Narcisi.
Ian Narcissi always creates progressive rock that's fairly mainstream and accessible. This new disc (the second in a trilogy) is no exception.
This isn't a tidy fit under progressive rock. It's not a tidy fit under reggae, either, though.
This is not progressive rock in the traditional sense of the word. It's progressive music for sure, though.
Perhaps this isn't progressive rock.
Nattefrost is one guy, Bjorn Jeppesen.
This is a new vinyl reissue of an album I already reviewed on CD.
I've reviewed several releases from this act before. The music created by Nattefrost is electronic and lands in similar territory to acts ranging from Kraftwerk to Synergy.
This is some pretty intriguing stuff.
Electronic music, space rock and much more merge here.
There is a whole subset of prog bands (Wolverine, for instance) that started as death metal acts and evolved into progressive rock.
I will almost certainly never set foot in the Transylvanian countryside, but after hearing Tau, I can feel like I've actually visited there.
Recycled is arguably the masterwork by this fairly obscure progressive rock band. Basically an epic piece divided into 11 movements, Recycled utilizes the tools of progressive rock (both unique and reminiscent of other bands) to create a very interesting piece of work.
1977's Magic Is A Child was never considered by fans to be among Nektar's best, because it is a lot more accessible and less prog rock-oriented than the majority of their catalog. The album's low esteem is really less about the quality of this album, though and more about the incredibly high quality of the rest of the band's repertoire.
There are those who consider Remember The Future to be the creative peak of Nektar's career. Certainly there are reasons to buy into that philosophy.
Another classic album from the progressive rock cult legends Nektar, this is part of their series of remasters of their back catalog.
When I first discovered Nektar, my favorite album by them was without a doubt Remember The Future. The thing is, the only copy of A Tab in the Ocean that I ever had was an LP that was scratched almost to point of total unplayability.
In the 1980's hair metal and new wave were king. It must have been really hard to be a prog band in those days because so many of them felt the urge to jump on the pop bandwagon to try to stay afloat.
So, this new edition of a classic Nektar album is awesome. The whole epic has been covered by me at MSJ before.
There were three new albums this time that disappointed me a bit.
This Nektar album might not get the attention of Recycled or Remember the Future, but it's really a classic Nektar set.
Nektar front-man Roye Albrighton passed away while this album was being prepared for release. I've read that this was actually his last live performance with the band.
This new three-LP set is a live recording of Roye Albrighton's final performance with Nektar.
The mix of sounds here is great. It ranges from electronic music to jazz, King Crimson like prog and a lot more.
I like pretty much everything I've ever heard from Bill Nelson.
This collection is literally made up of studio sketches. Bill Nelson spent a period of several years working on song ideas for a band he was looking to assemble.
This box set houses three CDs from Bill Nelson. Two of the albums were recorded as soundtracks.
One always expects something special when you play an album from Bill Nelson. This double CD set is no exception there.
Fans of Dream Theater should love this album, as should most fans of harder edged prog rock. The disc is 13 instrumental prog numbers that are quite strong.
I can definitely see some people disagreeing with this landing in progressive rock. For my money, though, it fits.
This is one of those albums where I'm sure people will disagree with it landing under progressive rock.
This is definitely not progressive rock. That said, it is progressive music.
This new album is intriguing. The band has two members who were in the final incarnation of Nektar before Roye Albrighton's death - Klaus Henatch (keyboards and vocals) and Tom Fry (bass and vocals).
Although I've landed this under progressive rock, it's of the modern alternative rock based sound that's tied heavily to Radiohead.
The third album from this group, this one shows a new maturity and refinement and higher level of professionalism for the band.
Seeming a bit more true progressive rock (as opposed to prog metal) than the last album, this release shows that the band has made progress in their sound and song writing.
Niacin just keeps getting better. While all their albums are entertaining, the earlier ones seemed to be a little more low key in some ways - leaning more on the smooth jazz than the prog.
Niacin have been quickly establishing themselves as a prog group that is at the top of the heap.
This album captures a nice retro and jazzy sort of prog texture. It does this, almost completely, without the addition of guitar and vocals.
Niacin (Billy Sheehan, John Novello and Dennis Chambers) have certainly outdone themselves this time.
If you did a search for bands with the name Nightingale, you would wind up with more than a single hit.
30 years after the bombs fell, there's not much live music any more. But there is Nightsatan.
Every once in awhile, I discover a great new band, but recently, I've discovered several bands that have been around for a decade or more that leave me mystified as to how I missed them all this time.
On this disc, there are many lurid instrumentals. The music is elusively melancholic with the most wistful flow.
It should be noted here (for the sake of full disclosure) that Music Street Journal writer John Pierpoint plays bass in this band.
Long before Kurt Cobain and company formed a band called "Nirvana," there was a British act releasing music under that name.
Here's a history lesson for you. Would you be shocked to learn that Kurt Cobain and his crew were not the first band to release albums under the name "Nirvana?"
I've reviewed quite a few releases from this act. I'd say that this one is probably more dated sounding than the rest, but at the same time it's among the more mainstream.
I've put this under "progressive rock." Is it traditional prog?
Perhaps this isn't progressive rock. It is clearly art rock, though. This is electronic music.
This is an instrumental album. It's also mostly fusion, but there are other elements at play, too.
This solo release from Rocket Scientist Erik Norlander is a very strong CD. He enlists the aid of quite a few of his friends to pull the disc together, and the result a very solid prog CD with some metallic elements.
On his new live album, Erik Norlander presents his excellent blending of progressive rock stylings with those of harder edged material like Deep Purple.
n Music Machine Erik Norlander has created the newest rock opera. His story tells the tale of the first manufactured rock idol, hence the name "Music Machine".
I have to say that I really like Erik Norlander. He is an incredibly talented musician, producer and songwriter.
I've always loved Erik Norlander's music. His sonic style lands in modern prog territory in some ways, but more than anything it's rooted in the classic progressive rock of the 1970s.
I really like everything here. The power and majesty of these songs is great.
Italians are known for a lot of things.
Years ago I had a book on making your own records. Yes, it was the days of vinyl records.
This disc is certainly different from any other progressive rock CD. Indeed the band might not even consider it to be such, and I'm not completely sure it is, but it really feels like prog in many ways.
To a large degree you know what you will get with a Nox Arcana album.
Nox Arcana always delivers. The brain-child of Joseph Vargo, this outfit produces a gothic, electronic sound that is creepy enough for Halloween events.
Progressive rock is an unusual beast, difficult at times to put a collar onto. It crosses and shares lines with several other styles, including jam band music.


text:
package apiserver

import (
	"crypto/tls"
	"fmt"
	"net/http"
	"time"

	"github.com/golang/glog"
	"golang.org/x/net/context"

	apierrors "k8s.io/apimachinery/pkg/api/errors"
	"k8s.io/apimachinery/pkg/api/meta"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/conversion"
	"k8s.io/apimachinery/pkg/labels"
	"k8s.io/apimachinery/pkg/runtime"
	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
	"k8s.io/apimachinery/pkg/util/wait"
	"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/util/workqueue"
	"k8s.io/kubernetes/pkg/api"
	internalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/core/internalversion"
	internallisters "k8s.io/kubernetes/pkg/client/listers/core/internalversion"

	"k8s.io/kube-aggregator/pkg/apis/apiregistration"
	apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion"
	informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion"
	listers "k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion"
	"k8s.io/kube-aggregator/pkg/controllers"
)

var cloner = conversion.NewCloner()

type AvailableConditionController struct {
	apiServiceClient apiregistrationclient.APIServicesGetter

	apiServiceLister listers.APIServiceLister
	apiServiceSynced cache.InformerSynced

	// serviceLister is used to get the IP to create the transport for
	serviceLister  internallisters.ServiceLister
	servicesSynced cache.InformerSynced

	endpointsLister internallisters.EndpointsLister
	endpointsSynced cache.InformerSynced

	// To allow injection for testing.
	syncFn func(key string) error

	queue workqueue.RateLimitingInterface
}

func NewAvailableConditionController(
	apiServiceInformer informers.APIServiceInformer,
	serviceInformer internalinformers.ServiceInformer,
	endpointsInformer internalinformers.EndpointsInformer,
	apiServiceClient apiregistrationclient.APIServicesGetter,
) *AvailableConditionController {
	c := &AvailableConditionController{
		apiServiceClient: apiServiceClient,
		apiServiceLister: apiServiceInformer.Lister(),
		apiServiceSynced: apiServiceInformer.Informer().HasSynced,
		serviceLister:    serviceInformer.Lister(),
		servicesSynced:   serviceInformer.Informer().HasSynced,
		endpointsLister:  endpointsInformer.Lister(),
		endpointsSynced:  endpointsInformer.Informer().HasSynced,
		queue:            workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "AvailableConditionController"),
	}

	apiServiceInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
		AddFunc:    c.addAPIService,
		UpdateFunc: c.updateAPIService,
		DeleteFunc: c.deleteAPIService,
	})

	serviceInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
		AddFunc:    c.addService,
		UpdateFunc: c.updateService,
		DeleteFunc: c.deleteService,
	})

	endpointsInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
		AddFunc:    c.addEndpoints,
		UpdateFunc: c.updateEndpoints,
		DeleteFunc: c.deleteEndpoints,
	})

	c.syncFn = c.sync

	return c
}

func (c *AvailableConditionController) sync(key string) error {
	inAPIService, err := c.apiServiceLister.Get(key)
	if apierrors.IsNotFound(err) {
		return nil
	}
	if err != nil {
		return err
	}

	apiService := &apiregistration.APIService{}
	if err := apiregistration.DeepCopy_apiregistration_APIService(inAPIService, apiService, cloner); err != nil {
		return err
	}

	availableCondition := apiregistration.APIServiceCondition{
		Type:               apiregistration.Available,
		Status:             apiregistration.ConditionTrue,
		LastTransitionTime: metav1.Now(),
	}

	// local API services are always considered available
	if apiService.Spec.Service == nil {
		availableCondition.Status = apiregistration.ConditionTrue
		availableCondition.Reason = "Local"
		availableCondition.Message = "Local APIServices are always available"
		apiregistration.SetAPIServiceCondition(apiService, availableCondition)
		_, err := c.apiServiceClient.APIServices().UpdateStatus(apiService)
		return err
	}

	service, err := c.serviceLister.Services(apiService.Spec.Service.Namespace).Get(apiService.Spec.Service.Name)
	if apierrors.IsNotFound(err) {
		availableCondition.Status = apiregistration.ConditionFalse
		availableCondition.Reason = "ServiceNotFound"
		availableCondition.Message = fmt.Sprintf("service/%s in %q is not present", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace)
		apiregistration.SetAPIServiceCondition(apiService, availableCondition)
		_, err := c.apiServiceClient.APIServices().UpdateStatus(apiService)
		return err
	} else if err != nil {
		availableCondition.Status = apiregistration.ConditionUnknown
		availableCondition.Reason = "ServiceAccessError"
		availableCondition.Message = fmt.Sprintf("service/%s in %q cannot be checked due to: %v", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace, err)
		apiregistration.SetAPIServiceCondition(apiService, availableCondition)
		_, err := c.apiServiceClient.APIServices().UpdateStatus(apiService)
		return err
	}

	if service.Spec.Type == api.ServiceTypeClusterIP {
		endpoints, err := c.endpointsLister.Endpoints(apiService.Spec.Service.Namespace).Get(apiService.Spec.Service.Name)
		if apierrors.IsNotFound(err) {
			availableCondition.Status = apiregistration.ConditionFalse
			availableCondition.Reason = "EndpointsNotFound"
			availableCondition.Message = fmt.Sprintf("cannot find endpoints for service/%s in %q", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace)
			apiregistration.SetAPIServiceCondition(apiService, availableCondition)
			_, err := c.apiServiceClient.APIServices().UpdateStatus(apiService)
			return err
		} else if err != nil {
			availableCondition.Status = apiregistration.ConditionUnknown
			availableCondition.Reason = "EndpointsAccessError"
			availableCondition.Message = fmt.Sprintf("service/%s in %q cannot be checked due to: %v", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace, err)
			apiregistration.SetAPIServiceCondition(apiService, availableCondition)
			_, err := c.apiServiceClient.APIServices().UpdateStatus(apiService)
			return err
		}
		hasActiveEndpoints := false
		for _, subset := range endpoints.Subsets {
			if len(subset.Addresses) > 0 {
				hasActiveEndpoints = true
				break
			}
		}
		if !hasActiveEndpoints {
			availableCondition.Status = apiregistration.ConditionFalse
			availableCondition.Reason = "MissingEndpoints"
			availableCondition.Message = fmt.Sprintf("endpoints for service/%s in %q have no addresses", apiService.Spec.Service.Name, apiService.Spec.Service.Namespace)
			apiregistration.SetAPIServiceCondition(apiService, availableCondition)
			_, err := c.apiServiceClient.APIServices().UpdateStatus(apiService)
			return err
		}
	}
	// actually try to hit the discovery endpoint
	if apiService.Spec.Service != nil {
		destinationHost := getDestinationHost(apiService, c.serviceLister)
		discoveryURL := "https://" + destinationHost + "/apis"
		// construct an http client that will ignore TLS verification (if someone owns the network and messes with your status
		// that's not so bad) and sets a very short timeout.
		httpClient := &http.Client{
			Transport: &http.Transport{
				TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
			},
		}
		req, err := http.NewRequest("GET", discoveryURL, nil)
		if err != nil {
			return err
		}
		ctx, _ := context.WithTimeout(req.Context(), 5*time.Second)
		req.WithContext(ctx)
		resp, err := httpClient.Do(req)
		if err != nil {
			availableCondition.Status = apiregistration.ConditionFalse
			availableCondition.Reason = "FailedDiscoveryCheck"
			availableCondition.Message = fmt.Sprintf("no response from %v: %v", discoveryURL, err)
			apiregistration.SetAPIServiceCondition(apiService, availableCondition)
			_, updateErr := c.apiServiceClient.APIServices().UpdateStatus(apiService)
			if updateErr != nil {
				return updateErr
			}
			// force a requeue to make it very obvious that this will be retried at some point in the future
			// along with other requeues done via service change, endpoint change, and resync
			return err
		}
		resp.Body.Close()
	}

	availableCondition.Reason = "Passed"
	availableCondition.Message = "all checks passed"
	apiregistration.SetAPIServiceCondition(apiService, availableCondition)
	_, err = c.apiServiceClient.APIServices().UpdateStatus(apiService)
	return err
}

func getDestinationHost(apiService *apiregistration.APIService, serviceLister internallisters.ServiceLister) string {
	if apiService.Spec.Service == nil {
		return ""
	}

	destinationHost := apiService.Spec.Service.Name + "." + apiService.Spec.Service.Namespace + ".svc"
	service, err := serviceLister.Services(apiService.Spec.Service.Namespace).Get(apiService.Spec.Service.Name)
	if err != nil {
		return destinationHost
	}
	switch {
	// use IP from a clusterIP for these service types
	case service.Spec.Type == api.ServiceTypeClusterIP,
		service.Spec.Type == api.ServiceTypeNodePort,
		service.Spec.Type == api.ServiceTypeLoadBalancer:
		return service.Spec.ClusterIP
	}

	// return the normal DNS name by default
	return destinationHost
}

func (c *AvailableConditionController) Run(stopCh <-chan struct{}) {
	defer utilruntime.HandleCrash()
	defer c.queue.ShutDown()

	glog.Infof("Starting AvailableConditionController")
	defer glog.Infof("Shutting down AvailableConditionController")

	if !controllers.WaitForCacheSync("AvailableConditionController", stopCh, c.apiServiceSynced, c.servicesSynced, c.endpointsSynced) {
		return
	}

	// only start one worker thread since its a slow moving API and the aggregation server adding bits
	// aren't threadsafe
	go wait.Until(c.runWorker, time.Second, stopCh)

	<-stopCh
}

func (c *AvailableConditionController) runWorker() {
	for c.processNextWorkItem() {
	}
}

// processNextWorkItem deals with one key off the queue.  It returns false when it's time to quit.
func (c *AvailableConditionController) processNextWorkItem() bool {
	key, quit := c.queue.Get()
	if quit {
		return false
	}
	defer c.queue.Done(key)

	err := c.syncFn(key.(string))
	if err == nil {
		c.queue.Forget(key)
		return true
	}

	utilruntime.HandleError(fmt.Errorf("%v failed with: %v", key, err))
	c.queue.AddRateLimited(key)

	return true
}

func (c *AvailableConditionController) enqueue(obj *apiregistration.APIService) {
	key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
	if err != nil {
		glog.Errorf("Couldn't get key for object %#v: %v", obj, err)
		return
	}

	c.queue.Add(key)
}

func (c *AvailableConditionController) addAPIService(obj interface{}) {
	castObj := obj.(*apiregistration.APIService)
	glog.V(4).Infof("Adding %s", castObj.Name)
	c.enqueue(castObj)
}

func (c *AvailableConditionController) updateAPIService(obj, _ interface{}) {
	castObj := obj.(*apiregistration.APIService)
	glog.V(4).Infof("Updating %s", castObj.Name)
	c.enqueue(castObj)
}

func (c *AvailableConditionController) deleteAPIService(obj interface{}) {
	castObj, ok := obj.(*apiregistration.APIService)
	if !ok {
		tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
		if !ok {
			glog.Errorf("Couldn't get object from tombstone %#v", obj)
			return
		}
		castObj, ok = tombstone.Obj.(*apiregistration.APIService)
		if !ok {
			glog.Errorf("Tombstone contained object that is not expected %#v", obj)
			return
		}
	}
	glog.V(4).Infof("Deleting %q", castObj.Name)
	c.enqueue(castObj)
}

// there aren't very many apiservices, just check them all.
func (c *AvailableConditionController) getAPIServicesFor(obj runtime.Object) []*apiregistration.APIService {
	metadata, err := meta.Accessor(obj)
	if err != nil {
		utilruntime.HandleError(err)
		return nil
	}

	var ret []*apiregistration.APIService
	apiServiceList, _ := c.apiServiceLister.List(labels.Everything())
	for _, apiService := range apiServiceList {
		if apiService.Spec.Service == nil {
			continue
		}
		if apiService.Spec.Service.Namespace == metadata.GetNamespace() && apiService.Spec.Service.Name == metadata.GetName() {
			ret = append(ret, apiService)
		}
	}

	return ret
}

// TODO, think of a way to avoid checking on every service manipulation

func (c *AvailableConditionController) addService(obj interface{}) {
	for _, apiService := range c.getAPIServicesFor(obj.(*api.Service)) {
		c.enqueue(apiService)
	}
}

func (c *AvailableConditionController) updateService(obj, _ interface{}) {
	for _, apiService := range c.getAPIServicesFor(obj.(*api.Service)) {
		c.enqueue(apiService)
	}
}

func (c *AvailableConditionController) deleteService(obj interface{}) {
	castObj, ok := obj.(*api.Service)
	if !ok {
		tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
		if !ok {
			glog.Errorf("Couldn't get object from tombstone %#v", obj)
			return
		}
		castObj, ok = tombstone.Obj.(*api.Service)
		if !ok {
			glog.Errorf("Tombstone contained object that is not expected %#v", obj)
			return
		}
	}
	for _, apiService := range c.getAPIServicesFor(castObj) {
		c.enqueue(apiService)
	}
}

func (c *AvailableConditionController) addEndpoints(obj interface{}) {
	for _, apiService := range c.getAPIServicesFor(obj.(*api.Endpoints)) {
		c.enqueue(apiService)
	}
}

func (c *AvailableConditionController) updateEndpoints(obj, _ interface{}) {
	for _, apiService := range c.getAPIServicesFor(obj.(*api.Endpoints)) {
		c.enqueue(apiService)
	}
}

func (c *AvailableConditionController) deleteEndpoints(obj interface{}) {
	castObj, ok := obj.(*api.Endpoints)
	if !ok {
		tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
		if !ok {
			glog.Errorf("Couldn't get object from tombstone %#v", obj)
			return
		}
		castObj, ok = tombstone.Obj.(*api.Endpoints)
		if !ok {
			glog.Errorf("Tombstone contained object that is not expected %#v", obj)
			return
		}
	}
	for _, apiService := range c.getAPIServicesFor(castObj) {
		c.enqueue(apiService)
	}
}

redpajama_set_name: RedPajamaGithub


In search of a strategy that can improve knowledge work just as industrial work was improved in the last century.
The economic gains of the 20th century were driven by the industrial productivity improvement techniques pioneered by Frederick Taylor. Those techniques worked by observing a job, breaking it down into a series of component tasks and skills, and then defining the sequence of tasks and skills that yielded the most output for the least effort. The range of jobs for which this strategy worked was broad, ranging from factory jobs to many office jobs. Refinements to that strategy included simplifying and specializing jobs, identifying and eliminating work steps that didn't add value to the final output, and substituting automation for people when the numbers said it made sense.
Why wouldn't this same strategy apply to knowledge work?
The essence of industrial productivity improvement is to reduce or eliminate variation in the output of a job by reducing or eliminating variation in process. As Peter Drucker observes, the defining characteristic of knowledge work is that knowledge workers define their own jobs; moreover, they are expected to define what constitutes quality output. In knowledge work, quality is "Job 1" by definition. The industrial strategy for productivity improvement applies only after the identification of a known job with a known output.
If this strategy won't work, what will?
One strategy for improving knowledge work might be to simply wait until the tasks and quality output are understood and move ahead with conventional productivity improvement. When a knowledge work task can be converted to a standardized information-processing task, this strategy may well work.
Consider inventory management. In the 1960s, managing inventory levels was a complex knowledge-work job. Over time, operations researchers structured and defined inventory management problems so that what were managerial decisions became the outputs of accurate information filtered through algorithms. What was a knowledge-work job morphed into an industrial information-processing job.
What about knowledge work jobs that have yet to reach that stage?
I'm convinced that there are many jobs in today's organizations that won't soon be turned into well-defined information-processing tasks–that is, tasks that will have major impacts on the success or failure of the organization or will be the day-to-day work of more people in the organization.
Although the power and success of conventional productivity-improvement techniques is tempting, applying them to these jobs poses several risks. Chief among them is the risk of locking in on and improving a process that doesn't actually exist. One of the forgotten lessons of the days of expert systems is that experts (a.k.a. knowledge workers) are simultaneously glib about what they think they are doing and generally only partially able to recognize and articulate how they actually work. Failing to appreciate and account for this discrepancy risks applying improvement strategies to irrelevant and accidental features of a hypothetical process.
Another risk flowing from ill-defined (and ill-definable) processes is that technology will be applied inappropriately. Think of knowledge management systems that sweep up and inventory all final deliverables without supporting better communication among experts. Think of word processing software that is powerful enough to lay out a multi-column employee newsletter, yet offers no tools to help a writer organize and manage research notes and early drafts on the path to a final report.
If the machinery of industrial productivity improvement is inappropriate, is there an improvement strategy that fits the particular characteristics of knowledge work before it can be reduced to conventionally improvable work?
In many respects, knowledge work is craft work. Like craft work, the outputs of good knowledge work are utilitarian and esthetically pleasing. The quality of outputs is a function of the level of mastery of the knowledge worker. The unique features and characteristics of each knowledge work product are what makes them valuable.
What we should be looking for is an understanding of what contributes to quality in the final product and what detracts from quality. Unlike industrial productivity improvement, we won't be focused on eliminating variations in final outputs, although we may reduce those variations that don't link to quality differences. What we can expect to discover, courtesy of Peter Drucker, is that current methods and tools don't work very well even though today's knowledge workers will be quite comfortable with those methods and tools.
That will lead us to a series of challenges that are rooted in change management, but the foundations will be observing how knowledge work is done and understanding how to recognize quality in the end result.


This package is designed for 2013-2018 Ram trucks without the power folding mirror option. Purchase this kit today for an easy DIY solution to add power folding mirrors to your truck! This kit will also enable the puddle lights, turn signals, and auto-dim driver's side mirror.
*Driver's side auto-dim mirror will function as long as the truck features an interior auto-dim rear view mirror.


With the final trailer of "Beauty And The Beast" being released it means that it is coming very soon. The releases is about a month and a half away now! In this video we see a ton of new footage as well as our first listen to Ariana Grande and John Legend singing the title song, "Beauty And The Beast".


Munnar kolukkumalai directions sightseeing offers visitors an opportunity to enjoy a cup of tea in the highest plantation in the world. Here, one can enjoy a magnificent view of the beautiful valley of Munnar below. At about 800 meters above sea level, we even see the neighboring state of Tamil Nadu. A walk through these hills is every hiker's dream. The aroma of tea with fog-covered peaks in the background offers a fascinating sight.


text:
export function sleep(time_ms: number): Promise<void> {
  return new Promise(resolve => setTimeout(() => { resolve() }, time_ms))
}

/** a simple assert function; you can always use other 3rd asserting libs! */
export function assert(val: any, message?: string) {
  if (!val) throw new Error(message || "Assertion Failed")
}


We welcome Associate Dean for Academic Affairs and Professor of Education Charles Dorn's response to the October 13 article titled "Administrative hires exceed those of faculty as needs change." Dorn was kind enough to meet for 30 minutes with the Orient a few weeks ago as a source for this story. We appreciate that he clarified his views and deeply regret the errors that he identified and that he feels we misrepresented.
1. We indeed failed to include clarifying context following his quote about administrative hiring at other institutions. Context has been added in a corrected version of the story online.
2. Dorn took issue with our broad use of the term "administrator," but the term "Officer of Administration" is one used by the College in its handbook. In seeking to quantify how hiring has changed at the College over the decades, we think it makes sense to use "administrator," a derivative of the College's own classification. The term, like the College's designation, is not limited to those who are typically thought of as "administrators" and we hoped to make this clear by stating that "administrators range from deans to software engineers," and including a paragraph about newly-added administrative positions at Hawthorne Longfellow-Library.
3. Dorn is correct to point out that some employees are listed as both instructors and administrators. This error is regretful and has been corrected in the online version of the story. However, there are only nine cases of overlap: Professor McCormack, Professor Kaplan, Professor Holt, Professor Partridge, Lecturer Watkinson, Lecturer O'Connor, Lecturer Broda, Director McCarroll, Coach Pearson and Coach Ruddy. Moreover, the "Officers of Administration" classification provided by the College actually undercounts some administrative positions: Dorn himself is not counted as an administrator despite serving as an associate dean for academic affairs. Neither are his colleagues Professor Beane and Professor Higginbotham who are also associate deans for academic affairs.
4. While the Orient presented Dorn with data from the 2009-2010 catalogue, data reported in the article is taken from College catalogues from 1980–2010 with the exception of the 2017 data, for which we referenced the "People & Organizations" section of the online Academic Handbook. The college catalogues following the 2009-2010 academic year do not list other Officers of Administration.
We stand by the main conclusion of the article: that Bowdoin has prioritized administrative hiring over instructor hiring since 1980. The data clearly states that Bowdoin has added administrators (excluding support staff) at a faster rate than it has added employees inside the classroom and on the sports field during this time. Whether or not you use the term administrator to describe this group does not alter this fundamental point.
That being said, we apologize for the oversights of this piece and we will strive, as we always are, to do better. In the future, we hope to continue exploring these issues and we welcome critiques like Professor Dorn's that keep us honest.


Office Interiors designs flexible healthcare environments that adapt to the changing needs of today's medical community. Our experienced healthcare team delivers creative solutions that ensure the health and safety of patients, caregivers, guests and employees. From administrative to clinical environments, Office Interiors creates efficient, cost-effective solutions.


Heleen de Coninck is associate professor in innovation studies at the Environmental Science department at Radboud University's Faculty of Science in Nijmegen, the Netherlands. She is currently visiting the Energy Research Centre at UCT. Before joining Radboud University in 2012, she worked for over ten years at the unit Policy Studies of the Energy research Centre of the Netherlands (ECN). Her main field of work is climate change mitigation and policy analysis, in particular at the international level. She is a coordinating lead author in the IPCC Special Report on global warming of 1.5C.


text:
VIRBAC CORPORATION NAMES ROBERT "MAC" MACGREGOR VICE PRESIDENT, INDUSTRIAL OPERATIONS
by Eric Sagonowsky |
Fort Worth, Texas (May 18, 2015) – Virbac Corporation today announced that Mr. Robert "Mac" MacGregor has been named Vice President, Industrial Operations, effective immediately. In this role, Mr. MacGregor will be responsible for North American Industrial Operations, encompassing planning, directing and coordinating all manufacturing activities, to efficiently supply customers based upon their needs and pharmaceutical/regulatory requirements.
Mac will be the designated Site Manager for Virbac's Bridgeton, Missouri facility and will report to Paul Hays, President & CEO North America and functionally to Marc Bistuer, Head Global Industrial & Quality Assurance. Paul Hays said, "Mac brings over 30 years of rich experiences in manufacturing; with nearly 25 years in FDA pharmaceutical operations. We are delighted for him to join Virbac as we pursue our expansion plans and implement our Quality System Improvement Plan."
Most recently, Mac was with TEVA where he held the positions of General Manager for an antibiotic plant, VP Operations for TEVA Animal Health, Director of Engineering for the entire API Division and General Manager for an API plant. Prior to TEVA, Mac was Plant Manager for an analgesics plant in St. Louis belonging to Rhodia (Solvay Group). He started his career with Unilever in the UK followed by management roles at DuPont, both in the UK and US.
Mr. MacGregor received both his BS in Chemistry and his 3 years of post-graduate studies in Quantum Mechanics from the University of Bristol.
One of the world's largest laboratories dedicated exclusively to animal health, Virbac develops, manufactures, and distributes a wide range of products and services intended for the prevention and treatment of common pathologies in companion animals. Virbac Corporation, located in Fort Worth, Texas, is a leading companion animal health company offering products in the heartworm, tick and flea, dermatology, antibiotic, endocrinology, senior care, behavior, critical care nutrition, and oral hygiene markets.
Eric Sagonowsky

redpajama_set_name: RedPajamaCommonCrawl


text:
SeniorJournal.com - Daily News for Senior Citizens
FRONT PAGE • Aging • Health • Alzheimer's - Mental • Nutrition • Medicare & Medicaid • Politics • Fitness • Social Security • Alerts • Sex Health • Features • Retirement • Elder Care >Search >Senior Links
[NavBar.htm]
Senior Journal: Today's News and Information for Senior Citizens & Baby Boomers
More Senior Citizen News and Information Than Any Other Source - SeniorJournal.com
Need Great Lawyer – Medical, Nursing Home Injuries - Pd.Adv.
• Go to more on Aging News & Information or More Senior News on the Front Page
E-mail this page to a friend!
Aging News & Information
Differences Between Centenarians and Senior Citizens Explored by Census Bureau
Women dominate both age groups, 100 plus less educated, more likely living in poverty
April 22, 2014 - Centenarians have lower education levels, are overwhelmingly women and are more likely to live in poverty than the 65-and-older population, according to a new U.S. Census Bureau report. The report, "The Centenarian Population: 2007-2011," analyzes characteristics of centenarians and how they compare with those 65 years and older.
"Centenarians are a small group who are a significant indicator of American life," said Brian Kincel, a statistical analyst in the Census Bureau's Age and Special Populations Branch and the report's author.
"By living a century or more, they have seen great changes in the American landscape and their education levels reflect social and economic conditions in the 1920s and earlier. Today, their situations may vary based on many factors, and the statistics in this report begin to tell their story."
The report, based on results from the American Community Survey, compares social and economic differences between the 55,000 centenarians in the U.S. and the 40 million people 65 and older.
Major findings from the report include:
• Of centenarians, 57 percent received at least a high school diploma compared with 77 percent of the 65-and-older group.
• Women made up 81 percent of centenarians and 57 percent of those 65 and older.
• 17 percent of centenarians lived below the poverty line, and 9 percent of the 65-and-older population were in poverty.
• Among women, 3 percent of centenarians were married as opposed to 41 percent of women 65 and older. Among men, 23 percent of centenarians were married compared with 71 percent of men 65 and older.
• Of centenarians, 83 percent received Social Security income compared with 88 percent of the 65-and-older group.
• 24 percent of centenarians received retirement income, while 38 percent of the 65-and-older population received it.
About the American Community Survey
The American Community Survey provides a wide range of important statistics about all communities in the country. The American Community Survey gives communities the current information they need to plan investments and services. Retailers, homebuilders, police departments, and town and city planners are among the many private- and public-sector decision makers who count on these annual results.
Ever since Thomas Jefferson directed the first census in 1790, the census has collected detailed characteristics about our nation's people. Questions about jobs and the economy were added 20 years later under James Madison, who said such information would allow Congress to "adapt the public measures to the particular circumstances of the community," and over the decades allow America "an opportunity of marking the progress of the society."
This brief explores the social and economic characteristics collected annually in the ACS to provide information on the marital status, educational attainment, veteran status, income, and poverty levels of centenarians. Since centenarians represent a rare population, distinct from the rest of the older population in many ways, they are compared to the 65 years and older population.
Centenarians, people 100 years or older, made up a very small portion of the total population in the 2007–2011 ACS, accounting for 55,000 people (0.02 percent).
By comparison, the 65 years and over population accounted for 40 million people or 13 percent of the total population. The majority of centenarians were female (81 percent).
Women were also the majority of the 65 years and over population (57 percent). This disproportionately female representation in both the 65 years and over and centenarian populations was expected, since sex differences in mortality over time contribute to higher percentages of females than males at older ages.
Related Archive Stories
Life-Expectancy Gap Widens Between Wealthy and the Poor, Says New York Times Report
In upper half of income spectrum of U.S., men who reach 65 are living about six years longer than they did in the late 1970s; men in the lower half are living just 1.3 years longer.
You Don't Have to be a Centenarian to Pass Longevity to Your Children
Children of long-lived parents less likely to get cancer and other diseases associated with aging
Americans Have Worse Health Than People in Other Prosperous Countries Until They Pass Age 75
'Americans are dying and suffering at rates that we know are unnecessary because people in other high-income countries are living longer lives and enjoying better health'
Read the latest news on
Most centenarians reported being widowed (82 percent). Another 6 percent of centenarians were married, 4 percent were divorced, 0.4 percent were separated, and 7 percent were never married.
As expected, because of their younger age, the percentage widowed of the 65 years and over population (29 percent) was much smaller than that of the centenarian population. Over half of the 65 years and over population were married (54 percent). The percentage divorced of the 65 years and over population (11 percent) was more than double the percentage of the centenarian population (4 percent). The percentage separated of the 65 years and over population was also higher than that of the centenarian population (1 percent and 0.4 percent, respectively). The percentage never married of the 65 years and over population (5 percent) was lower than that of the centenarian population (7 percent).
Looking at marital status by sex, men in the centenarian population were more likely than women to be married (Table 1). Twenty-three percent of centenarian males were married, compared with 3 percent of females. Sixty-five percent of centenarian males were widowed, compared with 85 percent of females. A similar pattern existed for men and women who were 65 years and over. Seventy-one percent of males 65 years and over were married, compared with 41 percent of females. Thirteen percent of males 65 years and over were widowed, compared with 41 percent of females.
The percentage of married centenarians and the percentage of never married centenarians were not significantly different.
Turning to income, 83 percent of the centenarian population received Social Security income, while less than about one-quarter received retirement income (24 percent). The 65 years and over population displayed a higher percentage of those receiving Social Security income (88 percent) as well as retirement income (38 percent). The mean Social Security income ($11,933) and retirement income ($13,408) amounts were lower for centenarians than for the 65 years and over population ($12,605 and $18,643, respectively).
Note: In the survey people can be counted as receiving income from more than one source. Retirement income includes retirement pensions, survivor benefits, and disability income. Also, the mean of a particular type of income is obtained by dividing the total amount of that income for persons within their age group by the total number of those receiving said income within their age group.
Centenarian males were less likely to report Social Security income and more likely to report retirement income than centenarian females. Seventy-seven percent of centenarian men compared with 84 percent of centenarian women received Social Security income. Thirty percent of centenarian males compared with 23 percent of centenarian females received retirement income. In the 65 years and over population, similar percentages of males and females received Social Security income, at 88 percent and 87 percent, respectively. The percentage of males 65 years and over reporting retirement income (45 percent) was higher than that of their female counterparts (32 percent).
Regardless of age, men displayed higher mean Social Security and retirement incomes. Male centenarians received a mean Social Security income of $13,137 and a mean retirement income of $17,516, compared with $11,678 and $12,190, respectively, for centenarian females. Males 65 years and over received a mean Social Security income of $14,711 and a mean retirement income of $22,793, compared with $11,006 and $14,152, respectively, for females.
Although the majority of centenarians for whom poverty status was determined were above the poverty line, 17 percent lived in poverty. This was larger than the 9 percent of the 65 years and over population that lived in poverty. While the difference between the percentages of centenarian men (19 percent) and women (17 percent) living in poverty was not significant, the corresponding difference between men (7 percent) and women (11 percent) for the 65 years and over population was significant.
Centenarians made up a very small portion of the total population, representing a rare group. The centenarian population was 81 percent female and this affected some characteristics. Most centenarians were widowed. Centenarians reported a broad range of educational attainment. The majority of centenarians received retirement and/or Social Security income and lived above the poverty line. In many aspects, the centenarian population shared comparable trends with the 65 years and over population.
>> The report, "The Centenarian Population: 2007-2011
>> See the 2010 Census Special Report Centenarians: 2010, at <www.census.gov/prod/cen2010/reports/c2010sr-03.pdf>.
Search for more about this topic on SeniorJournal.com
Web SeniorJournal.com
Keep up with the latest news for senior citizens, baby boomers
Click to More Senior News on the Front Page
Copyright: SeniorJournal.com
Published by New Tech Media - www.NewTechMedia.com
Other New Tech Media sites include CaroleSutherland.com, BethJanicek.com, SASeniors.com, DrugDanger.com, etc.


text:
Film Studies minor expands course offerings, simplifies requirements
October 20, 2017 Malachy Dempsey
Associate professor of English and Coordinator of the film studies minor Jun Okada teaches "FMST 100: Introduction to Film Studies" (pictured above). Okada has worked to alter the minor, which has allowed students to more easily complete its requirements. These changes include utilizing Geneseo faculty to teach more courses and decreasing the number of needed prerequisite courses. (Annalee Bainnson/ photo editor)
The film studies minor recently underwent modifications to allow greater customization for students. Members of the minor have responded positively to the changes.
The film studies minor will have more classes taught by adjunct lecturer of English Johannes Bockwoldt and visiting assistant professor of music Brooke McCorkle, according to associate professor of English and Coordinator of the film studies minor Jun Okada. The minor will also only require "FMST 100: Introduction to Film Studies" now as well as five other elective courses.
Okada primarily made these changes in order to allow more students to easily register for the minor. The changes are also intended to provide more opportunities to complete the minor, instead of waiting until specific required courses are offered.
"One of the issues people had with declaring is that there are too many prerequisite courses, so students weren't able to declare until they had those," Okada said. "By reducing it to one prerequisite, they could just declare and see what else they're interested in from what classes are being offered."
Communication and musical theater double major sophomore Kaitlin Joyce, who is a film studies minor, believes this modification was neces to continue her studies.
"I was actually just having a thing where I was considering whether I needed to drop this," Joyce said. "I joined with the intention of taking screenwriting and video production and it was so tightly bound to certain times because there are fewer classes that it made things much more difficult. The addition of professors may actually allow easier scheduling for people who can't do the specific times."
Beyond program changes, Okada plans to affiliate the minor more with different campus activities like the Insomnia Film Festival, which occurs in March. Besides the film festival, the program has also tried to affiliate itself with the student-run Film Matters magazine, which is run by students from different colleges across the country.
English major senior Timothy Blomquist is also appreciative for the changes to the minor, due to past challenges in course availability.
"Because the department is so small, I've had difficulty fulfilling the requirements because there aren't necessarily enough classes," Blomquist said. "I know they seem to be taking initiative on growing the minor through Bockwoldt and McCorkle and I think that's good ... Unless the school wants to make a name for itself as a film school, I don't think they're going to put many resources into the department."
Blomquist feels that the film studies program at Geneseo would more realistically appeal to people who are just interested in film, rather than individuals determined to make a career in the field. Given the nature of the department in the college, the lack of resources provided for the department seems reasonable to Blomquist.
Joyce alternatively believes that the small size of the film studies minor was representative of a secondary position that arts receive at Geneseo.
"There should be way more of a spectrum for film studies. I feel like the arts here are so undermined," Joyce said. "Even just little additions like this to the film studies minor will help the school be a balanced community. Everyone needs a biology major, but film is entertainment that does so much, and we can't undermine it just because it's about film and it's a minor."
← Geneseo partakes in online tutoring initiative College begins search for vice president for administration and finance position after Milroy's retirement →


The Nature of Advancement:, and ProfileInheritance and Variety Diverse biological progression discussions have most certainly been managed around The wilderness of Advancement:, and The historical past. Options and Inheritance These debates established how the the wilderness of development is usually a important and strong processes. It is a historic system which, on millions of a long time, slowly and gradually selects the microorganisms that can be improved adapted recommended to their atmosphere to frequently replace personal life to make all experiencing organisms in your culture how they are at present. Progress is certainly not a finalized circumstance by which human beings are definitely the finished products. Very, it is actually a carrying on with strategy which have been evolving and developing living in the world for billions of yrs and continues on to complete this as long as organisms are usuallygiven birth to and passing away, and contending for what they really want to stay alive and replicate (AGI, 2005). This insightful essay brought up some good information from researches to be familiar with significantly better the nature of progress. Topic Advancement usually means a modification of a inhabitants of organism after a while. That is not always the scenario, although many regular people visualize development as a product that takes a long time, an issue that may need many several years.
An academic homework by Alters, et. Al (2005) on biological development explained that, designed by nature, solo-celled microorganisms, most notably microbes, travel an evolutionary swift-keep track of. Within just many days, a population of harmful microorganisms can almost reinvent on their own basically because they multiply without delay, acquire mutations from a immediate rate, and show their hereditary selective information, like exchanging cards, one of the other regular members into the populace. They evolve effortlessly because of their adaptive properties that allow them to live through the wiping out link between medicine, to flourish in seconds, to reignite microbe infections, so to infect further hosts within a single coughing. Prescription antibiotic amount of resistance is really surprising type of development. Evolutionary adjustments in antibiotic reluctance appear during a few weeks, if the application of the antibiotic is comprehensive plenty. Charles Robert Darwin, a naturalist, is recognized for getting the idea of herbal options, most commonly known as the tactical of an fittest. On December1831 and 27, Darwin remaining Great britain aboard a sailing ship HMS Beagle in a research research. Throughout his trip everywhere learning plants and animals he located on the voyage, Darwin discovered that inside your common global, reproduction approximately well balanced loss of life withautomobile accident and disorder, and aging.
He evolved into acquainted with the tremendous variation in elements amongst regular members of the same species, and discovered that a large number of different versions were found to be inherited. He projected that people whoever elements gives them strategies to best pull through also to multiply would leave a lot of young than very much less okay-adjusted affiliates. As a result, the profitable traits are certainly more popular in the following creation simply because these adaptive attributes were found to be approved onto the succeeding many years. Right here is the perception of simple options. Darwin planned that more than lots of years, the traits in a people could transform so notably which a new group is actually created. The idea of alternative range aimed to describe what causes evolutionary enhance among organisms. His 5-twelve months trip made it simpler for him acquire his facts and make his strategy.
He started to be increasingly satisfied of his idea of history by all natural decision, to ensure that on December 24, 1859, he released the idea in the guidebook called, Concerning the Origins of Species by way of Common Choices (Darwin, 1859). His way of thinking was supported and very much influenced by thegeological and biological, and geographical observations he previously had produced throughout his all five-year or so journey (AIBS, 1998). His formulated hints happen to be greeted with enthusiasm in some quarters but, not surprisingly, the reaction had not been basic. He was made to fight for his creative concepts not only against scientists who demanded tricky facts but also totheologians and philosophers, including a open public who assumed the idea was heretical. Many, in particular Darin`s good old friends and relations, turned out to be some what annoyed with regard to the new guidelines. One individual even labeled as Darwin the most severe male in England (Darwin, 1888). Bottom line In spite of the controversies, a number of people observed the great scientific disciplines in your design of progression and obtained approval progressively from biologists worldwide. As we speak, new spaces in the field of genetics have provided scientists new comprehension of how collection, inheritance, and story generate natural development of varieties.
Inside a reward days, virtually all scientists in this world accept the notion of the nature of evolution while the basis for the diversity of reality on the earth and in addition the On the origin of Varieties by Natural and organic Selection fuelled an explosion in biological review and data that remains before in the world today. Today, the nature of progress is biology`s fantastic unifying core motif, the concept that makes sense of the everyone knows about lifespan.
This entry was posted in Karaoke on January 26, 2012 by Demfy Lopez.


text:
Seal Software Bolsters Content Analytics AI Solutions with Acquisition of Global Leader Apogee Legal
Building on Seal's Leadership in the Intelligent Content Analytics (ICA) Market, Acquisition to Bring Comprehensive AI Analytics Suite to the Enterprise
Seal Software, the leading provider of content discovery and analytics solutions, today announced the acquisition of Apogee Legal, a global leader in advanced contract analytics for the enterprise, in a move that will bolster Seal's award-winning suite of market leading Intelligent Content Analytics (ICA) AI solutions and its global management team.
The acquisition of Apogee Legal and the incorporation of its advanced analytics and legal expertise into the Seal ICA platform gives users access to a broader and deeper set of analytics and insight. That insight empowers users to manage their business's legal and regulatory exposure, and extract valuable intelligence and data from complex documents such as vendor and customer contracts, financial documents, lease agreements and a plethora of others.
"Our clients have been clear that not only do they want an enterprise-class platform for contract analysis, but equally they need to solve their specific business problems," said Ulf Zetterberg, co-founder and CEO of Seal Software. "Over the past four years the Apogee team, which includes more than 20 AI-literate lawyers, has helped many of our clients do just that, as well as proactively developing advanced analytic 'packs' for highly complex cases. Having Apogee officially join Seal means that all of our clients will now be able to access the Apogee team's expertise and their advanced analytics."
Apogee Legal, whose advanced analytics includes solutions for a variety of industries and applications, has been a Seal business partner since 2015 and has actively worked with Seal across a variety of industries and use cases. Since 2016, Apogee has released multiple advanced analytics packs, on the Seal platform, to solve for a variety of enterprise challenges, including:
• Procurement Insight – advanced analytics to address supplier risk, regulatory requirements and common business questions
• M&A Insight – analytics for M&A transactions with an emphasis on enterprise integration and risk management
• GDPR Insight – data privacy solutions and third-party risk for the enterprise
• Financial Services Suite – including QFCs, syndicated credit agreements and ISDA master agreements
"We could not be more excited to join our partners and officially become part of the Seal team," said Jim Wagner, co-founder and managing director at Apogee. "Seal has established itself as the contract analytics platform of choice for many of the world's largest organizations. Through this combination we will be able to provide those enterprises with an even more comprehensive set of solutions."
"We have built Seal to be the most robust contract analytics platform available, and the Apogee team has fully taken advantage of those capabilities to serve many of our customers as well as to proactively develop advanced analytic 'packs' for highly complex use," said Kevin Gidney, co-founder and Chief Technology Officer at Seal. "Combining the legal AI experts of Apogee with our ML specialists creates one of the largest Legal AI development teams on the planet."
In connection with the transaction, Seal announced the following:
• All members of the Apogee team will be joining Seal and Seal will be expanding Apogee's Charlotte, North Carolina, operations further as Seal's east coast development center.
• Apogee co-founder, Matt Miller, will be responsible on an ongoing basis for leading both the Seal analytics production group and the Seal legal solutions team, and will have oversight of Seal's Charlotte operations.
• Apogee co-founder, Steve Harber, a veteran of more than 20 years in the legal technology arena, will focus on building out the Seal legal solutions strategy and the Seal legal partner channel.
• Apogee co-founder, Jim Wagner, will become chief strategy officer for Seal. In his capacity as chief strategy officer, Wagner will work closely with the Seal executive team to create, communicate and ensure the execution of the strategic plan for the company.
Customer response to the combination of Seal and Apogee has been enthusiastic. "We have been working with Apogee and Seal to support our contract analysis for a number of years," said Robert Jackson, executive vice president and general counsel of CyrusOne, Inc., a global data center provider. "We believe that artificial intelligence is an essential tool for the delivery of comprehensive and efficient legal services. Apogee has been a key partner to our legal team and has consistently provided customized solutions that leverage the Seal platform to support compliance, business intelligence and M&A. The marriage of the two companies should be a positive for us and for companies like us that want to get the most out of their contracts."
Seal's acquisition of Apogee is effective as of July 1, 2018, and all regulatory and other consents have been received.
The decision to combine Seal's market-leading artificial intelligence platform with Apogee's comprehensive advanced analytics suite for the enterprise, follows the announcement of Seal's global partnership with DocuSign on June 20, 2018, which will see Seal power DocuSign's broader System of Agreement strategy to automate and connect the entire process of how agreements are prepared, signed, enacted and managed.
Seal Software also recently disclosed that it had secured a $30 million investment from Toba Capital, the company's principal existing investor, to support its next stage of growth. Now ranked as one of the fastest growing companies in North America by Deloitte, in its most recent list of the Technology Fast 500, Seal Software is considered one of the most authoritative and innovative developers of AI technologies for the enterprise.