text:
NEXT GENERATION AI PLATFORM FOR THE JAPANESE MARKET
Today the Danish based AI company 2021.AI announced that they are partnering with Edge Consulting Co. Ltd., a true pioneer within AI development in Japan, who can boast a solid track record of deep learning implementations. Together the two companies will deliver a Japanese version of 2021.AI's Grace AI platform which will be labeled "Edge Algo Platform". The partnership has high set ambitions to make Edge Algo Platform the leading AI platform in Japan for data scientists.
COPENHAGEN, DENMARK | SEPTEMBER | 2019
A PLATFORM TO ENHANCE AI DEVELOPMENT IN JAPAN
AI and machine learning are growing in presence in all industries across the globe, offering companies ways to optimize cost control, grow revenue, work more efficiently and minimize risk. By using 2021.AI's Grace platform, time to market for AI solutions is dramatically reduced. The platform provides an environment for collaboration between data scientists and is based on the latest state-of-the art open source AI components. It also includes support for productionizing of models and efficient management of all lifecycle events for models in production.
Koji Sumimoto, CEO and founder of Edge Consulting, and Mikael Munck, CEO and founder of 2021.AI
The expansion and usage of data is increasing rapidly in Japan, and Edge Consulting were searching for the best possible platform for collaboration that would help improve efficiency in development of AI models. They decided to leverage the strengths of the Grace platform in a Japanese version (Edge Algo Platform) for the growing network of data scientists in their community.
Edge Consulting will use the new AI platform to further advance data science development. It will bring new opportunities to Edge Consulting's network of data scientists, giving them access to the latest open-source technologies and collaboration on the same platform. This will in turn reduce the efforts producing and productizing models substantially.
Koji Sumimoto, CEO and founder of Edge Consulting, comments: "Edge Consulting's goal is to remain at the forefront of the latest technologies such as AI and machine learning, so we can continue to offer clients the best solutions by optimizing daily operations, delivering revenue growth and reducing costs. The ability to leverage both the Edge Algo Platform and Edge Consulting's expertise and wide local network, will increase the efficiency of both our own model development and our client's implementation of AI in their production environments."
Koji Sumimoto continues: "By providing a local Japanese AI platform, we are able to offer our clients a robust AI offering as part of our core services, and the ability to scale the number of models in production to the thousands will be a key differentiator for this market over the coming years."
FAST TRACKING 2021.AI'S MARKET ENTRY INTO JAPAN
In addition to AI skills and expertise, companies need in-depth knowledge of operations and enterprise implementation, as well as access to support to achieve real business value for their AI investments. The partnership between Edge Consulting and 2021.AI combines the infrastructure that enables efficient and fast time to market with local continuous support and expertise.
Edge Consulting will act as a distributor and local support center for 2021.AI in Japan. Partnering with Edge Consulting provides an opportunity for 2021.AI to engage with some of the largest and well-known international brands from Japan, supporting their implementation of AI in the coming years.
"Partnering with Edge Consulting, a local and well-established data science consultancy company is a fantastic opportunity to fast-track our entry into the Japanese market. Being able to join forces also means Edge Consulting will be offering local 1'st line support in Japanese", says CEO and founder of 2021.AI, Mikael Munck, and adds:
"This fast-forward model in Japan is strengthening our global footprint and is a testimony to the wide global appeal of our Grace AI platform. Together with Edge Consulting we are going to create great value for the Japanese market and Edge Consulting's customers. We look forward to a solid collaboration."
ABOUT EDGE CONSULTING
A pioneer in the area of advanced technologies, Edge Consulting provides services for artificial intelligence implementations, big data analysis consulting as well as running educational programs for engineers and data scientists. With a strong track record and a vast experience servicing the Japanese market, Edge Consulting helps their clients using the most advanced algorithms, such as deep learning, to automate business processes and services. For more information please visit www.edge-tech.co.jp
ABOUT 2021.AI
2021.AI serves the growing need for applied AI. Our data science expertise combined with our Grace AI Platform offers a true AI differentiator for clients around the world. With Grace, Data Scientists can solve some of the most complex problems, or directly implement our packaged models related to churn prediction, chat-bots, classification, and much more. Growing fast with more than 80 employees, 2021.AI is headquartered in Copenhagen with sales and R&D in several locations globally.
Line Sofie Graversen · Head of Marketing · 2021.AI
Email: lgr@2021.ai


RSM's management consulting team helps organizations plan, articulate and execute practical, measurable information technology strategies that envision the future, while addressing process optimization and performance concerns. RSM's advisory services help better position clients to achieve their future aspirations by optimizing and streamlining all facets of their technology platform. The team can also evaluate the people, systems and processes needed to support future growth.
A nonprofit membership organization was struggling to keep up with day-to-day operations after facing IT issues, business process inefficiencies and staffing problems. After meeting with the organization's executive director and assistant executive director to better understand the organization's needs, the RSM team proposed a Rapid Assessment®. This evaluation uncovered a number of inefficiencies.
Once the assessment was completed, the team proposed two options – a conservative and aggressive road map for organizational optimization. The organization's board unanimously decided to move forward with the aggressive approach.
Organizations today are expected to achieve their strategic goals with fewer resources and smaller budgets. These expectations create a need for more innovation and smarter planning, implementation and execution. The Rapid Assessment helped our team evaluate the people, systems and processes needed to support future growth. Through the assessment, the RSM team was able to understand the client and help it see the value of service upgrades. Management saw how the team's recommendations would benefit their organization by enabling it to grow and move forward.
After the road map was implemented, RSM continued to support the organization through regular discussions of IT strategy and goals, to ensure they align with the overall organization.


Three-dimensionality can be seen as architecture's fundamental existence, the profession's acclaimed domain. In times of globalism and scale enlargement, an update of this definition seems needed: metres turn into kilometres, M3 becomes KM3. KM3 is a story about a world that is getting dense. Very dense. It constructs its logical response: a city that is denser. A city that is continuously under construction, with space for limitless capacities, populations. Beyond scarcity. Beyond separation. Beyond pessimism and protectionism. The 3D City. A free-fall in endless space. From right to left, from front to back, from above to below. Pure depth. KM3 is more a construct than an analysis. KM3 is a hypothesis, a theoretical city, a possible urban theory. KM3 can also be seen as a science-fiction novel, a twin pair that describes this upcoming city as an emerging presence, an already existing 'other' world. The book includes a DVD of animations and two urban planning software programs by MVRDV.


Hello everyone. Kindly note that #iblog11 will be moved to a new date. We will update this blog and notify folks who registered once it is set. We apologize for the inconvenience.
Thank you for your continuous support of this advocacy event.


text:
The Alton incinerator so big Alan Titchmarsh, Phil Spencer and a council in Surrey have joined the fight against it
The facility will have chimneys 260 feet tall - and locals including some noteable names are furious
Chris slater
Plans have been met with fierce opposition including several TV celebrities, a former foreign secretary and a council in Surrey
Plans for a new waste incinerator in east Hampshire have been met with fierce opposition including several TV celebrities, a former foreign secretary and a council in Surrey.
Waste firm Veolia want to redevelop the current recycling centre in the Wey Valley near Alton and turn it into an advanced energy recovery facility – where non-recyclable waste is burnt to create electricity for the national grid in a £200 million project.
However those living nearby say the huge facility with 260 feet high chimney stacks will be a blot on the landscape.
And there have been concerns raised about emissions from the burning process damaging the environment.
A protest group No Wey Incinerator has been formed and has already raised over £40,000 as part of their campaigning against the plans which they say will "have an impact on all who live and work" near the South Downs National Park whose boundary is just a mile away.
Veolia bosses say the technology is safe and say that the facility will create dozens of jobs and prevent waste from going to landfill, which is more harmful to the environment. However some notable local residents have added their voices in opposition.
Gardener and TV presenter Alan Titchmarsh, who lives in Holybourne just a quarter of a mile from the site, is among those to speak out against the plans along with Phil Spencer, presenter of Channel 4's Location, Location, Location and former health secretary Jeremy Hunt.
Former Ground Force host Mr Titchmarsh was quoted in The Times as saying: "As someone who spends their life encouraging our rural environment and promoting responsible stewardship of the landscape, I find the prospect of a massive incinerator in this part of the British countryside both irresponsible and insupportable.
"The rural Wey Valley is clearly a hugely inappropriate location for such an industrial-scale building. The chimneys, which can be seen for miles around, are twice as high as a pylon.
Former foreign secretary and MP Mr Hunt said his Surrey constituents had "very strong feelings" about the plans (Image: Getty Images)
"Not only will the development permanently ruin this peaceful environment, it will also generate tonnes of CO in emissions and create hazardous waste that will have to be transported on local roads."
In an official objection submitted to Hampshire County Council who are considering the plans, Mr Spencer, also believed to live nearby, said: "The proposed plant will dominate the landscape for many miles around and will be a significant visual intrusion on the immediate area and wider countryside.
"The A31 is Hampshire's primary gateway from London and if this proposal goes ahead, this enormous waste incinerator will be the first significant building after passing the County boundary signs welcoming you to 'Jane Austen's County.'"
Former Tory leadership candidate Mr Hunt, MP for South West Surry, said it was "completely out of keeping with its immediate environment" and was "being located in the wrong place most particularly in light of the fact that it is going to be utilised for commercial waste."
Hampshire weather: Storm Ellen now forecast to hit county as Met Office updates warning
Coastguards rush to ferry terminal after woman found unconscious in sea
Waverley Borough Council also over the border in Surrey are one of the official bodies to have also lodged their opposition as part of the official consultation, which closed at the end of last week.
Councillor Steve Williams, portfolio holder for environment and sustainability said: "The emissions caused by burning waste are not only potentially dangerous to those who are exposed over a long period of time, but they are also harmful to the environment.
"As community leaders, councils should be focusing on encouraging investment in cleaner alternatives and inspiring people to reduce their residual waste and to reuse what they have, rather than throwing it away.
"We also won't be silent in stressing the impacts this scheme will have on our residents."
Alton Town council said it represents an "unacceptable over-development of the site where the form and mass of development is excessive for the site and insufficient regard is paid to the amenities and character of the area and its close proximity to the South Downs National Park (SDNP) and represents creeping industrial development in the open countryside."
They are also "concerned at the risk of pollution and impact on the air quality and in particular, the particulates that will be emitted from the chimneys to the detriment of residents in both the immediate area and that of the surrounding communities" they added.
Veolia say the current recycling centres in Alton and Portsmouth are being considered for replacement with a new combined, larger, hi-tech facility in the pipeline which would leave the current Alton site "redundant".
They say there are currently three other incinerators in Hampshire, Portsmouth, Marchwood and Chineham, but a new one is vital as: "The existing energy recovery facilities in Hampshire are operating at capacity, the population continues to grow and a significant proportion of waste from Hampshire is still being sent to landfill or exported as refuse-derived fuel (RDF) to Europe for management" they add.
The current entrance to the site off the A31 (Image: Google Maps)
Goats stand on top of police car while bomb squad detonates unexploded WW2 mortar
Man suffers serious injuries following A343 crash at Andover
They claim it will be the "will be the most energy-efficient plant we have built" and able to handle around 330,000 tonnes of waste per year - enough energy to power 75,000 homes.
The 2.9 hectare site, previously a Ministry of Works Army Cold Store in the 1930's, would see a new power station built to generate energy from 'residual' waste which cannot be recycled.
Planning documents state the architect designed facility would be based around a main building which would sit under a curved roof with a maximum height of just under 40 metres, or 131 feet with two 'living green' walls to help it blend in with its rural environment.
The building would contain the residual waste reception hall and bunker, the thermal treatment process equipment and boiler, a turbine hall, ash handling, flue gas treatment facilities, offices, a workshop, stores, education, visitor and staff facilities.
There would also be two 80m, or 262ft high emissions stacks and connected to the main building would be an air-cooled condenser. Waste would be processed and energy produced 24 hours a day, 365 days a year with deliveries between 7am and 7pm.
They say it will create around 300 jobs during construction and around 40 permanent roles once built.
Richard Kirkman, chief technology and innovation officer Veolia UK and Ireland said: "This development is part of an overall environmental improvement using proven safe technology and which is part of a desperately needed green recovery.
"We have consulted with the community and spent a lot of time on the architecture and mitigation of impacts to provide a state of the art alternative to landfill that will ultimately unlock more recycling.
"Energy from waste is the best solution for residual waste and it has an important role in generating energy.
"Landfill releases methane to the atmosphere that is 25 times more harmful as a greenhouse gas than carbon dioxide.
"Our proposals will see more recycling, less landfill and save the equivalent of 65,000 tonnes of CO2 emissions every year compared to landfill, as well as contributing around £3.26m to the local economy and will create over 300 jobs during construction, plus 40 permanent roles once operational."
A decision on the plans isn't expected until the Autumn at the earliest.
Escaped Bordon pig still on run after two weeks but rescue plan in place
In the NewsThe pig's owners have named her Babe of Bordon and say they know where she is, and are attempting to catch her
CoronavirusHampshire coronavirus area-by-area on deadliest UK day since pandemic started The Government said a further 1,610 people had died across the UK
M3 closed in both directions due to police incident between Farnborough and Hook - recap
FarnboroughTraffic was also held further down the motorway at Winchester
Portsmouth FCPortsmouth player ratings: Ryan Williams runs riot in convincing 4-0 win over AFC WimbledonHow Portsmouth's players rated during their League One clash against AFC Wimbledon at Fratton Park
Who are Kgaogelo Chauke and Caleb Watts? Southampton stars of the future handed debuts
Southampton FCRalph Hasenhuttl has handed the duo their first starts for the club in an FA Cup clash with Shrewsbury Town.

redpajama_set_name: RedPajamaCommonCrawl


text:
Driver Jamuna: Aishwarya Rajesh turns taxi driver for her next- Cinema express
Driver Jamuna: Aishwarya Rajesh turns taxi driver for her next
The film has been announced on the special occasion of her 31st birthday.
Aishwarya Rajesh, who recently starred in Ka Pae Ranasingam, took to social media to announce her next film. Titled Driver Jamuna, the film will see Aishwarya play the role of a call-taxi driver.
The project will be directed by Kinslin of Vathikuchi-fame. The announcement was made on the occasion of the actor's 31st birthday on Sunday.
With music by Ghibran, Driver Jamuna is billed as a crime thriller. Aishwarya wrote, "On this special day, I am announcing my next film titled Driver Jamuna, directed by Vathikuchi fame Kinslin. The film is bankrolled by SP Chowdhary under the banner 18 Reels."
Driver Jamuna will be simultaneously made in Tamil, Telugu, and Hindi, and the makers are on the hunt for the supporting cast and the crew for the film.
Aishwarya Rajesh Driver Jamuna


The regular use water in the restroom makes it extremely vulnerable for moist accumulation and also prospective water damage. By inspecting it regularly, you can minimize water related problems.
Do not disregard executing these evaluations as well as be thorough while executing them. Maintain in mind that these simple assessments can conserve you a great deal of money by giving early indications for water damage.
The shower and also bathtub need special focus as well as upkeep. Examine the ceramic tiles and replace if split. Make certain that there is no missing cement in between the floor tiles. Inspect and also replace fractured caulking at joints where the wall surfaces meet the bathtub or the flooring. Clogged drains pipes and pipes troubles will certainly stop the bath tub from drying out and also could show major troubles beneath the bathtub. Talk to a specialist right away to protect against architectural damages. Take notice of staining or soft areas around the bathtub wall surfaces as they could indicate an internal leakage.
Indicators for water damage are tough to detect since a lot of pipelines are set up inside the wall surfaces.
Pay special interest to flooring and also walls moisture and also spots as they may indicate an unseen plumbing trouble. Examine dampness degrees in adjacent areas.
Look around the sink, sluggish draining pipelines may indicate a blocked drain pipe. Change sink seals if they are cracked or loose.
The toilet is an at risk water junction. Examine the water lines and also look for leakages around the bathroom seat, in the hose pipe, as well as under the water storage tank. If you detect any signs of dampness on the floor around the toilet, check for leakages in the toilet rim and container seals.
Realize that hanging toilet dish deodorants boosts the chances for blockages.
Obstructed drains and also pipes problems will stop the bathtub from drying out and may indicate serious issues underneath the tub. Seek advice from with an expert instantly to stop structural damages. The bathroom is a prone water joint. Check the water lines and also search for leaks around the toilet seat, in the hose, as well as under the water container. If you discover any signs of dampness on the flooring around the bathroom, check for leakages in the bathroom edge and also container seals.


The Finnish air navigation service has warned air transport about widespread violations in work of GPS navigation in Lapland, Yle reports. According to the Norwegian authorities, hindrances come from Russia. Messages of Norway about hindrances have appeared at the end of October in day of the beginning of large military exercises of NATO of Trident Juncture. Warnings of violations in work of GPS in the territory of Finland concerned the territory from Rovaniemi to the Norwegian border and also to the east from Kittil to the Russian border.


SPECIAL TRAVERSE, pleading. A technical special traverse begins in most cases, with the words absque hoc, (without this,) which words in pleading form a technical form of negation. Lawes' Pl. 116 to 120.
2. A traverse commencing with these words is special, because, when it thus commences, the inducement and the negation are regularly both special; the former consisting of new matter, and the latter pursuing, in general, the words of the allegation traversed, or at least those of them which are material. For example, if the defendant pleads title to land in himself, by alleging that Peter devised the land to him, and then died seised in fee; and the plaintiff replies that Peter died seised in fee intestate, and alleges title in himself, as heir of Peter without this, that Peter devised the land to the defendant; the traverse is special. Here the allegation of Peter's intestacy, &c., forms the special inducement; and the absque hoc, with what follows it, is a special denial of the alleged devise, i. e. a denial of it in the words of the allegation. Lawes on Pl. 119, 120; Gould, Pl. ch. 7, §6, 7; Steph. Pl. 188. Vide Traverse; General Traverse.


RPG A Day 28: How much setting detail is appropriate?
OK. I am going one of my own alternates again. I am a blog and I have to come up with questions that are not closed one sentence answers. My groups are all pretty original anyway. There may be an odd quote stated in yoda style or Gandalf coming out every now and again. Mainly though it is all original. So I was reading an RPG last night in the view of reviewing it and I came to the setting material. It starts with what is meant to be a series of letters from one person to another but reads like an essay. Then it is interspersed with a newspaper report and then it expands out into big sections looking at each country.
When is there too much?
I can see with the above that the publisher is trying to give you a taste with the first two approaches. Then they want to give you a big load of detail where you want to start your setting. This is the core book and there is even a sidebar telling you which sourcebooks are going to even flesh this material out more! This is too much information for me. I love to be creative and build my own stuff. Reading pages and pages of setting material makes me go to sleep. The reason I love the cypher system but hate Numenera is the copious amounts of dry setting material that was shoved in that book.
Most core books that come out for mainstream games are now 350 pages plus. In nearly all of those books setting takes up a large amount of the space. Why? Most of the books that I bought in the 80's and 90's were less than this size and did not devote anywhere near as much material to source. Admittedly the source books that came out following them would flesh a lot of the setting material out but you had the choice of buy in to that point.
This is an awesome picture all about setting!
There has even arisen in my game a new sort of player. I am sure that we are all familiar with the rules lawyer? Players that now argue about the setting are beginning to sit at the table. They will hold out the book and point to a page of setting material and tell me that I am wrong about something I have designed. I appreciate that some people are so invested in a particular setting that they can become upset by changes. Fans of Star Wars and Star Trek always amuse me in this way. It is largely why I steer away from any game that focuses on them.
I like generic games a lot. This is because they do not fill their rule books with masses of setting material. It is also because they like to advocate spirit of a game as opposed to black and white hard facts. Sure, every game has that proviso at the start of it saying do what you want with it. Tell that to the twenty year old Star Trek fan who speaks in Klingon telling you that you are wrong about his home world. To me the experience and feel of a game is much more appropriate. It is why I play Traveller, Dungeon Crawl Classics, Super Squadron and FATE if I have a choice of game to play. Even the Dungeons and Dragons crowd get uppity about things not being right in Greyhawk or Forgotten Realms.
I am not sure if it is a decline in imagination, or perhaps just time. When I write posts like this I get comments telling me we are all older with more responsibility now. We can't spend time imagining things and implementing them. Does that mean that the hobby is a dying one? Are we not getting enough new blood in? Or is it just that the new blood expects all this material on a big platter for them? I am not sure what the answer is but this is my answer for day 28. Not the question asked and not a question in the alternates – but answered it is! Keep rolling.
Previous Post: RPG A Day 27: Alternate alternate.
Next Post: RPG A Day 29: Best run RPG Kickstarter I backed?


Did you know that we have answers to hundreds of frequently asked questions at the Kogan Mobile Help Centre? For the fastest resolution, we encourage you to check our Help Centre before contacting us, as it is highly likely you will find the answer to your question within seconds!
If you still haven't found the answer you're looking for, we have a dedicated Kogan Mobile customer care team that can be reached 7 days a week between 8am to 8pm AEST on 1300 056 426 or by dialling 12612 on your Kogan Mobile handset.
If your query relates to a mobile phone handset or other product purchased from Kogan.com, please contact the Kogan.com Customer Care team online at help.kogan.com.


text:
Russia concerns won't restrict NATO missile defense – US official
© Gene Blevins © Reuters
NATO will carry on setting up missile defense sites across Eastern Europe despite Russian calls to limit them, a senior US State Department official said, citing a "threat posed by North Korea."
"We are not going to agree to limitations on our systems because we need to have the flexibility to deal with the dynamic and evolving threat," Frank Rose, deputy assistant secretary of state for arms control, told journalists at NATO HQ in Brussels on Tuesday.
"The key Russian concern ... is that in the future, absent legally binding constraints, we will develop systems that could potentially negate their strategic deterrent," Rose added.
New part of NATO air defense system goes online in Romania https://t.co/wlAZl7TXRbpic.twitter.com/Le2aQhz1X1
— RT (@RT_com) December 18, 2015
Rose admitted Russian officials had repeatedly voiced concerns about the kinds of weapons brought in to Europe by the US, such as ground-based and sea-based missile defense interceptors. Continuing to build up the missile defenses in Europe off Russia's borders, NATO insists North Korean ballistic missiles are likely able to reach the US.
"North Korea has large numbers of ballistic missiles and they test them often," Rose said. While there is considerable doubt that last week's detonation by Pyongyang was a fully-fledged test of a hydrogen bomb, Washington already warned North Korea is seeking technology to build an intercontinental nuclear-armed ballistic missile.
Moscow has repeatedly argued that the secretive country possess insufficient technological know-how to develop strategic weapons capable of reaching the US.
N. Korea says its H-bomb 'capable of wiping out whole US at once'
NATO's ballistic missile defense, in place since 2010, has been a source of tension between Moscow and the US-led alliance.
Previously, Washington has announced plans to set up ballistic missile defense (BMD) sites in Central and Eastern Europe, most notably its ground-based Aegis Ashore system. It early December, an Aegis Ashore facility passed an interception test off the coast of Hawaii.
The Aegis Ashore Missile Defense Test Complex, owned by Lockheed Martin and located southwest of Kauai, Hawaii, at the US Navy's Pacific Missile Range Facility, fired a Standard Missile-3 Block IB, at a target launched by a C-17.
A week later, an Aegis Ashore system went online at Romania's Deveselu airbase, comprising SPY-1 radar and vertical-launch SM-3 long-range interceptor missiles.
Despite NATO's ongoing missile defense build-up, Russia's supreme military commanders note no existing US missile shield can withstand a potential Russian attack by intercontinental ballistic missiles.
Trends:Missile defense shield


State association recognizes Hamilton teacher - Hamilton School District.
The Wisconsin Association of Colleges for Teacher Education recognized Hamilton High School teacher Joseph Premo as an outstanding Early Career Educator at its recent awards ceremony in Madison.
Premo, an applied technology and engineering teacher in the Hamilton School District since August of 2012, was recognized for encouraging his students to be lifelong learners and making connections with community leaders in business, education and industry. He was one of 23 Early Career Educator Award winners chosen statewide based on the positive impact they have on schools or communities, innovative learning experiences and advocacy for students. The award is presented to outstanding educators within the first three years of their professional career.


text:
Q: Map json array to typescript object array with constructor So I have a json array like this:
[
  {
    "title": "This is the first title",
    "image": "img/first_img.png"
  },
  {
    "title": "This one is the second",
    "image": "img/second_img.png"
  }
]

My goal is to map the simple json array to typescript object array, which is defined as follows.
export class GenericField {
  public Required: boolean;
  public Disabled: boolean;

  constructor() {
    this.Required = false;
    this.Disabled = false;
  }
}

export class StringField extends GenericField {
  private readonly _minLength: number | null;
  private readonly _maxLength: number | null;
  private readonly _value: string;

  constructor(
    minLength: number | null,
    maxLength: number | null,
    value: string
  ) {
    super();
    this._minLength = minLength;
    this._maxLength = maxLength;
    this._value = value;
  }
// ...
}

export class UrlField extends GenericField {
  private _url: string;

  constructor(url: string) {
    super();
    this._url = url;
  }

  public get Url(): string {
    return this._url;
  }
}

export class SliderObject {
  public title: StringField;
  public image: UrlField;

  constructor(title: string, image: string) {
    this.title = new StringField(null, null, title);
    this.image = new UrlField(image);
    this.image.Disabled = true;
  }
}

When I map with class-transformer, the objects aren't mapped correctly. How do I achieve that I can access Required field and Disabled field, which is not present in json.
Stackblitz
See my StackBlitz example here

A: It would be like the following (assuming response.data is where the JSON text is).
const items: Array<{title: string, image: string}> = JSON.parse(response.data)

const sliderObjects = items.map(item =>
    new SliderObject(item['title'], item['image']))

A: You can come up with your own reviver and conventions in your models to support proper deserialization.
class SliderObject {
  public title: StringField;
  public image: UrlField;

  constructor(title: string, image: string) { /* class initialization */ }

  static fromJSON(data: { image: string; title: string; }): SliderObject {
    return new SliderObject(data.title, data.image);
  }
  static isDeserializableFromJSON(data: any): data is { image: string; title: string; } {
    return data && typeof(data.image) === 'string' && typeof(data.title) === 'string';
  }
}

function jsonReviver(_: string, value: unknown): unknown {
  if (SliderObject.isDeserializableFromJSON(value)) {
    return SliderObject.fromJSON(value);
  }
  return value;
}

console.log(JSON.parse(`[/* array data */]`, jsonReviver));

In the example above I have added to static methods to SliderObject to help with serialization and a custom json reviver function.  The static methods detect if data create from JSON.parse can be used to create a sliderObject and the other actually creates the new class.  The reviver will call the guard method and return a SliderObject if the guard passed.
There are lots ways to skin this cat.  I personally eschew TypeScript classes in favor of interfaces which I find are more flexible.  Why try to make TypeScript C# or Java?  By using interfaces, I can largely avoid situations like these.

A: Please check some updates that I made in order to have your object attributes accessible:
https://stackblitz.com/edit/new-project-w5b97l?file=src/app/field-definition.ts
A few notes:

*

*The GET request from the slider_object.json file is NOT returning an Observable<SliderObject[]> but an Observable<SliderObjectDTO[]> (or some other name for the interface).
An instance of SliderObject has the StringField attribute and the UrlField attribute, while what you are reading from the file are JSON objects (NOT SliderObject instances) which check the SliderObjectDTO interface, so they will have the title and image properties.

*observables should follow this naming convention: observableName$, so with a $ symbol at the end, thus sliderObjects renamed to sliderObjects$

*class attributes should not start with a capital letter, thus Required renamed to required, Disabled renamed to disabled. The same thing applies for the properties (getters)

redpajama_set_name: RedPajamaStackExchange


Just this summer, a federal court struck down the North Carolina law, ruling that certain provisions of it "target African Americans with almost surgical precision." The court added, "With race data in hand, the legislature amended the bill to exclude many of the alternative photo IDs used by African Americans" and "retained only the kinds of IDs that white North Carolinians were more likely to possess." Yet, importantly, restrictive voter ID laws in a number of other states remain on the books, and will be in place for Election Day.
On Election Day, I would love to see clergy collars and congregation members in polling places all over the country to protect and support our most vulnerable voters. Sojourners is organizing and planning with many other non-partisan groups to organize and train pastors and congregations to do just that.
Sign up here to participate in our training program and learn more about the project.


How could anyone based islamic facts on one work by a twelver shia cleric that 90% of muslims deemed heretic? Muhammad Baqir Majlisi lived from 1616–1698 AD. The year which he lived is also so far away than bukhari/muslim/ibn sa'ad/ibnu hisham/ibnu ishaq. I wanted to share this page but then people would just laugh at me because the article used a truly fringe group's work as facts. You could state there/separate shia and sunni cleric's work. On top of that, no one in the early muslims community ever made the claim that Mr. Majlisi made.
That is your claim that the certain text you want to remove belongs to a minority sect of Islam. Secondly even if the source is of a minority sect, the sources for all sects are used and accepted for criticism of Islam, because they are part of Islam. A sunni muslim will say they dont accept Shia sources and verse versa so if critics of Islam care about that, there will be no criticism in the end to talk about.
Shia are 10% of the Muslim population and an important part as I mentioned.
I bet there are other multiple sources for that information.
Lastly whether or not Muhammad said that Queen Asiya will be his wife in Islamic heaven is a very minor issue compared to the bigger issues in Islam which WikiIslam talks about. I suggest you start clicking around and browsing through the pages. You can start with the QHS series or any of the Core articles on the left.
Thanks for the reply. My critic is purely academic. I am an ex-muslim and wikiislam is actually the best critical source i have found on islam. Still i would say adding a bracket(shia) information would probably be helpful. Also maybe could remove the sahih bukhari and muslim citation because it doesn't have anything to do with god marrying him to the girls.
I dont know if you're an ex-Muslim or not, but you removed sourced information from the page twice and that is vandalism.
Academically, all sources are all part of Islam and should be treated as such. As I said we cannot remove sourced text and we cannot start adding shia or Sunni or all the other sects of Islam to all the content.
Are you having difficult debating with people about the topic? Its easy. Tell them the same thing I told you. All sources of Islam can be used for criticism of Islam. It is valid information and cannot be rejected simply because its found in one sect of Islam.
The Quran doesnt say that all other sects of Islam are invalid, or anything like that. Does it? So what is your basis for asking to remove text from a Shite source?
Also Majlisi is a Shite source. Why did you call it Ahmadiya in your edit history? Please respond to that.
The other information/hadiths contain the other information that is mentioned in the piece of text. It all goes together.
Basically again, you are wanting to removed sourced information from the page. We have spent enough time on this issue. As I pointed out its all sourced the fact that Muhammad said Queen Asiya will be one of his wives in heaven is a minor issue in Islam, compared to other more important issues.
I made a mistake thinking it was ahmadiyya because of the website that hosted the work. http://www.al-islam.org/ I thought it was an ahmadiyya but it was a shia website. https://www.alislam.org is an ahmadiyya website. I thought users could edit the work and the edit would then be moderated by say 10 moderators before it is approved? I am a panentheist maybe a pantheist one day but for now a panentheist. No religion, because 'God'/Nature/Zeus/Tao/whatever you want to call it already gave me Reason which is a Divine Scripture itself.
I don't think I properly understand your last statement, maybe yes i should agree. Probably only if the statement doesn't have a common theme like the ones i pointed out. The hadith points out that the 4 girls were perfect while the majlisi said god married muhammad to the girls. So, yes it shouldn't be in the same column.
It would have been nice if the statements would have been individually sourced e.g. statement 1 (source 1). statement 2 (source 2). Instead its statement 1, and 2 (source 1 and 2). So its not clear what text is coming from which source. I've added it to the task list. It will be a difficult task but it would be nice if that was there. The author who wrote it suddenly saved a lot of text or else we would have told them how to do it.
As for shia/sunni/other sects, I dont think it weakens criticism of Islam. It is up to the apologist to explain why a certain sect is invalid and they will be unable to do so as all sects think they're the most correct sect and cant offer any evidence for that claim. In reality they are equally valid (as parts of Islam and as sources for criticism) because again Quran never mentions which sect is the right one. If something is mentioned in minority sect 1, it doesnt mean it never happened. If the author is a known scholar, religious figure (like Majlisi), then it should be acceptable to use it as a source.
Yes i agree that we could use different sects but it would still be better state the affiliation of the author(sect) so that viewers wouldn't just dismiss this website as mumbo jumbo just because there are statements that goes directly with their source/what they/their sect consider as valid. Btw, thanks.
"viewers wouldn't just dismiss this website as mumbo jumbo" - Those viewers already reject the website due to one reason or another because its critical of Islam so what they think of the website is not important.
Tagging could be done due to other reasons but its not an easy task. People would have to decide, if its really important or not and worth doing, if its practical/beneficial, pros/cons, how to show the different sects (small super script notations e.g. how its done here , notice the different superscript letters), which sects to show, what content is affected, how it affects translations/other language domains and so on.
Hi there, just wanting to know your thoughts. What is the best way to make someone learn the truth about islam? I tried to convince my brother but it seems that he always have an answer to every issues. I know that his answer was wrong but he seems to be so sure about it. I tried to rectify but he won't accept it. It seems impossible to make someone realise that this is an evil religion.
Thank you. I'll try that. Seems pointless sometimes but yes i think maybe the best way is to focus on one topic.
Not really active here. Sorry, yeah.
This page was last edited on 12 June 2017, at 11:52.


text:
Furstnow Made the Saddle that Made Miles City Famous
by Fritz Rehbein
Al Furstnow was born right around 1862 in Fond Du Lac, Wisconsin. He learned the saddlery business from his father and worked for Collins' Saddlery in Cheyenne, Wyoming, in 1881.
Furstnow went to Miles City, Montana, about 1883 where he worked for Goettlich for about a year. He then bounced around to Nebraska, Wyoming, and California for several years, coming back to Miles City to work for Robbins & Lenoir about 1892.
In August of 1894, Furstnow opened his own shop. I don't think he bought anybody out or throwed in with anybody. Then, in December 1894, Charlie Coggshall bought half interest in Furstnow's shop. Two years later, Furstnow and Coggshall, as partners, bought out the stock of Moran and W. J. Zimmerman.
Furstnow & Coggshall added workers and became the only major saddlery between Billings, Montana, and Dickinson, North Dakota and a lot of people were sitting in saddles in those days!
Then in March 1899 Furstnow & Coggshall split up, forming a rivalry that lasted well into the 20th century. Around 1910, Al Moreno, a highly talented stamper from California, joined Furstnow in his new two-story building. Furstnow was turning out about 800 saddles per year at that point. Al Moreno ended up being Furstnow's son-in-law.
About July 1916 Furstnow's son I believe his name was Charles started up a branch retail saddlery in Sidney, Montana, which was my old stomping grounds. That branch store buttoned up around November 1917.
Al Furstnow himself went to California around 1922 where he built saddles for some of them actors. He died in California around 1925, about 62 or 63 years old.
Al Furstnow's Saddlery in Miles City, Montana, was in business from 1894 until 1982. It was run by his son-in-law Al Moreno and, I'm pretty sure, Moreno's son helped out too but it carried the Furstnow name from 1894 to 1982, right around 88 years.
Note: This story appeared originally in the September 25, 1997, issue of Agri-News, a weekly ag newspaper from Billings, Montana. For more information about Agri-News or to receive a subscription, contact:
Agri-News


$10 cheaper than the spring sale on XBL.
Thanks for the heads up! That's even the "super charged edition" which is $20 on the XBL sale.
I bought the game on PS4 a few weeks ago and it's a fun game for a few hours. I do have to admit I haven't touched it since then. Once you play with all the mechs a few times it gets boring.
PS4 version is $16.83 in case that is the version you want to get.


text:
package io.strimzi.operator.cluster.model;

import io.strimzi.api.kafka.model.storage.EphemeralStorageBuilder;
import io.strimzi.api.kafka.model.storage.JbodStorageBuilder;
import io.strimzi.api.kafka.model.storage.PersistentClaimStorageBuilder;
import io.strimzi.api.kafka.model.storage.PersistentClaimStorageOverrideBuilder;
import io.strimzi.api.kafka.model.storage.Storage;
import io.strimzi.operator.common.Reconciliation;
import io.strimzi.test.annotations.ParallelSuite;
import io.strimzi.test.annotations.ParallelTest;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

@ParallelSuite
public class StorageDiffTest {
    @ParallelTest
    public void testJbodDiff()    {
        Storage jbod = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("100Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-st1").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage jbod2 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        StorageDiff diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(false));

        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod2, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(false));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(false));
    }

    @ParallelTest
    public void testPersistentDiff()    {
        Storage persistent = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("100Gi").build();
        Storage persistent2 = new PersistentClaimStorageBuilder().withStorageClass("gp2-st1").withDeleteClaim(false).withId(0).withSize("1000Gi").build();

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).changesType(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).shrinkSize(), is(false));

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).changesType(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).shrinkSize(), is(false));
    }

    @ParallelTest
    public void testPersistentDiffWithOverrides()    {
        Storage persistent = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .build();
        Storage persistent2 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(new PersistentClaimStorageOverrideBuilder()
                        .withBroker(1)
                        .withStorageClass("gp2-ssd-az1")
                        .build())
                .build();
        Storage persistent3 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(new PersistentClaimStorageOverrideBuilder()
                        .withBroker(1)
                        .withStorageClass("gp2-ssd-az2")
                        .build())
                .build();

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).changesType(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).shrinkSize(), is(false));

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).changesType(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).shrinkSize(), is(false));

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 3, 3).changesType(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 3, 3).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 3, 3).shrinkSize(), is(false));
    }

    @ParallelTest
    public void testSizeChanges()    {
        Storage persistent = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("100Gi").build();
        Storage persistent2 = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build();
        Storage persistent3 = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("10Gi").build();
        Storage persistent4 = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("3.2Ti").build(); // Used to test millibytes
        Storage persistent5 = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("3518437208883200m").build(); // Used to test millibytes

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 3, 3).shrinkSize(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 3, 3).shrinkSize(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent3, 3, 3).shrinkSize(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent4, persistent5, 3, 3).shrinkSize(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent4, persistent, 3, 3).shrinkSize(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent5, persistent, 3, 3).shrinkSize(), is(true));
    }

    @ParallelTest
    public void testEphemeralDiff()    {
        Storage ephemeral = new EphemeralStorageBuilder().build();

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, ephemeral, ephemeral, 3, 3).changesType(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, ephemeral, ephemeral, 3, 3).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, ephemeral, ephemeral, 3, 3).shrinkSize(), is(false));
    }

    @ParallelTest
    public void testCrossDiff()    {
        Storage jbod = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("100Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-st1").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage ephemeral = new EphemeralStorageBuilder().build();

        Storage persistent = new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("100Gi").build();

        StorageDiff diffJbodEphemeral = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, ephemeral, 3, 3);
        StorageDiff diffPersistentEphemeral = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, ephemeral, 3, 3);
        StorageDiff diffJbodPersistent = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, persistent, 3, 3);

        assertThat(diffJbodEphemeral.changesType(), is(true));
        assertThat(diffPersistentEphemeral.changesType(), is(true));
        assertThat(diffJbodPersistent.changesType(), is(true));

        assertThat(diffJbodEphemeral.isEmpty(), is(false));
        assertThat(diffPersistentEphemeral.isEmpty(), is(false));
        assertThat(diffJbodPersistent.isEmpty(), is(false));

        assertThat(diffJbodEphemeral.isVolumesAddedOrRemoved(), is(false));
        assertThat(diffPersistentEphemeral.isVolumesAddedOrRemoved(), is(false));
        assertThat(diffJbodPersistent.isVolumesAddedOrRemoved(), is(false));
    }

    @ParallelTest
    public void testJbodDiffWithNewVolume()    {
        Storage jbod = new JbodStorageBuilder()
                .withVolumes(new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build())
                .build();

        Storage jbod2 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage jbod3 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-st1").withDeleteClaim(false).withId(0).withSize("100Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage jbod4 = new JbodStorageBuilder()
                .withVolumes(new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(2).withSize("1000Gi").build())
                .build();

        Storage jbod5 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage jbod6 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-st1").withDeleteClaim(true).withId(2).withSize("5000Gi").build())
                .build();

        // Volume added
        StorageDiff diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod2, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // Volume removed
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod2, jbod, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // Volume added with changes
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod3, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(false));
        assertThat(diff.shrinkSize(), is(true));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // No volume added, but with changes
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod2, jbod3, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(false));
        assertThat(diff.shrinkSize(), is(true));
        assertThat(diff.isVolumesAddedOrRemoved(), is(false));

        // Volume removed from the beginning
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod3, jbod5, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // Volume added to the beginning
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod5, jbod3, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // Volume replaced with another ID and another volume which is kept changed
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod3, jbod6, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(false));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // Volume replaced with another ID in single volume broker
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod4, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));

        // Volume replaced with another ID without chenging the volumes which are kept
        diff = new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod2, jbod6, 3, 3);
        assertThat(diff.changesType(), is(false));
        assertThat(diff.isEmpty(), is(true));
        assertThat(diff.shrinkSize(), is(false));
        assertThat(diff.isVolumesAddedOrRemoved(), is(true));
    }

    @ParallelTest
    public void testSizeChangesInJbod()    {
        Storage jbod = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage jbod2 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("5000Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("1000Gi").build())
                .build();

        Storage jbod3 = new JbodStorageBuilder().withVolumes(
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(false).withId(0).withSize("1000Gi").build(),
                new PersistentClaimStorageBuilder().withStorageClass("gp2-ssd").withDeleteClaim(true).withId(1).withSize("500Gi").build())
                .build();

        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod, 3, 3).shrinkSize(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod2, 3, 3).shrinkSize(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, jbod, jbod3, 3, 3).shrinkSize(), is(true));
    }

    @ParallelTest
    public void testPersistentDiffWithOverridesChangesToExistingOverrides()    {
        Storage persistent = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build(),
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(1)
                                .withStorageClass("gp2-ssd-az2")
                                .build())
                .build();

        Storage persistent2 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build(),
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(1)
                                .withStorageClass("new-sc")
                                .build())
                .build();

        // Test no changes when the diff is the same
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 2, 2).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent2, 2, 2).isEmpty(), is(true));

        // Override changed for node which does not exist => is allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 1, 1).isEmpty(), is(true));

        // Override changed for node which is being scaled up => is allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 1, 2).isEmpty(), is(true));

        // Override changed for existing node  => is not allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 2, 2).isEmpty(), is(false));

        // Override changed for node being scaled down => is allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 2, 1).isEmpty(), is(true));
    }

    @ParallelTest
    public void testPersistentDiffWithOverridesBeingAdded()    {
        Storage persistent = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .build();

        Storage persistent2 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build())
                .build();

        Storage persistent3 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build(),
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(1)
                                .withStorageClass("gp2-ssd-az2")
                                .build())
                .build();

        // Test no changes
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 2, 2).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent2, 2, 2).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent3, 2, 2).isEmpty(), is(true));

        // Overrides added for existing nodes => not allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 2, 2).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent3, 2, 2).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 2, 2).isEmpty(), is(false));

        // Overrides added for new nodes => allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 1, 2).isEmpty(), is(true));

        // Overrides added for removed nodes => allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 2, 1).isEmpty(), is(true));

        // Overrides added for non-existing nodes => allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent3, 1, 1).isEmpty(), is(true));
    }

    @ParallelTest
    public void testPersistentDiffWithOverridesBeingRemoved()    {
        Storage persistent = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .build();

        Storage persistent2 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build())
                .build();

        Storage persistent3 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build(),
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(1)
                                .withStorageClass("gp2-ssd-az2")
                                .build())
                .build();

        // Test no changes
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 2, 2).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent2, 2, 2).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent3, 2, 2).isEmpty(), is(true));

        // Overrides removed for existing nodes => not allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent, 2, 2).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent2, 2, 2).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent, 2, 2).isEmpty(), is(false));

        // Overrides removed for new nodes => allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent2, 1, 2).isEmpty(), is(true));

        // Overrides removed for removed nodes => allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent2, 2, 1).isEmpty(), is(true));

        // Overrides removed for non-existing nodes => allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent3, persistent2, 1, 1).isEmpty(), is(true));
    }

    @ParallelTest
    public void testPersistentDiffWithOverridesBeingAddedAndRemoved()    {
        Storage persistent = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(0)
                                .withStorageClass("gp2-ssd-az1")
                                .build())
                .build();

        Storage persistent2 = new PersistentClaimStorageBuilder()
                .withStorageClass("gp2-ssd")
                .withDeleteClaim(false)
                .withId(0)
                .withSize("100Gi")
                .withOverrides(
                        new PersistentClaimStorageOverrideBuilder()
                                .withBroker(1)
                                .withStorageClass("gp2-ssd-az2")
                                .build())
                .build();

        // Test no changes
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent, 2, 2).isEmpty(), is(true));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent2, 2, 2).isEmpty(), is(true));

        // Overrides added and removed for existing nodes => not allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent, 2, 2).isEmpty(), is(false));
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 2, 2).isEmpty(), is(false));

        // Overrides added for new nodes but removed for old => not allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent, persistent2, 1, 2).isEmpty(), is(false));

        // Overrides removed for new nodes but added for old => not allowed
        assertThat(new StorageDiff(Reconciliation.DUMMY_RECONCILIATION, persistent2, persistent, 1, 2).isEmpty(), is(false));
    }
}

redpajama_set_name: RedPajamaGithub


text:
07 Oct, 18
Banking, digital banking, Globalisation
Are international banks avoiding India? Here's probably why.
In the age of globalisation where borderlines of nations, be it developed or developing, are becoming blurred, the presence of foreign banks in India is paradoxically undergoing a gradual diminution.
According to the Reserve Bank of India, only 45 foreign banks remain in the Indian banking sector, with 286 branches amongst them. What is triggering international banks to stay wary of India?
By Abhiruchi Ranjan
Reasons for exit
The fast pace of technological advancement has given to rise to a new avenue for bankers to foray into: branchless banking. With there being an upward trend in the usage of electronic payments, internet banking and carrying out transactions through mobile phones, banks, both domestic and international ones, are leveraging on this new feature that consumers are adapting to. Consumers want instant services and no longer want to be dependent on professional bankers for transferring money or updating their passbooks. This new age banking has allowed most foreign banks to exit the Indian market and not open branches at all in order to curtail operational costs and make sure their financial budgets are more on the conservative side.
Foreign banks are no longer the sole owners of new age technology. Indian banks belonging to the public and private sector have evolved and are giving international players a cut-throat competition by incorporating the latest evolvements in robotics and Artificial Intelligence (AI). India's largest private sector bank ICICI was the first domestic bank to employ software robotics or technically known as robotic process automation (RPA). With error rates close to zero, the bank has been successful processing transactions of over Rs 2 million, without indulging in corporate downsizing.
Cost constraints plague every business and the multinational banks are no different. While operational costs in the form of rent of offices, salaries and other sundry expenses exist, the margins between interest income from giving out loans and advances and paying the depositors have somewhat become measly. The immediate solutions that come to our mind of resolving this meagre gap between lending rates and deposit rates is that banks either increase the interest rates on their loans to garner higher revenues or reduce deposit rates so that they're liable to pay lesser to their customers. However, banks resort to this very rarely as they fear high competition, cannot afford to break even and may not be experiencing economies of scale (cost advantages). This is when institutions take recourse to selling 'other products' like insurance, mutual funds and securities and increase their revenue streams.
Stringency in priority sector lending (PSL) norms may also be cited as a major reason for foreign banks holding back on increasing their presence in the Indian subcontinent. In early 2018, RBI mandated that overseas banks with 20 branches and more on Indian soil would have to eventually lend 40% of their total loan book to the priority sector which includes agriculture, micro, small and medium enterprises (MSMEs) and rural infra. The rule which is to come into effect from April 2020 would impact giants like Standard Chartered, Citibank and HSBC which have 100, 35 and 26 branches respectively. PSL has always been a point of conflict between monetary regulatory RBI and foreign market players. While diminishing profits and working capital plaguing most banks' financial statements, catering to the PSL criterion is only viewed as an added liability. Not wanting to lose their Indian customer base due to its high consumption and fast economic growth, these banks succumb to the demands of the RBI.
Coming to investments, the Indian mentality is such that the investment portfolio of most individuals comprises of instruments and assets where they are assured of a return, even if it is low. Households want an assured return which explains their bias towards holding more of real estate and gold. The low risk-return trade off is what defines a typical investor belonging to the Indian market. As a corollary, a lot of wealth management businesses have been forced into exile due to the potential of earning profits falling.
Protecting overall profitability for management is what it boils down to. A lot of banks decided to shut shop in the Indian market. Be it Deutsche Bank selling its credit card business, Standard Chartered letting go a quarter of its staff in corporate and investment banking or HSBC's step to bid adieu to private banking, the trend is clear. Home banking and not global banking is being focused upon. This move has led to a lot of banks to return to their expertise in relationship banking and institutional banking by catering to the needs of high net worth individuals (HNIs) and focus on mergers and acquisitions (M&As), because that's where they see potential for earning a greater amount of profit.
Like many central banks across the world, our very own RBI has also taken to monetary tightening. After the repo rate was hiked by 25 basis points to 6.25%, it can only be expected that the burden of expensive borrowing would be passed on to its consumers. This may provoke many institutions to hike their lending rates which would inturn have a dampening effect on their revenue stream. Moreover, complexities in the rules and regulations of the central bank has discouraged many a foreign banks to set up wholly owned subsidiaries of their own.
When the NDA came into power in 2014, they have vehemently endorsed the urgency of financial literacy and financial inclusion, especially of the rural communities. The Jan Dhan Yojna highlighted the importance of ensuring that the rural population was aware of financial services and has access to. This kind of political pressure may have added to foreign banks stepping back from Indian markets.
Why some foreign banks continue to target Indian market?
After the 2008 global financial crisis, some foreign banks have continued to establish and moreover retain their Indian presence. Indian financial markets remained resilient by showing that they were insulated from the shocks of the sub prime mortgage crisis. This has given rise to foreign banks being a lot more collaborative with regulatory requirements. Further, banks which decided to withdraw themselves form the Indian market did not face as many disruptions due to Foreign Exchange Management Act (FEMA) and banking regulations restrictions on capital repatriation and liquidity requirements.
ANZ Banking Group is expected to widen its network through institutional banking. India being one of the fastest growing nations in the world, economic growth and positive reforms mirror their sentiment of stability and soundness of the central bank continues to remain attractive to foreign investors.
The Asian economy's growth highly depends on foreign banks. It acts as a channel to tap into foreign capital markets and is catalysing the process of economic growth which clearly leaves scope for greater foreign banks to enter the Indian banking sector.
While Indian banks grapple with the plight of mounting non performing assets and mounting levels of bas loans, households as well as industries have turned to foreign banks for loans. Although less reluctant than the Indian banks, loans would be an expensive affair for borrowers especially in times where the banking sector is plagued with scams of industrialist defaulters.
Expatriate, migrant and international student banking is another aspect that is showing a steady growth in its demand. As many individuals migrate to developed countries in search of better opportunities, foreign banks come forward to provide assistance to those by equipping them with the necessary instruments and providing unique benefits such as opening their bank accounts, providing debit cards and arranging for loans.
While foreign banks do fill a certain gap in the Indian market, their journey to survive is riddled with abiding by a complex regulatory system, battling high operational costs and meeting demands of consumers in an intensely competitive market.
Abhiruchi Ranjan is a writing analyst at Qrius


text:
Q: How to integrate react-native app as a module in existing android app? I have made a demo react-native app using typescript, and want to open that on a button click inside my native android project using an intent.. Can anyone provide a solution that actually works?

A: Two options. You need to have all the RN-dependencies in your project, so it might be easier to add your native project to the RN-project. Otherwise you can also add all the dependencies and build rules to your native project.
Then you might rename your RN-MainActivity to something like MyReactActivity and add that to your AndroidManifest.xml
In your native Activity you can then just call
Intent intent = new Intent(this, MyReactActivity.class);
startActivity(intent);