text:
Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia
Susan C. Antón
An increasing number of claims place hominids outside Africa and deep in Southeast Asia at about the same time that Homo erectus first appears in Africa. The most complete of the early specimens is the partial child's calvaria from Mojokerto (Perning I), Java, Indonesia. Discovered in 1936, the child has been assigned to Australopithecus and multiple species of Homo, including H. modjokertensis, and given developmental ages ranging from 1-8 years. This study systematically assesses Mojokerto relative to modern human and fossil hominid growth series and relative to adult fossil hominids. Cranial base and vault comparisons between Mojokerto and H. sapiens sapiens (Hss) (n = 56), Neandertel (n = 4), and H. erectus (n = 4) juveniles suggest a developmental age range between 4 and 6 years. This range is based in part on new standards for assessing the relative development of the glenoid fossa. Regression analyses of vault arcs and chords indicate that H. erectus juveniles have more rounded frontals and less angulated occipitals than their adult counterparts, whereas Hss juveniles do not show these differences relative to adults. The growth of the cranial superstructures and face appear critical to creating differences in vault contours between H. erectus and Hss. In comparison with adult H. erectus and early Homo (n = 27) and adult Hss (n = 179), the Mojokerto child is best considered a juvenile H. erectus on the basis of synapomorphies of the cranial vault, particularly a metopic eminence and occipital torus, as well as a suite of characters that describe but do not define H. erectus, including obelion depression, supratoral gutter, postorbital constriction, mastoid fissure, lack of sphenoid contribution to glenoid fossa, and length and breadth ratios of the temporomandibular joint. Mojokerto is similar to other juvenile H. erectus in the degree of development of its cranial superstructures and its vault contours relative to adult Indonesian specimens. The synapomorphies which Mojokerto shares with H. erectus are often considered autapomorphies of Asian H. erectus and confirm the early establishment and long-term continuity of the Asian H. erectus bauplan. This continuity does not, however, necessarily reflect on the pattern of origin of modern humans in the region.
https://doi.org/10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
Homo erectus
cranial development
vault contours
10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
Fingerprint Dive into the research topics of 'Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia'. Together they form a unique fingerprint.
Hominidae Medicine & Life Sciences
Indonesia Medicine & Life Sciences
Fossils Medicine & Life Sciences
Glenoid Cavity Medicine & Life Sciences
continuity Social Sciences
Southeastern Asia Medicine & Life Sciences
Mastoid Medicine & Life Sciences
Antón, S. C. (1997). Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia. American Journal of Physical Anthropology, 102(4), 497-514. https://doi.org/10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia. / Antón, Susan C.
In: American Journal of Physical Anthropology, Vol. 102, No. 4, 04.1997, p. 497-514.
Antón, SC 1997, 'Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia', American Journal of Physical Anthropology, vol. 102, no. 4, pp. 497-514. https://doi.org/10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
Antón SC. Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia. American Journal of Physical Anthropology. 1997 Apr;102(4):497-514. https://doi.org/10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
Antón, Susan C. / Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia. In: American Journal of Physical Anthropology. 1997 ; Vol. 102, No. 4. pp. 497-514.
@article{d39d7ee22b7d43e08ef2e42d366b9252,
title = "Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia",
abstract = "An increasing number of claims place hominids outside Africa and deep in Southeast Asia at about the same time that Homo erectus first appears in Africa. The most complete of the early specimens is the partial child's calvaria from Mojokerto (Perning I), Java, Indonesia. Discovered in 1936, the child has been assigned to Australopithecus and multiple species of Homo, including H. modjokertensis, and given developmental ages ranging from 1-8 years. This study systematically assesses Mojokerto relative to modern human and fossil hominid growth series and relative to adult fossil hominids. Cranial base and vault comparisons between Mojokerto and H. sapiens sapiens (Hss) (n = 56), Neandertel (n = 4), and H. erectus (n = 4) juveniles suggest a developmental age range between 4 and 6 years. This range is based in part on new standards for assessing the relative development of the glenoid fossa. Regression analyses of vault arcs and chords indicate that H. erectus juveniles have more rounded frontals and less angulated occipitals than their adult counterparts, whereas Hss juveniles do not show these differences relative to adults. The growth of the cranial superstructures and face appear critical to creating differences in vault contours between H. erectus and Hss. In comparison with adult H. erectus and early Homo (n = 27) and adult Hss (n = 179), the Mojokerto child is best considered a juvenile H. erectus on the basis of synapomorphies of the cranial vault, particularly a metopic eminence and occipital torus, as well as a suite of characters that describe but do not define H. erectus, including obelion depression, supratoral gutter, postorbital constriction, mastoid fissure, lack of sphenoid contribution to glenoid fossa, and length and breadth ratios of the temporomandibular joint. Mojokerto is similar to other juvenile H. erectus in the degree of development of its cranial superstructures and its vault contours relative to adult Indonesian specimens. The synapomorphies which Mojokerto shares with H. erectus are often considered autapomorphies of Asian H. erectus and confirm the early establishment and long-term continuity of the Asian H. erectus bauplan. This continuity does not, however, necessarily reflect on the pattern of origin of modern humans in the region.",
keywords = "Homo erectus, cranial development, temporal bone, vault contours",
author = "Ant{\'o}n, {Susan C.}",
doi = "10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P",
journal = "American Journal of Physical Anthropology",
T1 - Developmental age and taxonomic affinity of the Mojokerto child, Java, Indonesia
AU - Antón, Susan C.
N2 - An increasing number of claims place hominids outside Africa and deep in Southeast Asia at about the same time that Homo erectus first appears in Africa. The most complete of the early specimens is the partial child's calvaria from Mojokerto (Perning I), Java, Indonesia. Discovered in 1936, the child has been assigned to Australopithecus and multiple species of Homo, including H. modjokertensis, and given developmental ages ranging from 1-8 years. This study systematically assesses Mojokerto relative to modern human and fossil hominid growth series and relative to adult fossil hominids. Cranial base and vault comparisons between Mojokerto and H. sapiens sapiens (Hss) (n = 56), Neandertel (n = 4), and H. erectus (n = 4) juveniles suggest a developmental age range between 4 and 6 years. This range is based in part on new standards for assessing the relative development of the glenoid fossa. Regression analyses of vault arcs and chords indicate that H. erectus juveniles have more rounded frontals and less angulated occipitals than their adult counterparts, whereas Hss juveniles do not show these differences relative to adults. The growth of the cranial superstructures and face appear critical to creating differences in vault contours between H. erectus and Hss. In comparison with adult H. erectus and early Homo (n = 27) and adult Hss (n = 179), the Mojokerto child is best considered a juvenile H. erectus on the basis of synapomorphies of the cranial vault, particularly a metopic eminence and occipital torus, as well as a suite of characters that describe but do not define H. erectus, including obelion depression, supratoral gutter, postorbital constriction, mastoid fissure, lack of sphenoid contribution to glenoid fossa, and length and breadth ratios of the temporomandibular joint. Mojokerto is similar to other juvenile H. erectus in the degree of development of its cranial superstructures and its vault contours relative to adult Indonesian specimens. The synapomorphies which Mojokerto shares with H. erectus are often considered autapomorphies of Asian H. erectus and confirm the early establishment and long-term continuity of the Asian H. erectus bauplan. This continuity does not, however, necessarily reflect on the pattern of origin of modern humans in the region.
AB - An increasing number of claims place hominids outside Africa and deep in Southeast Asia at about the same time that Homo erectus first appears in Africa. The most complete of the early specimens is the partial child's calvaria from Mojokerto (Perning I), Java, Indonesia. Discovered in 1936, the child has been assigned to Australopithecus and multiple species of Homo, including H. modjokertensis, and given developmental ages ranging from 1-8 years. This study systematically assesses Mojokerto relative to modern human and fossil hominid growth series and relative to adult fossil hominids. Cranial base and vault comparisons between Mojokerto and H. sapiens sapiens (Hss) (n = 56), Neandertel (n = 4), and H. erectus (n = 4) juveniles suggest a developmental age range between 4 and 6 years. This range is based in part on new standards for assessing the relative development of the glenoid fossa. Regression analyses of vault arcs and chords indicate that H. erectus juveniles have more rounded frontals and less angulated occipitals than their adult counterparts, whereas Hss juveniles do not show these differences relative to adults. The growth of the cranial superstructures and face appear critical to creating differences in vault contours between H. erectus and Hss. In comparison with adult H. erectus and early Homo (n = 27) and adult Hss (n = 179), the Mojokerto child is best considered a juvenile H. erectus on the basis of synapomorphies of the cranial vault, particularly a metopic eminence and occipital torus, as well as a suite of characters that describe but do not define H. erectus, including obelion depression, supratoral gutter, postorbital constriction, mastoid fissure, lack of sphenoid contribution to glenoid fossa, and length and breadth ratios of the temporomandibular joint. Mojokerto is similar to other juvenile H. erectus in the degree of development of its cranial superstructures and its vault contours relative to adult Indonesian specimens. The synapomorphies which Mojokerto shares with H. erectus are often considered autapomorphies of Asian H. erectus and confirm the early establishment and long-term continuity of the Asian H. erectus bauplan. This continuity does not, however, necessarily reflect on the pattern of origin of modern humans in the region.
KW - Homo erectus
KW - cranial development
KW - temporal bone
KW - vault contours
U2 - 10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
DO - 10.1002/(SICI)1096-8644(199704)102:4<497::AID-AJPA6>3.0.CO;2-P
JO - American Journal of Physical Anthropology
JF - American Journal of Physical Anthropology


text:
Q: JS Sort by specific sort order I need to sort my data by a specific order as shown below.
const sortBy = ['b','a','c','e','d']
const data = ['a','d','e']

I know how to sort by asscending/descending
console.log(data.sort((a, b) => a > b)) //["a", "d", "e"]
console.log(data.sort((a, b) => a < b)) //["e", "d", "a"]

But is it possible using .sort to sort in a specific order?
eg below my desired order is sortBy
I am currently getting this to work by creating an array of common items between my sort array and my data.
const commonItems = getCommonItemsInArrays(sortBy,data)
console.log(commonItems.map(item => item)) //["a", "e", "d"]

function getCommonItemsInArrays(array1,array2){
  return array1.filter(n => array2.indexOf(n) >= 0)
}

This seems to be working ok but I was wondering if there was a way to handle this via sort?

A: Your .sort() callback can do whatever it needs to do to figure out whether any given item should be before or after any other given item. So it can look up the index of the current item within your sortBy array and proceed accordingly:

const sortBy = ['b','a','c','e','d']
const data = ['a','d','e']

console.log( data.sort((a,b) => sortBy.indexOf(a) - sortBy.indexOf(b)) )

Calling .indexOf() multiple times during the sort would be kind of inefficient though, so you might want to turn you sortBy into an object before you start:

const sortBy = ['b','a','c','e','d']
const data = ['a','d','e']

const sortByObject = sortBy.reduce((a,c,i) => {
  a[c] = i
  return a
}, {})

console.log( data.sort((a,b) => sortByObject[a] - sortByObject[b]) )

(Note that the sort callback is not supposed to return a boolean value.)

redpajama_set_name: RedPajamaStackExchange


You need an easy way to manage a tonne of creative assets. You'd like one place where everyone — marketers, creatives and outside agencies — can find what they need to develop consistent experiences across channels. It will take a robust solution to help you to keep every channel up to date with the latest images and video.
It's important to deliver consistent experiences across web, mobile, video, social and other channels. And you need to do it efficiently. You need a solution that allows you to quickly build consistent brand experiences for all screens and devices without increasing costs and complexity. And without depending on IT.
Customers have an endless appetite for engaging and authentic content. But it's not easy for your team to create a lot of it quickly. You need a solution that lets you re-purpose the authentic user-generated content that's already being shared through social channels. Such a solution would save you time and help ensure you have the relevant material that builds community and loyalty.


Jesus calls us to help people around us. Because of this the Eastgate church both partners with area aid agencies and has local assistance programs designed to give people in need a leg up.
If you are interested in learning more, whether to seek assistance or to be involved, please feel free to drop us a note through our "Contact Us" page.


Alor Island is something special. Just like the rest of Nusa Tenggara Timor, travelling here is as close to time travelling as possible. Glimpse into our homo sapien pasts by exploring village who still live exactly how they have always lived. Alor is also lucky to have amazing oceans, reefs, and beaches.
Support traditional villages by visiting them in a respectful manner.


In terms of the Listings Requirements of the JSE Limited, Trencor's reviewed provisional results for the year ended 31 December 2017 should have been published by 31 March 2018 and the annual financial statements for this period are due by 30 April 2018. Regrettably, the Company is not in a position to publish its provisional results and annual financial statements timeously due to the onerous and time-consuming exercise of converting to IFRS the US GAAP compliant results of Textainer Group Holdings Limited (NYSE: TGH), in which Trencor had a 48% beneficiary interest at year-end. The Company intends publishing its provisional results and annual financial statements as soon as practically possible.
Shareholders are advised to view any announcement issued by the JSE Limited in regard to Trencor's failure to timeously publish its results and/or the marking of Trencor's listing with a "reporting error" annotation in the above context.
Shareholders are referred to our SENS announcement on 2 January 2018, wherein we advised that, with effect from Trencor's financial year ending 31 December 2018, the above-mentioned severe pressure on and delays in meeting reporting deadlines should not re-occur as the financial results of Textainer, reporting under US GAAP, will then no longer be required to be converted into IFRS for inclusion in the results of Trencor.


text:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Core.Mapping;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Validation;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Abp.Collections.Extensions;
using Abp.Configuration.Startup;
using Abp.Dependency;
using Abp.Domain.Entities;
using Abp.Domain.Entities.Auditing;
using Abp.Domain.Repositories;
using Abp.Domain.Uow;
using Abp.EntityFramework.Uow;
using Abp.EntityFramework.Utils;
using Abp.Events.Bus;
using Abp.Events.Bus.Entities;
using Abp.Extensions;
using Abp.Runtime.Session;
using Abp.Timing;
using Castle.Core.Logging;
using EntityFramework.DynamicFilters;

namespace Abp.EntityFramework
{
    /// <summary>
    /// Base class for all DbContext classes in the application.
    /// </summary>
    public abstract class AbpDbContext : DbContext, ITransientDependency, IShouldInitialize, IShouldInitializeDcontext
    {
        /// <summary>
        /// Used to get current session values.
        /// </summary>
        public IAbpSession AbpSession { get; set; }

        /// <summary>
        /// Used to trigger entity change events.
        /// </summary>
        public IEntityChangeEventHelper EntityChangeEventHelper { get; set; }

        /// <summary>
        /// Reference to the logger.
        /// </summary>
        public ILogger Logger { get; set; }

        /// <summary>
        /// Reference to the event bus.
        /// </summary>
        public IEventBus EventBus { get; set; }

        /// <summary>
        /// Reference to GUID generator.
        /// </summary>
        public IGuidGenerator GuidGenerator { get; set; }

        /// <summary>
        /// Reference to the current UOW provider.
        /// </summary>
        public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; }

        /// <summary>
        /// Reference to multi tenancy configuration.
        /// </summary>
        public IMultiTenancyConfig MultiTenancyConfig { get; set; }

        /// <summary>
        /// Can be used to suppress automatically setting TenantId on SaveChanges.
        /// Default: false.
        /// </summary>
        public bool SuppressAutoSetTenantId { get; set; }

        /// <summary>
        /// Constructor.
        /// Uses <see cref="IAbpStartupConfiguration.DefaultNameOrConnectionString"/> as connection string.
        /// </summary>
        protected AbpDbContext()
        {
            InitializeDbContext();
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        protected AbpDbContext(string nameOrConnectionString)
            : base(nameOrConnectionString)
        {
            InitializeDbContext();
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        protected AbpDbContext(DbCompiledModel model)
            : base(model)
        {
            InitializeDbContext();
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        protected AbpDbContext(DbConnection existingConnection, bool contextOwnsConnection)
            : base(existingConnection, contextOwnsConnection)
        {
            InitializeDbContext();
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        protected AbpDbContext(string nameOrConnectionString, DbCompiledModel model)
            : base(nameOrConnectionString, model)
        {
            InitializeDbContext();
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        protected AbpDbContext(ObjectContext objectContext, bool dbContextOwnsObjectContext)
            : base(objectContext, dbContextOwnsObjectContext)
        {
            InitializeDbContext();
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        protected AbpDbContext(DbConnection existingConnection, DbCompiledModel model, bool contextOwnsConnection)
            : base(existingConnection, model, contextOwnsConnection)
        {
            InitializeDbContext();
        }

        private void InitializeDbContext()
        {
            SetNullsForInjectedProperties();
            RegisterToChanges();
        }

        private void RegisterToChanges()
        {
            ((IObjectContextAdapter) this)
                .ObjectContext
                .ObjectStateManager
                .ObjectStateManagerChanged += ObjectStateManager_ObjectStateManagerChanged;
        }

        protected virtual void ObjectStateManager_ObjectStateManagerChanged(object sender, CollectionChangeEventArgs e)
        {
            var contextAdapter = (IObjectContextAdapter) this;
            if (e.Action != CollectionChangeAction.Add)
            {
                return;
            }

            var entry = contextAdapter.ObjectContext.ObjectStateManager.GetObjectStateEntry(e.Element);
            switch (entry.State)
            {
                case EntityState.Added:
                    CheckAndSetId(entry.Entity);
                    CheckAndSetMustHaveTenantIdProperty(entry.Entity);
                    SetCreationAuditProperties(entry.Entity, GetAuditUserId());
                    break;
                //case EntityState.Deleted: //It's not going here at all
                //    SetDeletionAuditProperties(entry.Entity, GetAuditUserId());
                //    break;
            }
        }

        private void SetNullsForInjectedProperties()
        {
            Logger = NullLogger.Instance;
            AbpSession = NullAbpSession.Instance;
            EntityChangeEventHelper = NullEntityChangeEventHelper.Instance;
            GuidGenerator = SequentialGuidGenerator.Instance;
            EventBus = NullEventBus.Instance;
        }

        public virtual void Initialize()
        {
            Database.Initialize(false);
            this.SetFilterScopedParameterValue(AbpDataFilters.MustHaveTenant, AbpDataFilters.Parameters.TenantId,
                AbpSession.TenantId ?? 0);
            this.SetFilterScopedParameterValue(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId,
                AbpSession.TenantId);
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            ConfigureFilters(modelBuilder);
        }

        protected virtual void ConfigureFilters(DbModelBuilder modelBuilder)
        {
            modelBuilder.Filter(AbpDataFilters.SoftDelete, (ISoftDelete d) => d.IsDeleted, false);
            modelBuilder.Filter(AbpDataFilters.MustHaveTenant,
#pragma warning disable CS0472 // The result of the expression is always the same since a value of this type is never equal to 'null'
				(IMustHaveTenant t, int tenantId) => t.TenantId == tenantId || (int?) t.TenantId == null,
#pragma warning restore CS0472 // While "(int?)t.TenantId == null" seems wrong, it's needed. See https://github.com/jcachat/EntityFramework.DynamicFilters/issues/62#issuecomment-208198058
                0);
            modelBuilder.Filter(AbpDataFilters.MayHaveTenant,
                (IMayHaveTenant t, int? tenantId) => t.TenantId == tenantId, 0);
        }

        public override int SaveChanges()
        {
            try
            {
                var changedEntities = ApplyAbpConcepts();
                var result = base.SaveChanges();
                EntityChangeEventHelper.TriggerEvents(changedEntities);
                return result;
            }
            catch (DbEntityValidationException ex)
            {
                LogDbEntityValidationException(ex);
                throw;
            }
        }

        public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken)
        {
            try
            {
                var changeReport = ApplyAbpConcepts();
                var result = await base.SaveChangesAsync(cancellationToken);
                await EntityChangeEventHelper.TriggerEventsAsync(changeReport);
                return result;
            }
            catch (DbEntityValidationException ex)
            {
                LogDbEntityValidationException(ex);
                throw;
            }
        }

        protected virtual EntityChangeReport ApplyAbpConcepts()
        {
            var changeReport = new EntityChangeReport();

            var userId = GetAuditUserId();

            foreach (var entry in ChangeTracker.Entries().ToList())
            {
                ApplyAbpConcepts(entry, userId, changeReport);
            }

            return changeReport;
        }

        public virtual void Initialize(AbpEfDbContextInitializationContext initializationContext)
        {
            var uowOptions = initializationContext.UnitOfWork.Options;
            if (uowOptions.Timeout.HasValue && !Database.CommandTimeout.HasValue)
            {
                Database.CommandTimeout = uowOptions.Timeout.Value.TotalSeconds.To<int>();
            }

            if (Clock.SupportsMultipleTimezone)
            {
                ((IObjectContextAdapter) this).ObjectContext.ObjectMaterialized += (sender, args) =>
                {
                    var entityType = ObjectContext.GetObjectType(args.Entity.GetType());

                    Configuration.AutoDetectChangesEnabled = false;
                    var previousState = Entry(args.Entity).State;

                    DateTimePropertyInfoHelper.NormalizeDatePropertyKinds(args.Entity, entityType);

                    Entry(args.Entity).State = previousState;
                    Configuration.AutoDetectChangesEnabled = true;
                };
            }
        }

        protected virtual void ApplyAbpConcepts(DbEntityEntry entry, long? userId, EntityChangeReport changeReport)
        {
            switch (entry.State)
            {
                case EntityState.Added:
                    ApplyAbpConceptsForAddedEntity(entry, userId, changeReport);
                    break;
                case EntityState.Modified:
                    ApplyAbpConceptsForModifiedEntity(entry, userId, changeReport);
                    break;
                case EntityState.Deleted:
                    ApplyAbpConceptsForDeletedEntity(entry, userId, changeReport);
                    break;
            }

            AddDomainEvents(changeReport.DomainEvents, entry.Entity);
        }

        protected virtual void ApplyAbpConceptsForAddedEntity(DbEntityEntry entry, long? userId,
            EntityChangeReport changeReport)
        {
            CheckAndSetId(entry.Entity);
            CheckAndSetMustHaveTenantIdProperty(entry.Entity);
            CheckAndSetMayHaveTenantIdProperty(entry.Entity);
            SetCreationAuditProperties(entry.Entity, userId);
            changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Created));
        }

        protected virtual void ApplyAbpConceptsForModifiedEntity(DbEntityEntry entry, long? userId,
            EntityChangeReport changeReport)
        {
            SetModificationAuditProperties(entry.Entity, userId);

            if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
            {
                SetDeletionAuditProperties(entry.Entity, userId);
                changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
            }
            else
            {
                changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Updated));
            }
        }

        protected virtual void ApplyAbpConceptsForDeletedEntity(DbEntityEntry entry, long? userId,
            EntityChangeReport changeReport)
        {
            if (IsHardDeleteEntity(entry))
            {
                changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
                return;
            }

            CancelDeletionForSoftDelete(entry);
            SetDeletionAuditProperties(entry.Entity, userId);
            changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
        }

        protected virtual bool IsHardDeleteEntity(DbEntityEntry entry)
        {
            if (!EntityHelper.IsEntity(entry.Entity.GetType()))
            {
                return false;
            }

            if (CurrentUnitOfWorkProvider?.Current?.Items == null)
            {
                return false;
            }

            if (!CurrentUnitOfWorkProvider.Current.Items.ContainsKey(UnitOfWorkExtensionDataTypes.HardDelete))
            {
                return false;
            }

            var hardDeleteItems = CurrentUnitOfWorkProvider.Current.Items[UnitOfWorkExtensionDataTypes.HardDelete];
            if (!(hardDeleteItems is HashSet<string> objects))
            {
                return false;
            }

            var currentTenantId = GetCurrentTenantIdOrNull();
            var hardDeleteKey = EntityHelper.GetHardDeleteKey(entry.Entity, currentTenantId);
            return objects.Contains(hardDeleteKey);
        }

        protected virtual void AddDomainEvents(List<DomainEventEntry> domainEvents, object entityAsObj)
        {
            var generatesDomainEventsEntity = entityAsObj as IGeneratesDomainEvents;
            if (generatesDomainEventsEntity == null)
            {
                return;
            }

            if (generatesDomainEventsEntity.DomainEvents.IsNullOrEmpty())
            {
                return;
            }

            domainEvents.AddRange(
                generatesDomainEventsEntity.DomainEvents.Select(
                    eventData => new DomainEventEntry(entityAsObj, eventData)));
            generatesDomainEventsEntity.DomainEvents.Clear();
        }

        protected virtual void CheckAndSetId(object entityAsObj)
        {
            //Set GUID Ids
            var entity = entityAsObj as IEntity<Guid>;
            if (entity != null && entity.Id == Guid.Empty)
            {
                var entityType = ObjectContext.GetObjectType(entityAsObj.GetType());
                var idIdPropertyName = GetIdPropertyName(entityType);
                var edmProperty = GetEdmProperty(entityType, idIdPropertyName);

                if (edmProperty != null && edmProperty.StoreGeneratedPattern == StoreGeneratedPattern.None)
                {
                    entity.Id = GuidGenerator.Create();
                }
            }
        }

        EdmProperty GetEdmProperty(Type type, string propertyName)
        {
            var metadata = ((IObjectContextAdapter) this).ObjectContext.MetadataWorkspace;

            var objectItemCollection = ((ObjectItemCollection) metadata.GetItemCollection(DataSpace.OSpace));

            var entityType = metadata.GetItems<EntityType>(DataSpace.OSpace)
                .Single(t => objectItemCollection.GetClrType(t) == type);

            var entitySet = metadata.GetItems<EntityContainer>(DataSpace.SSpace).Single().EntitySets
                .Single(s => s.ElementType.Name == entityType.Name);

            return entitySet.ElementType.Properties.Single(e =>
                string.Equals(e.Name, propertyName, StringComparison.OrdinalIgnoreCase));
        }

        string GetIdPropertyName(Type type)
        {
            var metadata = ((IObjectContextAdapter) this).ObjectContext.MetadataWorkspace;

            var objectItemCollection = ((ObjectItemCollection) metadata.GetItemCollection(DataSpace.OSpace));

            var entityType = metadata.GetItems<EntityType>(DataSpace.OSpace)
                .Single(t => objectItemCollection.GetClrType(t) == type);

            var entitySetCSpace = metadata
                .GetItems<EntityContainer>(DataSpace.CSpace)
                .Single()
                .EntitySets
                .Single(s => s.ElementType.Name == entityType.Name);

            var mapping = metadata.GetItems<EntityContainerMapping>(DataSpace.CSSpace)
                .Single()
                .EntitySetMappings
                .Single(s => s.EntitySet == entitySetCSpace);

            return mapping
                .EntityTypeMappings.Single()
                .Fragments.Single()
                .PropertyMappings
                .OfType<ScalarPropertyMapping>()
                .Single(m => m.Property.Name == nameof(Entity.Id))
                .Column
                .Name;
        }

        protected virtual void CheckAndSetMustHaveTenantIdProperty(object entityAsObj)
        {
            if (SuppressAutoSetTenantId)
            {
                return;
            }

            //Only set IMustHaveTenant entities
            if (!(entityAsObj is IMustHaveTenant))
            {
                return;
            }

            var entity = entityAsObj.As<IMustHaveTenant>();

            //Don't set if it's already set
            if (entity.TenantId != 0)
            {
                return;
            }

            var currentTenantId = GetCurrentTenantIdOrNull();

            if (currentTenantId != null)
            {
                entity.TenantId = currentTenantId.Value;
            }
            else
            {
                throw new AbpException("Can not set TenantId to 0 for IMustHaveTenant entities!");
            }
        }

        protected virtual void CheckAndSetMayHaveTenantIdProperty(object entityAsObj)
        {
            if (SuppressAutoSetTenantId)
            {
                return;
            }

            //Only set IMayHaveTenant entities
            if (!(entityAsObj is IMayHaveTenant))
            {
                return;
            }

            var entity = entityAsObj.As<IMayHaveTenant>();

            //Don't set if it's already set
            if (entity.TenantId != null)
            {
                return;
            }

            //Only works for single tenant applications
            if (MultiTenancyConfig?.IsEnabled ?? false)
            {
                return;
            }

            //Don't set if MayHaveTenant filter is disabled
            if (!this.IsFilterEnabled(AbpDataFilters.MayHaveTenant))
            {
                return;
            }

            entity.TenantId = GetCurrentTenantIdOrNull();
        }

        protected virtual void SetCreationAuditProperties(object entityAsObj, long? userId)
        {
            EntityAuditingHelper.SetCreationAuditProperties(
                MultiTenancyConfig,
                entityAsObj,
                AbpSession.TenantId,
                userId,
                CurrentUnitOfWorkProvider?.Current?.AuditFieldConfiguration
            );
        }

        protected virtual void SetModificationAuditProperties(object entityAsObj, long? userId)
        {
            EntityAuditingHelper.SetModificationAuditProperties(
                MultiTenancyConfig,
                entityAsObj,
                AbpSession.TenantId,
                userId,
                CurrentUnitOfWorkProvider?.Current?.AuditFieldConfiguration
            );
        }

        protected virtual void CancelDeletionForSoftDelete(DbEntityEntry entry)
        {
            if (!(entry.Entity is ISoftDelete))
            {
                return;
            }

            var softDeleteEntry = entry.Cast<ISoftDelete>();
            softDeleteEntry.Reload();
            softDeleteEntry.State = EntityState.Modified;
            softDeleteEntry.Entity.IsDeleted = true;
        }

        protected virtual void SetDeletionAuditProperties(object entityAsObj, long? userId)
        {
            EntityAuditingHelper.SetDeletionAuditProperties(
                MultiTenancyConfig,
                entityAsObj,
                AbpSession.TenantId,
                userId,
                CurrentUnitOfWorkProvider?.Current?.AuditFieldConfiguration
            );
        }

        protected virtual void LogDbEntityValidationException(DbEntityValidationException exception)
        {
            Logger.Error("There are some validation errors while saving changes in EntityFramework:");
            foreach (var ve in exception.EntityValidationErrors.SelectMany(eve => eve.ValidationErrors))
            {
                Logger.Error(" - " + ve.PropertyName + ": " + ve.ErrorMessage);
            }
        }

        protected virtual long? GetAuditUserId()
        {
            if (AbpSession.UserId.HasValue &&
                CurrentUnitOfWorkProvider != null &&
                CurrentUnitOfWorkProvider.Current != null &&
                CurrentUnitOfWorkProvider.Current.GetTenantId() == AbpSession.TenantId)
            {
                return AbpSession.UserId;
            }

            return null;
        }

        protected virtual int? GetCurrentTenantIdOrNull()
        {
            if (CurrentUnitOfWorkProvider?.Current != null)
            {
                return CurrentUnitOfWorkProvider.Current.GetTenantId();
            }

            return AbpSession.TenantId;
        }
    }
}

redpajama_set_name: RedPajamaGithub


In what country is each port whose ships ply the Atlantic Ocean?
Pair the two men who ran against the same candidate for President.
Which character on the right is major in each musical?
What does each meter measure?
Pair the Billboard Hot 100 #1 song with an urban feature in its title with the artist or group recording it.
Pair each nation south of the U.S. with its capital city.
Which British poet penned each noted verse?
Now that the coventions are over, try your knowledge of past elections by pairing the slogan with the candidate.
Match each slogan with the company whose ads feature it.
A KAiser is a German emperor; what are these other KA things?
Can you get straight what bodies of water each Strait connects?
Pair each human body part with its alternate English definition.
Match each 2008 popular hardcover to its author--then try one or more for your reading enlightenment.
Pair each 2008 hardcover bestseller to its author--then try one or more for your reading pleasure.
On which TV show did each Dr. cheer us up?
Pair each word meaning "lover of" with what he or she loves.
Match the recording artist or group to their Billboard Hot 100 #1 hit with a color in its title.
What two U. S. states stare at each other across each river on the left?


Winter is around the corner, and it's going to be a cold one. Many of you reading this post are able to keep warm this winter. Other people in South Africa are not as fortunate. Today the Junk Mail team would like to tell you about the Twitter Blanket Drive (or #TBDZA). Junk Mail Cares, after all.
Some of you reading this might be asking yourselves what is this Twitter Blanket Drive (or #TBDZA)? Well, it's South Africa's largest social media fuelled fund-raising initiative which is now in it's third year running.
The Twitter Blanket Drive started on a cold autumn day when Melanie Minnaar (@MelanieMinnaar on Twitter) was on maternity leave. She was warm and cosy lying in bed with her newborn second son, and while looking out the window she thought to herself how difficult it must be for the less fortunate folks who don't have basic needs at this time of the year.
She tweeted to the Twitterverse (she had less than 200 followers back then) and asked if anyone would like to join her in collecting blankets for the needy. She was hoping to get about 15-20 people together for a TweetUp and then simply handover a bag of blankets to a local charity. In less than 2 weeks the idea had turned into a national initiative with volunteers coming forward to be event hosts, venue hosts and sponsors. It was quite overwhelming for her.
Melanie has long acknowledged that the Twitter Blanket Drive (which official Twitter hashtag is #TBDZA) is not simply another fundraising project. Through social media it has harnessed the enthusiasm and willingness of people who just want to do good but don't know how. It has been described as a movement towards action instead.
In 2010 the collective South African Twitter community managed to pull together 8 different events around the country collecting just over 500 blankets and a handful of cash donations. Some bright spark had the idea to take the Twitter Blanket Drive to the inaugural rugby match at Soccer City that year and the event was commented on by most rugby media and bloggers. The 2011 drive blew everyone away, growing to 11 national events (which raised over 4,000 blankets and more than R30,000 in charitable donations). Makro also came on board with 2 weeks left in the project and opened up their national branches as drop off points and provided a discounted rate on blankets.
Melanie Minnaar is the Founder of the drive. Ownership belongs to all Tweeps (or people) who participate. She's a marketer but not an NGO. She knows her limits, and 2011's event hit that limit. For the 2012 event Melanie has brought on the reputable NGO The Tomorrow Trust (which is run by Kim Feinberg) to act as central point for all cash and cheque donations. This will ensure that 2012's #TBDZA retains its integrity through a formal auditing process and that donors can be guaranteed of their contributions being processed and directed where they are needed most to the selected charities for this year's drive.
The main aim of 2012 #TBDZA is to collect as many blankets as possible and distribute them where they are most needed around the country during the cold winter months. A blanket can save a life. Based on 80,000 active Twitter users in South Africa: if just 1% participated by donating 1 blanket and attending one of the #TBDZA TweetUps this initiative could collect 8,000 blankets. This would be double 2011's figure.
One of the drawcards for the Twitter Blanket Drive is that once a year virtual relationships become real through this TweetUp for good. People who meet up at any of the events immediately have something in common to talk about and they also now share a common cause. Conversations based on shared values is a catalyst for participation. In 2011 over 1,000 people braved the cold to attend an event around the country. "I would like to double this figure in 2012". Melanie's ultimate goal will be to have the event recorded in the Guinness Book of Records for the largest "TweetUp" in the world. Regarding events: She would really like Bloemfontein, East London and Kimberley to participate this year. Realistically the Twitter Blanket Drive is aiming for 15 events nationwide and is also aiming to grow attendance at them from 2013 onwards.
The official #TBDZA "Tweetup" (this is where the people of twitter arrange a meet and greet) will be held in several venues around the country on the 26 May 2012. Dedicated volunteers are currently sourcing venue options allowing for widespread participation. Details will be posted on www.twitterblanketdrive.co.za once venues are finalized.
If you want to get involved in this great initiative, tweet Melanie Minnaar via @MelanieMinnaar on Twitter, follow the #TBDZA hashtag on Twitter or mail Melanie directly via melanie@twitterblanketdrive.co.za.


text:
Phones/Tablets/Mobile Tech
iOS 14.5 Beta 3 Brings Heavy Changes on Music App & Other iPhone Sections; Here's How to Install
Giuliano J. de Leon, Tech Times 03 March 2021, 08:03 am
(Photo : Photo by Spencer Platt/Getty Images) People purchase the new iPhone XS and XS Max at the Apple store in Midtown Manhattan on September 21, 2018 in New York City. The two new phones, which feature longer battery life and faster processors, went on sale Friday. Apple recently hit a market cap of $1 trillion, making it the first publicly traded U.S. company to reach $1 trillion.
(Photo : Photo by Justin Sullivan/Getty Images) Apple CEO Steve Jobs watches a video of the new iPhone 3G as he delivers the keynote address at the Apple Worldwide Web Developers Conference June 9, 2008 in San Francisco, California. Jobs kicked off the 2008 WWDC conference with a keynote where he announced an upgraded version of the popular iPhone called the iPhone 3G.
iOS 14.5's third beta can now be installed via OTA update. Previously, it is was not available from the Developer website since the tech giant manufacturer pulled the third developer beta of iPhone's latest software.
(Photo : Photo by Justin Sullivan/Getty Images)
Apple CEO Steve Jobs watches a video of the new iPhone 3G as he delivers the keynote address at the Apple Worldwide Web Developers Conference June 9, 2008 in San Francisco, California. Jobs kicked off the 2008 WWDC conference with a keynote where he announced an upgraded version of the popular iPhone called the iPhone 3G.
Also Read: M1 Mac User Claim Apple Holds Their Apple ID If They Fail to Pay for Its Latest Laptop-- Even When Trading an Old Device
According to 9to5Mac's latest report, iOS 14.5 Beta 3 has rolled out, again, on Mar. 2, which is just two weeks after Apple released its previous iOS 14.5 Beta 2. The latest iPhone currently offers new features that will surely improve the users' smartphone experience.
These include unlocking an iPhone device using an Apple Watch. On the other hand, the new iOSn 14.5 Beta 3 also brings other further improvements and major changes to certain features of the latest iPhone 12 lineup.
Apple confirmed that it is now available via its Developer web portal. However, most users can't see it via the Settings app. This could mean that the tech giant company is not yet finished with the software's third beta.
Installing iOS 14.5 Beta 3
Aside from iOS 14.5's third beta, WCC FTech confirmed that Apple also released its latest iPadOS 14.5's Beta 3 to iPad users across the globe. If you want to experience their new features, the first thing you need to do is register with Apple so that your device can receive the company's latest updates. Here are the next steps you need to follow:
(Photo : Photo by Spencer Platt/Getty Images)
People purchase the new iPhone XS and XS Max at the Apple store in Midtown Manhattan on September 21, 2018 in New York City. The two new phones, which feature longer battery life and faster processors, went on sale Friday. Apple recently hit a market cap of $1 trillion, making it the first publicly traded U.S. company to reach $1 trillion.
First, you need to connect to strong Wi-Fi.
After that, you must charge your device at least 50%.
When your device is ready, you need to launch your Settings.
Once your Settings is open, you can now navigate to the General options and then go to the Software Update section.
Click the Download and Install option. However, you need to make sure that the latest iPadOS 14.5 and iOS 14.5 Beta 3 are available on your device. After that, you can now access your iPhone and iPad's latest features and other changes.
iOS 14.5's new features
Apple's latest iPhone software offers a variety of new changes in the popular Music app. These include Swipe gestures in albums and playlists, sharing song lyrics, Siri requests' default music player, and the latest pop-over menus. These are just some of the latest features that are currently available in the latest iOS 14.5 Beta 3. Apple is also expected to bring new enhancements once the latest iPhone system is complete.
For more news updates about Apple's iOS, iPadOS, and other products, always keep your tabs open here at TechTimes.
Related Article: Apple Removes Rosetta for M1 Macs in macOS 11.3 Beta Update-Why Are They Doing This?
This article is owned by TechTimes.
Written by: Giuliano de Leon.
Tags: iOS 14.5 Beta 3 Heavy Changes Music App iPhone Sections How-To Install

redpajama_set_name: RedPajamaCommonCrawl


Ore process-crushing plant and mill for mineral ores Ore process is most used crushing plant, grinding mill and ores beneficiation equipment for manufacturing.
Manganese Ore Beneficiation Plant SBM Products The vast majority belong to the poor of manganese ore ore processing must Process of Beneficiation of Manganese ore .
Cassiterite Ore Beneficiation Plant - Manganese Crusher, Manganese Copper Ore Beneficiation Plant,Beneficiation Process of Iron India .
Iron Ore Beneficiation Process Flow Chart For Processing Plant Iron Ore Beneficiation Process Flow Chart 1511 Views. Iron Ore Beneficiation Process.
Flow Process Of Manganese Ore Benefication Plant. flow sheet for manganese beneficiation - Crusher South Africa. iron ore beneficiation process flow sheet.


text:
Salva Kiir Mayardit (1951. szeptember 13. –) szudáni politikus, a Szudáni Népi Felszabadítási Hadsereg vezetője, Dél-Szudán első elnöke.

Élete

Szudáni polgárháború
Kiir a déli területeken legnagyobb számban megtalálható dinka nép tagja, akárcsak a függetlenségi mozgalom előző vezetője, John Garang, habár nem ugyanahhoz a klánhoz tartoztak. Az első szudáni polgárháború idején, az 1960-as években az Anyanya nevű szeparatista hadsereghez csatlakozott. Az 1972-es Addis Ababa-i egyezmény idejére alacsony rendfokozatú tisztté lépett elő. Amikor 1983-ban Garangot küldték el egy katonai lázadás elfojtására, ő a lázadók oldalára állt, és az akkor századosi rendfokozatot viselő Kiir, valamint sok más déli vezető is követte a példáját, létrehozva a Szudáni Népi Felszabadítási Hadsereget a második szudáni polgárháborúban. Mivel Garang ezredes kevés harci tapasztalattal rendelkezett, ezért nagymértékben az Anyanya veteránjaira, köztük Kiirre hagyatkozott a hadsereg vezetésében. Kiir ennek köszönhetően a mozgalom katonai szárnyának vezetőjévé vált.

Szudáni politikusként
A vezérkari főnöki tisztségéből megpróbálták elmozdítani 2004-ben, amely majdnem a szervezet széthullásához vezetett. A naivashai béke 2005-ös aláírása után Dél-Szudán alelnökévé nevezték ki. Miután Garang 2005. július 30-án életét vesztette egy helikopter-balesetben, őt választották ki utódjának, így ő lett Dél-Szudán elnöke és Szudán első alelnöke. A mozgalom katonai szárnyának körében azóta is nagy népszerűséget élvez katonai győzelmeinek köszönhetően.

Kiir megjegyzése 2009 októberében a közelgő függetlenségi népszavazást illetően az volt, hogy ez egy választás aközött, hogy "valaki másodrendű legyen az országában" vagy "szabad ember a saját független hazájában". A 2010. januári tudósításokat, amelyek beszámoltak arról, hogy Kiir nem indul az elnökségért az áprilisi választáson, hanem a dél-szudáni újraválasztása az elsődleges számára, sokan úgy értelmezték, hogy a Szudáni Népi Felszabadítási Hadsereg fő célja a függetlenség elérése.

Kiirt 93%-kal választották újra a 2010-es dél-szudáni általános választáson, amelyet a nagyarányú győzelem miatt több sajtótermékben is Dél-Szudán első lépésének minősítettek az elszakadási folyamatban. A választást azonban sok kritika érte a demokratikus aktivisták és a nemzetközi megfigyelők részéről, akik megfélemlítéséről és kényszerítésről is beszámoltak. Újraválasztása után Omar el-Besír szudáni elnök ismét kinevezte első alelnökké, az ideiglenes alkotmány alapján.

Dél-szudáni elnökként
A 2011 januárjában tartott függetlenségi népszavazáson a szavazók 99%-a a függetlenség pártján állt. Dél-Szudán 2011. július 9-én vált függetlenné, és Kiir lett az első elnöke. A magát reformerként meghatározó Kiir beiktatási beszédében arra kérte a dél-szudániakat, hogy bocsássák meg, de ne felejtsék el a szudániaktól elszenvedett igazságtalanságokat, és általános amnesztiát hirdetett azon déli csoportok tagjai számára, amelyek addig a Szudáni Függetlenségi Hadsereggel hadakoztak a múltban. Néhány hét múlva a rendőrségnek és a hadseregnek tartott nyilvános beszédében figyelmeztette őket, hogy a nemi erőszak, a kínzás és az emberi jogok más megsértése a fegyveres erők által bűncselekményekként lesznek kezelve, és az Igazságügyi Minisztérium keményen fel fog lépni ezek ügyében.

Jegyzetek

Fordítás

További információk

Dél-Szudán
Államfők
1951-ben született személyek
Élő személyek

redpajama_set_name: RedPajamaWikipedia