Back to The tech awesomeness
Table of contents
Endeavor chapters

The article for today.


public class MarketConcurrencyProvider {
    class ProductService {
        private Collection < ProductServiceOption > productServiceOptions =
                new ArrayList < > ();
        
        public Collection < ProductServiceOption > getProductServiceOptions() {
            return productServiceOptions;
        }
    }
    
    class Customer {
        private Collection < CustomerPreference > customerPreferences;
        
        public ProductService findProductService(Market market) {
            return market.provideProductServiceChoice(this);
        }
        
        public Collection < CustomerPreference > getCustomerPreferences() {
            return customerPreferences;
        }
        
        public ProductService createProductService() {
            return new ProductService();
        }
    }
    
    class CustomerPreference {
    }
    
    class ProductServiceOption {
    }
    
    class Market {
        private Collection < ProductService > productsServices =
                new ArrayList < > ();
        
        public Collection < ProductService > getProductsServices() {
            return productsServices;
        }
        
        public Market() {
        }
        
        public Market(Collection < ProductService > productsServices) {
            this.productsServices = productsServices;
        }
        
        public void acceptProductService(ProductService productService) {
            productsServices.add(productService);
        }
        
        class MarketManager {
            private Customer customer;

            public MarketManager() {
            }
            
            public MarketManager(Customer customer) {
                this.customer = customer;
            }
            
            public ProductService createProductService() {
                return new ProductService();
            }
            
            public ProductService findProductServiceChoice(Market market,
                    Customer customer) {
                Collection < CustomerPreference > customerPreferences;
                if (this.customer != null) {
                    customerPreferences = this.customer.getCustomerPreferences();
                } else {
                    customerPreferences = customer.getCustomerPreferences();
                }
                for (ProductService productService: market.productsServices) {
                    if (productService.getProductServiceOptions()
                            .equals(customerPreferences)) {
                        return productService;
                    }
                }
                ProductService greatMood = createProductService();
                return greatMood;
            }
            
            public Collection < ProductService > askForMixedMarketProductsServices(
                    Collection < ProductService > productsServices) {
                
                ProductService[] marketProductsServicesArray =
                        productsServices.toArray(
                                new ProductService[productsServices.size()]);
                shuffleArray(marketProductsServicesArray);
                
                return new ArrayList < ProductService > (
                        Arrays.asList(marketProductsServicesArray));
            }
        }
        
        public ProductService provideProductServiceChoice(Customer customer) {
            MarketManager marketManager = new MarketManager();

            return marketManager.findProductServiceChoice(this, customer);
        }
        
        public Market createMixedMarketWithMixedProductsServices(
                Collection < Market > markets) {
            Collection < ProductService > productsServices = new ArrayList < > ();

            for (Market market: markets) {
                productsServices.addAll(market.getProductsServices());
            }

            MarketManager marketManager = new MarketManager();
            
            return new Market(
                    marketManager.askForMixedMarketProductsServices(
                            productsServices));
        }
        
        public ProductService provideProductServiceChoiceWithHelp(
                Customer customer) {
            MarketManager marketManager = new MarketManager(customer);

            return marketManager.findProductServiceChoice(this, customer);
        }
    }
    
    public Market createMarket() {
        return new Market();
    }
    
    class ProductServiceProvider {
        private Customer customer;

        public ProductServiceProvider() {
        }
        
        
        public ProductServiceProvider(Customer customer) {
            this.customer = customer;
        }
        
        public ProductService createProductService() {
            if (this.customer != null) {
                return this.customer.createProductService();
            } else {
                return new ProductService();
            }
        }
    }
    
    public ProductServiceProvider createProductService() {
        return new ProductServiceProvider();
    }
    
    public ProductServiceProvider createProductService(Customer customer) {
        return new ProductServiceProvider(customer);
    }
    
    public ProductService createProductService(
            ProductServiceProvider productServiceProvider) {
        return productServiceProvider.createProductService();
    }
    
    public Customer createCustomer() {
        return new Customer();
    }
    
    public ProductService provideProductServiceChoice(Market market,
            Customer customer) {
        return market.provideProductServiceChoice(customer);
    }
    
    public static void main(String[] args) {
        MarketConcurrencyProvider marketConcurrencyProvider =
                new MarketConcurrencyProvider();
        Market market = marketConcurrencyProvider.createMarket();
        
        ProductServiceProvider productServiceProvider1 =
                marketConcurrencyProvider.createProductService();
        Customer customer = marketConcurrencyProvider.createCustomer();
        ProductServiceProvider productServiceProvider2 =
                marketConcurrencyProvider.createProductService(customer);
        
        ProductService product1 = marketConcurrencyProvider
                .createProductService(productServiceProvider1);
        
        ProductService service1 = marketConcurrencyProvider
                .createProductService(productServiceProvider1);
        ProductService product2 = marketConcurrencyProvider
                .createProductService(productServiceProvider2);
        
        market.acceptProductService(product1);
        market.acceptProductService(service1);
        /* ... */
        market.provideProductServiceChoice(customer);
        market.provideProductServiceChoiceWithHelp(customer);
        
        customer.findProductService(market);
        /* ... */
        //Market market2 = marketConcurrencyProvider.createMarket(customer);
        //Market market3 = marketConcurrencyProvider.createMarket(product1);
        //Market market4 = marketConcurrencyProvider.createMarket(service1);
        //Market marketplace = marketConcurrencyProvider.createMarket(service1);
        //Market merchantplace = marketConcurrencyProvider.createMarket(service1);
        //Market dealerplace = marketConcurrencyProvider.createMarket(service1);
        //Market traderplace = marketConcurrencyProvider.createMarket(service1);
        //Market bargainplace = marketConcurrencyProvider.createMarket(service1);
        //Market productplace = marketConcurrencyProvider.createMarket(service1);
        //Market serviceplace = marketConcurrencyProvider.createMarket(service1);
        //Market retailplace = marketConcurrencyProvider.createMarket(service1);
        //Market tradingPost = marketConcurrencyProvider.createMarket(service1);
        //Market tradingFactory = marketConcurrencyProvider.createMarket(service1);
        //Market tradingStation = marketConcurrencyProvider.createMarket(service1);
        //Market tradingMart = marketConcurrencyProvider.createMarket(service1);
        //Market marketCentre = marketConcurrencyProvider.createMarket(service1);
        //Market departmentStore = marketConcurrencyProvider.createMarket(service1);
        //Market convenienceStore = marketConcurrencyProvider.createMarket(service1);
        //Market emporium = marketConcurrencyProvider.createMarket(service1);
        //Market forum = marketConcurrencyProvider.createMarket(service1);
        //Market auction = marketConcurrencyProvider.createMarket(service1);
        //Market sale = marketConcurrencyProvider.createMarket(service1);
        //Market wholesale = marketConcurrencyProvider.createMarket(service1);
        //Market stall = marketConcurrencyProvider.createMarket(service1);
        //Market booth = marketConcurrencyProvider.createMarket(service1);
        //Market counter = marketConcurrencyProvider.createMarket(service1);
        //Market bar = marketConcurrencyProvider.createMarket(service1);
        //Market mart = marketConcurrencyProvider.createMarket(service1);
        //Market lotok = marketConcurrencyProvider.createMarket(service1);
        //Market vitrina = marketConcurrencyProvider.createMarket(service1);
        //Market kiosk = marketConcurrencyProvider.createMarket(service1);
        //Market laryok = marketConcurrencyProvider.createMarket(service1);
        //Market rynok = marketConcurrencyProvider.createMarket(service1);
        //Market sklad = marketConcurrencyProvider.createMarket(service1);
        //Market fair = marketConcurrencyProvider.createMarket(service1);
        //Market fleaMarket = marketConcurrencyProvider.createMarket(service1);
        //Market bazaar = marketConcurrencyProvider.createMarket(service1);
        //Market magazin = marketConcurrencyProvider.createMarket(service1);
        //Market shop = marketConcurrencyProvider.createMarket(service1);
        //Market store = marketConcurrencyProvider.createMarket(service1);
        //Market stock = marketConcurrencyProvider.createMarket(service1);
        //Market outlet = marketConcurrencyProvider.createMarket(service1);
        //Market garage = marketConcurrencyProvider.createMarket(service1);
        //Market studio = marketConcurrencyProvider.createMarket(service1);
        //Market workshop = marketConcurrencyProvider.createMarket(service1);
        //Market lavka = marketConcurrencyProvider.createMarket(service1);
        //Market sklep = marketConcurrencyProvider.createMarket(service1);
        //Market boutique = marketConcurrencyProvider.createMarket(service1);
        //Market garage = marketConcurrencyProvider.createMarket(service1);
        //Market maydanchik = marketConcurrencyProvider.createMarket(service1);
        //Market kramnytsya = marketConcurrencyProvider.createMarket(service1);
        //Market kauppa = marketConcurrencyProvider.createMarket(service1);
        //Market myymälä = marketConcurrencyProvider.createMarket(service1);
        //Market handelsbod = marketConcurrencyProvider.createMarket(service1);
        //Market veikals = marketConcurrencyProvider.createMarket(service1);
        //Market pood = marketConcurrencyProvider.createMarket(service1);
        //Market katástima = marketConcurrencyProvider.createMarket(service1);
        //Market tienda = marketConcurrencyProvider.createMarket(service1);
        //Market ladenlokal = marketConcurrencyProvider.createMarket(service1);
        //Market loja = marketConcurrencyProvider.createMarket(service1);
        //Market univermag = marketConcurrencyProvider.createMarket(service1);
        //Market univerkram = marketConcurrencyProvider.createMarket(service1);
        //Market kibet = marketConcurrencyProvider.createMarket(service1);
        //Market plaza = marketConcurrencyProvider.createMarket(service1);
        //Market giantMarket = marketConcurrencyProvider.createMarket(service1);
        //Market villageMarket = marketConcurrencyProvider.createMarket(service1);
        //Market cityMarket = marketConcurrencyProvider.createMarket(service1);
        //Market hyperMarket = marketConcurrencyProvider.createMarket(service1);
        //Market unitMarket = marketConcurrencyProvider.createMarket(service1);
        //Market postMarket = marketConcurrencyProvider.createMarket(service1);
        //Market telemarket = marketConcurrencyProvider.createMarket(service1);
        //Market netTradeShop = marketConcurrencyProvider.createMarket(service1);
        //Market webShop = marketConcurrencyProvider.createMarket(service1);
        //Market dropshipMarket = marketConcurrencyProvider.createMarket(service1);
        //Market publicMarket = marketConcurrencyProvider.createMarket(service1);
        //Market marketSquare = marketConcurrencyProvider.createMarket(service1);
        //Market automat = marketConcurrencyProvider.createMarket(service1);
        //Market vendingMachine = marketConcurrencyProvider.createMarket(service1);
        //Market skyShop = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingShip = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingVessel = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingVehicle = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingFerry = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingAutomobile = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingTruck = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingCar = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingPlane = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingTrain = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingShuttle = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpacecraft = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceship = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceVessel = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceVehicle = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceFerry = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceAutomobile = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceTruck = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceCar = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpacePlane = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceTrain = marketConcurrencyProvider.createMarket(service1);
        //Market shoppingSpaceShuttle = marketConcurrencyProvider.createMarket(service1);
        //Market mobileMarketInMobileMarket = marketConcurrencyProvider.createMarket(service1);
        //Customer customer2 = marketConcurrencyProvider.createCustomer(market);
        //market.createMixedMarketWithMixedProductsServices(markets);
    }
    
    /* Implementation shuffle by Ronald Fisher, Frank Yates, Donald Knuth. */
    private static void shuffleArray(Object[] ar) {
        Random rnd = ThreadLocalRandom.current();
        for (int i = ar.length - 1; i > 0; i--) {
            int index = rnd.nextInt(i + 1);
            // Also "метод пузиріння" by Vadim Shergin.
            // The swap scheme including 3 operations for 2 elements.
            Object a = ar[index];
            ar[index] = ar[i];
            ar[i] = a;
        }
    }
}

The update as of 2020-11-26.

It is an experience to shut eyelids in for example some supermarket and to try to navigate, to orient with no human assistant. Even when the price, unit, mass, piece tags are accessible and scannable by some smart device. Even when there is a voice assistant over the shelves in some supermarket. Even when some products have texts via Braille writing above packages. Even when travelling in shopping tour among supermarkets and other ones after shutting eyelids.

Ринковий змагальнісний постачальник.

Стаття сьогодні.

Оновлення від 2020-11-26.

Це досвід заплюшити повіки у наприклад деякому супермаркеті універкрамі та намагатися навігувати, орієнтуватися з не людяним асистентом або без людини асистента. Навіть коли ціни, одиниці, маси, шматочки етикетки, ярлика, бирки, талона, наклейки є доступними і навіть зчитуємими деякими розумними пристроями. Навіть коли існує голосовий помічник над полицями у деякому супермаркеті універкрамі. Навіть коли деякі продукти мають написи у стилі Брайлля поверх пакування. Навіть коли мандрувати у покупельній мандрівці між супермаркетами універкрамами універмагами і іншими після заплющення повік.

Оновлення від 2021-12-09.

The update as of 2021-12-09.

Деякі вендінг машини не дають підробок з огляду і не лише на декілька нещодавніх обмежень, хоча вони мабуть натякають на легкість додання виконання тих обмежень як фактор опісля.

Some vending machines do not give a sham according to several recent limitations, though they probably imply the easiness of addition of such implementation of those limitations as a factor aposteriori.