text:
Three fires in one night; one results in death
Three Montgomery homes caught fire Wednesday night with one of the fires resulting in the death of an unknown adult male, said Montgomery Fire and Rescue Sgt. O.J. Whiting.
The victim, who neighbors described as an older man, died after a fire started in his Henley Street home at about 11:30 p.m.
Denishia Bibbins was two houses away when she smelled smoke.
"I thought it was one of those things you burn to keep mosquitoes away. Then we heard someone yelling, 'He's in there! He's in there!'" Bibbins said.
The person yelling went to the door of the house and began hammering on the door trying to break in. Neighbor Shaquille Green went over to help.
"I saw the guy beating on the door," Green said. "Something told me to go help. He told me, 'Kick it in! Kick it in!'"
Green kicked at the door until the screws in his leg began to hurt. The other man continued to beat on the door until it finally opened, Green said.
"We didn't make it far though. The flames came at us like whoosh," he said, gesturing toward his face.
Man charged in May 4 slaying on Kiwanis St.
MFR arrived on scene, and once advised that somebody was in the house, the unit performed a "rapid interior attack," Whiting said.
MFR found the man and dragged him out of the house, but he was pronounced dead on the scene.
"They dragged him out and did CPR trying to bring him back," Green said. "One minute he was there, the next he was gone."
The fire investigator found the fire to have been caused by an overloaded electrical circuit.
The two other fires Wednesday night occurred on Tyler Road and Hartford Street.
- At 7 p.m. an electrical short caused a fire at a Tyler Road residence. The home received heavy smoke and fire damage, but the residents were able to escape safely before MFR arrived on scene.
- At 11:38 p.m. a vacant house on Hartford Street caught fire. Nobody was injured and the incident is still under investigation.


text:
ONI Bureau: The Odisha Government has declared an area of 10,456.64 hectares of farmland in 1,567 villages as affected by pest attack.
According to a notification issued by the Special Relief Commission, an area of 10456.64 hectares in 1567 villages under 319 Gram Panchayats (GPs) of 15 Blocks and 15 wards of 4 ULBs in 2 districts affected by pest attack having sustained crop loss of 33 percent and above based on the field verification reports of the District Collectors.
Earlier on Saturday, the State government has declared an additional 67576.94 hectares in 1729 villages under 360 GPs of 21 Blocks and 45 wards of 6 ULBs in 3 districts of Kalahandi, Nuapada and Sambalpur as drought hit.
Collectors of the concerned districts have been directed to undertake relief measures in the notified area.

subset: commoncrawl


text:
Low-Risk Monolith to Microservice Evolution: Part III
This microservices series continues to guide us through the steps of a low-risk shift away from the monolith and towards a distributed system.
Join the DZone community and get the full member experience.Join For Free
In the first part (part I) we introduced a strategy to bring microservices to our architecture without disrupting the current request flows and business value by looking at a concrete example. In the second part, we started looking at accompanying technology that aligns with our architectural strategy and goals. In this third part, we continue the solution from part II by focusing on what to do about adding a new service that may need to share data with the monolith (at least initially) and into some more complex deployment scenarios. We also explore consumer contract testing with Arquillian Algeron and how we can use that to get a handle on API changes in our services architecture.
Follow along (@christianposta) on Twitter or http://blog.christianposta.com for the latest updates and discussion.
You can find Part I and Part II here.
The technologies we'll use (in part II, III, and IV) to help guide us on this journey:
- Developer service frameworks (Spring Boot, WildFly, WildFly Swarm)
- API Design (APICur.io)
- Data frameworks (Spring Boot Teiid, Debezium.io)
- Integration tools (Apache Camel)
- Service mesh (Istio Service Mesh)
- Database migration tools (Liquibase)
- Dark launch/feature flag framework (FF4J)
- Deployment/CI-CD platform (Kubernetes/OpenShift)
- Kubernetes developer tools (Fabric8.io)
- Testing tools (Arquillian, Pact/Arquillian Algeron, Hoverfly, Spring-Boot Test, RestAssured, Arquillian Cube)
If you'd like to follow along, the sample project I'm using is based on the TicketMonster tutorial on http://developers.redhat.com but has been modified to show the evolution from monolith to microservice. You can find the code and documentation (docs still in progress!) here on GitHub.
We left off in part II by going down the path of adding a new microservice (Orders/Booking) that will be split out from our monolith. We began that step by exploring an appropriate API by simulating it with Hoverfly.
Connect the API With an Implementation
Revisiting Considerations
- The extracted/new service has a data model that has tight coupling with the monolith's data model by definition.
- The monolith most likely does not provide an API at the right level to get this data.
- Shaping the data even if we do get it requires lots of boilerplate code.
- We can connect directly to the backend database temporarily for read-only queries.
- The monolith rarely (if ever) changes its database.
In Part I, we hinted at a solution involving connecting right up to the monolith's database. In our example, we need to do this because the data in that database is going to initially start off being the life-blood of our new
Orders service that we're trying to decompose from the monolith. Additionally, we want to introduce this new service, allow it to take load, and have a consistent view of what's in the monolith; i.e., we'll be running both concurrently for a period of time. Note, this maneuvering strikes right at the heart of our decomposition: we cannot just magically start calling a new microservice that properly encapsulates all of the logic of booking/ordering without impacting current load.
What alternatives do we have if we don't want to connect right up to the monolith database? I can think of a few... feel free to comment or tweet at me if you want to voice other suggestions:
- Use the existing API exposed by the monolith.
- Create a new API specifically for accessing the monolith's database; call it anytime we need data.
- Do an ETL from the monolith to our new service so we have the data already.
Using the Existing API
If you can do this, definitely explore it. Often times, however, the existing APIs are quite coarse-grained, not intended for lower-level use, and may need a lot of massaging to get into the desired data model you would like in your new service. For each incoming call your new service,
Orders service in this example, you'd need to query (possibly multiple endpoints) the legacy/monolith API and engineer the response to your liking. There's nothing inherently wrong with this unless you start taking shortcuts that let your monolith/legacy API/data model strongly influence your new service's data model. Even though, at least in my example, the data model may be similar at first, we want to quickly iterate (using DDD) and get the right domain model, not just a normalized data model.
Create a New Lower-Level API
If the existing monolith API is too coarse grained (or doesn't exist at all), or you don't want to promote re-using it, you could instead create your own lower-level API that connects to the monolith's database directly and expose the data at a level the new
Orders service may need it. This may be an acceptable solution as well. On the other hand what I've experienced is that the new
Orders service ends up writing lots of queries/API calls to this new lower-level interface and doing in-memory joins on the responses (similar to the previous option). It could also feel like we're implementing a database. Again, nothing inherently wrong with this, but this leaves a lot of boiler plate code for the
Orders service to write - a lot of it used as a temporary, interim, solution.
Do an ETL From Monolith to Our New Service
At some point, we may indeed need to do this. However, at the point when we're working on the domain model of the new service, we may not want to deal with the old monolith structure. Also, we intend to run the new services alongside the monolith at the same time; we expect both to possibly take traffic. If we do the ETL approach, we'll need a way to keep the
Orders service up-to-date as things can get out of sync quickly. This ends up being a bit of a nightmare.
As a developer of the new
Orders service, we want to think in terms of the domain model (note: I didn't say data model - there's a difference) that makes sense for our service. We want to eliminate, as much as possible, the influence of outside implementations that could serve to compromise our domain model. The distinction: a data model shows how pieces of the (static) data in our system relate to each other, possibly giving guidance for how things get stored in a persistence layer. Domain models are used for describing the behavior of the solution space of our domain and tend to focus more on use case/transaction behaviors; i.e., the concepts or models we use to communicate what the problem is. DDD guru Vaughn Vernon has a great series of essays that go into this distinction in more detail.
The solution that I've used in the
Orders service for Ticket Monster orders service is to use an opensource project named Teiid that helps reduce/eliminate the boilerplate of munging data models into our ideal domain model. Teiid has traditionally been a data federation software with the ability to take disparate data sources (Relational DBs, NoSQL, Flat files, etc) and present them as a single virtualized view. Typically this would be used by data analytics folks to aggregate data for reporting purposes, etc. but we're more interested in how developers can use it solve the above problem. Luckily folks from the Teiid community, especially Ramesh Reddy, created some nice extensions to Teiid and Spring Boot to help eliminate the boilerplate that comes along with solving this problem.
Introducing Teiid Spring Boot
Again, to re-state the problem: we must focus on our service's domain model, but initially the data that backs the domain model will still be in our monolith/backend database. Can we virtually merge the structure of the monolith's data model with our desired domain model and eliminate boilerplate code dealing with combining this data?
Teiid Spring Boot allows us to focus on our Domain model, annotate them with JPA
@Entity annotations as we would with any model, and map them to our own new database as well as virtually map the monolith's database. To get started with
teiid-spring-boot all you need is to import the following dependency:
This is a starter project that will hook into Spring's auto configure magic and attempt to set up our virtual database (backed by the monolith's database and our real, physical database owned by this service).
Now we need to define the data sources in Spring Boot for each of the backends. In this example case, I've used two MySQL databases, but that's just a detail. We're not limited to both data sources being the same, nor are we limited to RDBMs. Here's an example:
Let's also configure
teiid-spring-boot to scan our domain models for their virtual mappings to the monolith. In
application.properties let's add this:
Teiid Spring Boot allows us to specify our mappings as annotations on our
@Entity definitions. Here's an example (see the full implementation and full set of domain objects on GitHub):
@SelectQuery("SELECT s.id, s.description, s.name, s.numberOfRows
AS number_of_rows, s.rowCapacity AS row_capacity, venue_id, v.name
AS venue_name FROM legacyDS.Section s
JOIN legacyDS.Venue v ON s.venue_id=v.id;")
@Table(name = "section", uniqueConstraints=@UniqueConstraint(columnNames={"name", "venue_id"}))
public class Section implements Serializable {
@GeneratedValue(strategy = IDENTITY)
private Long id;
private String name;
private String description;
private VenueId venueId;
@Column(name = "number_of_rows")
private int numberOfRows;
@Column(name = "row_capacity")
private int rowCapacity;
In the above example, we used the
@SelectQuery to define the mapping between the legacy data source (
legacyDS.*) and our own domain model. Note, often times these mappings can have lots of JOINs etc to get the data in the right shape for our model; it's better to write this JOIN once in an annotation that tries to write lots of boilerplate code to deal with this across a REST API (not just the querying, but the actual mapping to our intended domain model). In the above case, we just mapped from the monolith's database to our domain model - but what if we need to merge in our own database? Something like this can be done (see the full impl in the Ticket.java entity):
Note that in this sample, we're unioning both of the views (from the monolith database and our own local
Orders database) with the keyword
What About Updates or Inserts?
For example, our
Orders service is supposed to store Orders/bookings. We can add an
@InsertQuery annotation on the
Booking DDD entity/aggregate like this:
See the documentation for the rest of the teiid-spring-boot annotations that we can use.
You can see here when we persist a new
Booking (JPA, Spring Data, whatever) the virtual database knows to store it into our own
Orders database. If you prefer to use Spring Data, you can still take advantage of
teiid-spring-boot. Here's an example from the teiid-spring-boot samples:
public interface CustomerRepository extends CrudRepository<Customer, Long> {
@Query("select c from Customer c where c.ssn = :ssn")
Stream<Customer> findBySSNReturnStream(@Param("ssn") String ssn);
If we have the proper
teiid-spring-boot mapping annotations, this spring-data repository will understand our virtual database layer correctly and just let us deal with our domain model as we would expect.
To re-iterate; this is a point-in-time solution for the initial steps for microservice decomposition; it's not intended to the the final solution. We're still iterating on that in our running example here. We're intending to reduce the boiler plate and nastiness that can arise with doing the mapping/translation, etc by hand.
If you're still bent on standing up a simple API for lower-level data access to the monolith database (again, as a temporary solution), then
teiid-spring-boot is still your friend. You can very quickly expose this kind of API with no code using the
odata integration we have with
teiid-spring-boot. Please checkout the odata module for more (note, we're still working on more docs for the project!)
At this point in the decomposition, we should have an implementation of our
Orders service with a proper API, domain model, connecting to our own database, and temporarily creating a virtual mapping to our monolith database that we can use inside our domain model. Next, we need to deploy it into production and dark launch it.
Start Sending Shadow Traffic to the New Service (Dark Launch)
Revisiting Considerations
- Introducing the new Orders service into the code path introduces risk.
- We need to send traffic to the new service in a controlled manner.
- We want to be able to direct traffic to the new service as well as the old code path.
- We need to instrument and monitor the impact of the new service.
- We need ways to flag transactions as "synthetic" so we don't end up in nasty business-consistency problems.
- We wish to deploy this new functionality to certain cohorts/groups/users.
Following along from part I for this section, we are going to modify the monolith to make a call to our new
Orders service. As described in part I, we'll use some techniques from Michael Feather's book to wrap/extend the existing logic in our monolith to call our new service. For example, our monolith looked like this for the
createBookings implementation:
public Response createBooking(BookingRequest bookingRequest) {
try {
// identify the ticket price categories in this request
Set<Long> priceCategoryIds = bookingRequest.getUniquePriceCategoryIds();
// load the entities that make up this booking's relationships
Performance performance = getEntityManager().find(Performance.class, bookingRequest.getPerformance());
// As we can have a mix of ticket types in a booking, we need to load all of them that are relevant,
// id
Map<Long, TicketPrice> ticketPricesById = loadTicketPrices(priceCategoryIds);
// Now, start to create the booking from the posted data
// Set the simple stuff first!
Booking booking = new Booking();
// Now, we iterate over each ticket that was requested, and organize them by section and category
// we want to allocate ticket requests that belong to the same section contiguously
Map<Section, Map<TicketCategory, TicketRequest>> ticketRequestsPerSection
= new TreeMap<Section, java.util.Map<TicketCategory, TicketRequest>>(SectionComparator.instance());
for (TicketRequest ticketRequest : bookingRequest.getTicketRequests()) {
final TicketPrice ticketPrice = ticketPricesById.get(ticketRequest.getTicketPrice());
if (!ticketRequestsPerSection.containsKey(ticketPrice.getSection())) {
.put(ticketPrice.getSection(), new HashMap<TicketCategory, TicketRequest>());
ticketPricesById.get(ticketRequest.getTicketPrice()).getTicketCategory(), ticketRequest);
Actually, there's a lot more to this code - just like any good monolith, there are very long, complicated methods that can be difficult to understand what's going on. We're going to change it to something like this:
public Response createBooking(BookingRequest bookingRequest) {
Response response = null;
if (ff.check("orders-internal")) {
response = createBookingInternal(bookingRequest);
if (ff.check("orders-service")) {
if (ff.check("orders-internal")) {
else {
response = createBookingOrdersService(bookingRequest);
return response;
This method is much smaller, more organized, and easier to follow. But what's going on here? What's this
ff.check(...) stuff?
A key point to make here is that we're altering the monolith as little as we can; ideally, we have unit/component/integration/system tests to help validate our changes don't break anything. If not, refactor tactically to be able to get tests in place.
As part of the changes we make, we don't want to alter the existing call flow: we move the old implementation to a method called
createBookingInternal and leave it as is. But we also add a new method that will be responsible for the new code path that calls the
Orders service. We are going to use a feature-flag library that will allow us to do a couple things:
- Full runtime/configuration control over which implementation to use for orders
- Disable the new functionality
- Enable BOTH the new functionality AND the old functionality simultaneously
- Completely switch over to the new functionality
- Killswitch all functionality
We're using Feature Flags 4 Java (FF4j), but there are alternatives for other languages including a hosted SaaS providers like Launch Darkly. Of course, you could write your own framework to do this, but these existing projects offer out of the box capabilities. This is a very similar approach to Facebook's (and others) framework for controlling releases. Refer back to the discussion about the difference between a deployment and a release.
To use FF4j, let's add the dependency to our
Then we can declare features in our
ff4j.xml file (and group them, etc. Please see the ff4j documentation for more details on the more complicated feature/grouping features).
<feature uid="orders-internal" enable="true" description="Continue with legacy orders implementation" />
<feature uid="orders-service" enable="false" description="Call new orders microservice" />
Then we can instantiate an FF4j object and use it to test whether features are enabled in our code:
FF4j ff4j = new FF4j("ff4j.xml");
if (ff4j.check("special-feature")){
The out of the box implementation uses the
ff4j.xml configuration file to specify features. The features can then be toggled at runtime, etc (see below), but before we keep going I want to point out that the features and their respective status (enable/disable) should be backed by a persistent store in any kind of non-trivial deployment. Please take a look at the FeatureStore docs on the ff4j site.
We also want a way to configure/influence the status of the features during runtime. FF4j has a web console that you can deploy to view/influence the status of the features in an application:
By default, we'll deploy with only the legacy feature enabled. That is, by default we should see no change in the code execution paths and service behavior. We can then canary this deployment and use the feature flags to enable BOTH the legacy code path as well as the new path that calls our new
Orders service. For some services, we may not need to pay any more attention than just enabling the second code path. But for something that changes state, we'll need a way to signal this is a "test" or "synthetic" transaction. In our case, when we have BOTH the legacy and new code path enabled at the same time, we'll mark the messages sent to the
Orders service as "synthetic." This gives a hint to the
Orders service that we should just process it as a normal request, but then discard or rollback the result. This is hugely valuable to get a sense of what the new code path is doing and give us a chance to compare to the old path (i.e., compare results, side effects, time/latency impact, etc). If we JUST enable the new code path and disable the old code path, we'll send live requests (without the synthetic indicator/flag).
Specifying Service Contracts
At this point, we should probably write the code to connect the monolith to the new
Orders service for booking and orders flows. Now's a good time for the monolith to express any requirements in terms of contract or data that it may care about when it calls the
Orders service. Of course, the
Orders service is an independent, autonomous service and promises to provide a certain set of functionalities/SLAs/SLOs, etc, but when we start building distributed systems it's important to understand assumptions about service interaction and make them explicit.
Typically we consider contracts from the point of view of the provider. In this case, we're looking at the problem from the consumer's point of view. What do the consumers actually use or value from a service provider? Can we provide this feedback to the provider so they can understand what's actually being used from their service and about what to take care when making changes to its service; i.e., we don't want to break existing compatibility. We're going to leverage the idea of consumer-driven contracts to help make assumptions explicit. We're going to use a project named Pact which is a language agnostic documentation format for specifying contracts between services (with an emphasis on consumer-driven contracts). I believe Pact was started a while back by the folks over at DiUS, a technology company in Australia.
The image above comes from the Pact documentation.
Let's look at an example from our backend service. We're going to create a consumer contract rule for our
backend-v2 application that outlines the expectations from the service provider (the
Orders service). When we issue a
POST HTTP request to
/rest/bookings then we can assert some expectations.
@Pact(provider="orders_service", consumer="test_synthetic_order")
public RequestResponsePact createFragment(PactDslWithProvider builder) {
RequestResponsePact pact = builder
.given("available shows")
.uponReceiving("booking request")
.matchHeader("Content-Type", "application/json")
return pact;
When we call the provider service and pass in a particular body, we expect an HTTP
200 and a response that matches our contract. Let's take a look. First, here's how we specify the booking request body:
private DslPart bookingRequestBody(){
PactDslJsonBody body = new PactDslJsonBody();
.integerType("performance", 1)
.booleanType("synthetic", true)
.stringType("email", "firstname.lastname@example.com")
.minArrayLike("ticketRequests", 1)
.integerType("ticketPrice", 1)
return body;
Pact-jvm allows us to hook into our favorite testing framework (JUnit in this case) with the pact-jvm-junit modules. If we're using Arquillian, which you should be, for component and integration tests, we can hook Pact into our Arquillian tests with Arquillian Algeron. Algeron extends Pact by making it easy to use from Arquillian tests and also adds functionality that you'd have to otherwise build out yourself (and is crucial for CI/CD pipelines): the ability to automatically publish contracts to a contract broker and pull down contracts from a broker when testing. I highly recommend you take a look at Arquillian and Arquillian Algeron for doing consumer-contract testing for your Java applications.
We can create the
PactDslJsonBody fragments and just use "wildcard" or "pass anything in this field" semantics. For example,
body.integerType("attr_name", default_value) lets us specify that "there will be an attribute named X with a default value".. if we leave the default value parameter out, then the value can really be anything. In this snippet, we're just specifying the structure of the request. Note, we specify an attribute named
synthetic and for requests where this property is
true, we'll expect a response that has a certain structure.
And here's where we declare our consumer contract (the response):
private DslPart syntheticBookingResponseBody() {
PactDslJsonBody body = new PactDslJsonBody();
.booleanType("synthetic", true);
return body;
This is a pretty simple example: for this test, we expect that the response will have an attribute
synthetic: true. This is important because when we send synthetic bookings, we want to make sure the
Orders service acknowledges this indeed was treated as a synthetic request. If we run this test, and it completes successfully, we end up with this Pact contract in our target build directory (in my case it goes into
"provider": {
"name": "orders_service"
"consumer": {
"name": "test_synthetic_order"
"interactions": [
"description": "booking request",
"request": {
"method": "POST",
"path": "/rest/bookings",
"headers": {
"Content-Type": "application/json"
"body": {
"synthetic": true,
"performance": 1,
"ticketRequests": [
"quantity": 100,
"ticketPrice": 1
"email": "firstname.lastname@example.com"
"matchingRules": {
"header": {
"Content-Type": {
"matchers": [
"match": "regex",
"regex": "application/json"
"combine": "AND"
"body": {
"$.performance": {
"matchers": [
"match": "integer"
"combine": "AND"
"$.synthetic": {
"matchers": [
"match": "type"
"combine": "AND"
"$.email": {
"matchers": [
"match": "type"
"combine": "AND"
"$.ticketRequests": {
"matchers": [
"match": "type",
"min": 1
"combine": "AND"
"$.ticketRequests[*].ticketPrice": {
"matchers": [
"match": "integer"
"combine": "AND"
"$.ticketRequests[*].quantity": {
"matchers": [
"match": "integer"
"combine": "AND"
"path": {
"generators": {
"body": {
"$.ticketRequests[*].quantity": {
"type": "RandomInt",
"min": 0,
"max": 2147483647
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset=UTF-8"
"body": {
"synthetic": true
"matchingRules": {
"body": {
"$.synthetic": {
"matchers": [
"match": "type"
"combine": "AND"
"providerStates": [
"name": "available shows"
"metadata": {
"pact-specification": {
"version": "3.0.0"
"pact-jvm": {
"version": ""
From here we can put our contract into Git, a Contract Broker, or onto a shared file system. On the provider side (
Orders service) we can create a component test that verifies that the provider service does, in fact, fulfill the expectations in the consumer contract. Note, you could have many consumer contracts and we could test against all of them (especially if we make changes to the provider service - we can do an impact test to see what downstream users of our service may be impacted).
public class ConsumerContractTest {
private static ConfigurableApplicationContext applicationContext;
public final Target target = new HttpTarget(8080);
public static void startSpring() {
applicationContext = SpringApplication.run(Application.class);
@State("available shows")
public void testDefaultState() {
Note in this simple example, we're pulling the contracts from a folder on the file system under
Once we have our consumer-driven contract testing into place, we can more comfortably make changes to our service. See the examples for the backend-v2 service as well as the provider Orders service for working examples of this.
Canary/Rolling Release to New Service
Revisiting Considerations
- We can identify cohort groups and send live transaction traffic to our new microservice.
- We still need the direct database connection to the monolith because there will be a period of time where transactions will still be going to both code paths.
- Once we've moved all traffic over to our microservice, we should be in position to retire the old functionality.
- Note that once we're sending live traffic over to the new service, we have to consider the fact a rollback to the old code path will involve some difficulty and coordination.
Another important part of this scenario is that we need a way to just send a fraction of traffic through this new deployment that has the feature flags. We can use Istio to finely control exactly which backend gets called. For example, we've had
backend-v1 deployed which is fully released and is taking the production load. When we deploy
backend-v2 which has the feature flags controlling our new code path, we can canary that release with Istio similarly to how we did in the previous post. We can just send 1% of the traffic and slowly increase (5%, 25% etc) and observe the effect. We can also toggle the features so both legacy code paths and new code paths are enabled. This is a very poweful technique that allows us to significantly drive down the risk of our changes and our migration to a microservice architecture. Here's an example Istio route-rule that does that for us:
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
name: backend-v2
name: backend
precedence: 20
- labels:
version: v1
weight: 99
- labels:
version: v2
weight: 1
Some things to note: at this point, we may have both legacy and new-code paths enabled with the new
Orders service taking synthetic transactions. The canary described so far would be applied to 1% of traffic regardless of who they are. It may be useful to just release to internal users or a small segment of outside users first and actually send them through the live
Orders service (ie, non-synthetic traffic). With a combination of surgical routing based on user and FF4j configuration grouping users into cohorts, we can enable the full code path to the new
Orders service (live traffic, non-synthetic transactional workload). The key to this, however, is once a user has been directed to the live code path for
Orders they should always be sent that way for future calls. This is because once an order is placed with the new service, it will not be seen in the monolith's database. All queries/updates to that order for that user should always go through the new service now.
At this point, we can observe the traffic patterns/service behavior and make determinations to increase the release aperture. Eventually, we get to 100% traffic going to the new service.
What to do about the data not being in the monolith? You may opt to do nothing - the new
Orders service is now the rightful owner of the Orders/Booking logic+data. If you feel you need some integration between the monolith for those new Orders, you could opt to publish events from your new
Orders service with the order details. The monolith could then capture those events and store them in the monolith database. Other services could also listen for these events and react to them. The event publishing mechanism would be useful.
Again, this blog post has gotten too long! There are two sections left "Offline data ETL/migration" and "Disconnect/decouple the data stores." I want to give those sections proper treatment so I'll have to end here and make that Part IV! Part V will be the webcast/video/demo showing all of this working.
Published at DZone with permission of Christian Posta, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
What ChatGPT Needs Is Context
Integrating AWS With Salesforce Using Terraform
Avoiding Pitfalls With Java Optional: Common Mistakes and How To Fix Them [Video]
RBAC With API Gateway and Open Policy Agent (OPA)


text:
Reflection for North Balwyn Uniting Church
The Third Sunday of Easter, 1st of May, 2022
John 21:1-19
Acts 9:1-20
Do you ever find yourself lying awake at night in a cold sweat, wishing that you had said or done something differently? Have you ever said too much in anger or fear, and attacked someone with words that bite? Have you ever said too little in pride or obstinacy, and so let hurt linger or a division fester? Have you done the wrong thing, or failed to do the right thing? If so, I invite you to think of Peter, the rock on whom Jesus built the Christian church.
Peter is quite possibly the most encouraging biblical role model we could have as Christians. The gospels tell us stories of people who met Jesus, repented, and changed their lives around: tax collectors and prostitutes; the Samaritan woman at the well and the short-statured Zacchaeus. But no one committed to Jesus as completely, betrayed him so utterly, and was forgiven so abundantly as the Apostle Peter.
In today's reading from the Gospel according to John we find that despite the wonders of the empty tomb and the locked room, a small group of Jesus' disciples has gone back to where their life with Jesus started, in Galilee. 'After these things', after the crucifixion and resurrection, after Jesus had appeared in the garden to Mary Magdalene, after he had entered a locked room to show himself to the disciples not once but twice, they have left Jerusalem and returned to the job from which Jesus called them. Simon Peter now says, 'I am going fishing' and the other disciples reply, 'We will go with you.' This anti-climax may have been what the disciples had to do to stay sane. Jesus, their leader and teacher, had been betrayed, imprisoned, tortured and executed – bad enough for his shell-shocked followers. But then he had returned, and overthrown absolutely everything they had known about the world. The resurrection of Jesus must have been a source of extraordinary joy for them, but it would also have been utterly terrifying. In a natural and predictable response, the disciples seek comfort by returning to their roots and to what they know best.
However, they catch no fish. It is not until morning, when an unknown figure on the shore tells them to cast their nets on the right side, that any fish appear. Then there are so many in the net that it cannot be brought aboard. It seems to have been that unnamed disciple whom Jesus loved who first realises what this means, but it is Peter who leaps overboard to swim to Jesus.
Peter had never heard the phrase 'look before you leap'. In Matthew's gospel we are told that when Jesus stilled a storm while walking on the water, Peter responded by saying: 'Lord, if it is you, command me to come to you on the water.' Jesus answered, 'Come,' and so Peter did. But he got scared when he noticed the strong wind and began to sink, crying, 'Lord, save me!' Jesus, of course, did save him and then rebuked him, asking: 'You of little faith, why did you doubt?' (Matthew 14:28-31) Only Peter had the courage, the faith, or maybe the audacity to go to Jesus over the water, but he had not thought through what he was doing, and he soon found himself in trouble. In the same way, it was Peter who leapt in where angels might fear to tread at the Transfiguration, when Jesus' identity as God's son was revealed. The other two disciples present, James and John, remained silent, but Peter blurted out the first thing in his head: 'Lord, it is good for us to be here; if you wish, I will make three dwellings here, one for you, one for Moses, and one for Elijah.' (Matthew 17:4) Luke tells us that Peter did not know what he was saying (Luke 9:33); Mark says that that was because Peter was terrified. (Mark 9:6) It was another occasion when Peter was just a little too quick to leap in.
The most memorable and dreadful occasion when Peter leapt without looking was when he assured Jesus at the Last Supper that he would lay down his life for Jesus, and Jesus foretold that instead Peter would deny him three times. (John 13:37-38) Before the cock crowed the next morning, Peter had done exactly that. By the charcoal fire in the courtyard of the high priest, Peter three times denied that he was one of Jesus' followers.
But Jesus had not spoken to Peter about his betrayal in his previous two resurrection appearances, and he does not mention it now. Without a word about the night of Jesus' betrayal being spoken, this breakfast on the beach is a scene of repentance and forgiveness. Once again, by a charcoal fire, Peter is asked a question three times: 'Simon son of John, do you love me more than these?' Peter has learnt a little. Rather than agreeing that, yes, he loves Jesus more than the other breakfasting disciples do, he says twice: 'Yes, Lord; you know that I love you' and the third time: 'Lord, you know everything; you know that I love you.' The man who boasted that even if everyone else deserted Jesus he would never desert him, now simply leaves it to Jesus to read his heart. In this exchange Peter is offered and accepts forgiveness. His three denials have been replaced by three declarations of love.
Peter is not only forgiven, he is also recommissioned. In response to each of Peter's declarations of love, Jesus commands him to do something: 'Feed my lambs'; 'Tend my sheep'; 'Feed my sheep'. There is no half-heartedness or limitation about Peter's forgiveness and reintegration into the community. Peter is called to serve the sheep of Jesus the good shepherd, even to the point of laying down his life for the sheep, as Jesus himself did. The very end of this encounter is Jesus' renewed command to Peter: 'Follow me.'
Every week we pray here together 'forgive us our sins' and we pray in absolute confidence because of stories like today's, in which we see God's forgiveness acted out in Jesus. Every week I remind us that our sins are forgiven. Do we believe it? Can we accept God's forgiveness, love, and invitation to us to try again when we act like Peter? Are we able to celebrate God's love and grace, no matter what we have done, no matter how much we might have failed? Are we able to walk in the footsteps of Peter?
When we have been sinned against, can we forgive with the wholeheartedness of Jesus? Can we pray the second part of the petition, 'as we forgive those who sin against us'? The church obviously remembered Peter's betrayal of Jesus. It was recorded in all four gospels. No one pretended that it had never happened. But it did not prevent the early Christians from following Peter's leadership. They knew that Peter had been forgiven by Jesus, and so that was how they responded to him. Bill Loader writes of the Peter we see in today's story:
Peter is not disowned. Peter is legendary. His rehabilitation is a celebration of divine grace. He also symbolises leadership, the shepherd appointed by the true shepherd, to do as he did, to care for the sheep. There could be no arrogance here, no lofty superiority, no graceless dogmatism. Instead, a frail human person brought again to his feet, enriched with stories of Jesus, and brought to life and leadership by God's generosity. Such is the image and the possibility.
Peter had not been forever damned by his worst moment.
Such forgiveness not only takes grace, it also takes courage. Think about poor Ananias, commanded by the Lord to seek out the chief persecutor of the saints. Understandably his initial response is to imply that this is a bad idea. But when told by the Lord that Saul is his instrument, Ananias not only goes to heal him, he addresses him as 'Brother'. Ananias, too, is part of a community that does not hold their past against those whom God has called, instead seeing them as people made new by God's forgiveness. Can that be our community, too?
There is a lovely line in a poem called A Vision of Piers Plowman, written in about 1400 by a man called William Langland: 'And all the wickedness in this world that man might work or think/Is no more to the mercy of God than a live coal in the sea.' This is what this epilogue to the Gospel according to John tells us; no human crime, sin or failing can outweigh the graciousness of God. Simon the denier and Saul the persecutor were forgiven and entrusted with ministry. We too, like Peter and Paul, are forgiven and entrusted with ministry. If we ever do find ourselves lying awake at night, lamenting our past failings, we can tell ourselves firmly that God has already forgiven us. Which of course means that we too can forgive others. Thanks be to God. Amen.


text:
Wally's 24-Metre WHY200 Ups the Space and Comfort
Yachts have to work under certain constraints, so when a new yacht claims to offer 50 per cent more living space than traditional yachts of the same length, you might expect such a statement to be met with a fair bit of scepticism, but in the case of the Wally WHY200, that disbelief is misplaced. Measuring 200 gross tons and registering under 24 metres, the WHY200 offers all the speed advantages of a semi-displacement yacht and all the space of a larger vessel.
You'll also like:
Hermes Speedster E Electric Dayboat Reimagines the 1959 Porsche 356
USD$700 Million Miami Concept Yacht Packs in a Lot
The Seakart 335 Could Be a Jet Ski, or a Yacht Tender
Laurent Gyles is responsible for the naval architecture of the WHY200 and under his creativity, the WHY200 uses an innovative full-wide-body design that creates over 200 square meters of indoor living space. What's more, the yacht features an additional 144 square metres of exterior deck space. The main deck is wrapped in glass, creating a sensation that makes the owner's suite, which is located at the bow, to a new experiential level where passengers can feel more in tune with the sea they are travelling on.
The yacht accommodates eight guests in four cabins, with five crew members in three cabins. Aside from the living accommodations, the yacht also features two wings that fold out to expand the beach club area, providing access to the sun on three sides. Two garages are also hidden away on the yacht to provide storage for toys and more.
As the WHY200 is capable of both full and semi-displacement cruising, the vessel can achieve the rapid planning of smaller yachts without sacrificing the extra volume of larger, but slower yachts. Powered by four Volvo Penta D13 PIDS 1050 800 mhp engines, the WHY200 can achieve a 20-knot maximum speed with a cruising range of 410 nm.
The Wally WHY200 is set to debut at the Ferretti Group Private Preview in Monaco to be held September 2021. And when it does debut, no doubt it will cause a ripple effect of other shipyards trying to repeat its amazing feat of offering more space than thought possible.
You'll also like:
Hermes Speedster E Electric Dayboat Reimagines the 1959 Porsche 356
Watch the Titanic Sink with CGI
Luxury on the High Seas – Top 7 Wooden Boats


text:
Potentiostats - Galvanostats
- Standard ‣ Basic devices
- Standard ‣ High current devices
- Standard ‣ High voltage devices
- Standard ‣ Impedance devices
- Standard ‣ BI potentiostat
- Modular devices
- Portable devices
The PGU 20V-2A is the greater brother of the PGU 10V-1A. It has twice the modulation voltage and twice the current. The lowest range amounts to 100µA that is equivalent to a resolution of 10nA=1mV.
The PGU 20V-2A-E is in the performance data equal to the PGU 20V-2A. Nevertheless it has two more measurement ranges with the result that the lowest range amounts to 1µA that is equivalent to a resolution of 100pA=1mV.
The PGU 10V-1A is a cheap laboratory device. As solid constructed potentiostat / galvanostat it performs a variety of standard experiments. The modulation voltage amounts to approximately ±13V, the polarization voltage ±3V with the integrated nominal voltage generators and ±10V with interface. The maximum measureable current amounts to 1000mA, the lowest current range is 10µA that is equivalent to a resolution of 1nA=1mV. The device can be manually used by the integrated instruments, the inputs and outputs can be connected to external measuring instruments or an interface is integated. With interface and our software EcmWin the most common standard methods like OCP measurement, hold experiment, scan, cycle and pulse are available.
The PGU 10V-1A-E is basically like the PGU 10V-1A. Nevertheless it has two more measurement ranges with the result that the lowest range amounts to 100nA that is equivalent to a resolution of 10pA=1mV.
The PGU 100-PCR is our potentiostat / galvanostat for standard measurements and for the measurement of the electrochemical noise. The basic construction is equivalent to the PGU 10V-100mA. Two more modules on the right side of the device extend the features for the measurement of the electrochemical potential and current noise. These modules provide several special features like AC-interlinking, switchable filter frequencies and amplification. Meanwhile we have also equipped other devices of the PGU-series with these noise modules with the result that the measurement of the electrochemical noise is not limited anymore to this type of device.
The PGU-10/20A units offer a wide range of applications, typical in electroplating (cathodic dip coating), anodizing of aluminium and battery research.
The device supplies a compliance voltage of ±12 V at a current of ±10/±20 A to the counter electrode. The polarization voltage is ±10 V (200/400 W). With 8 measuring ranges from 20 A to 10 µA, the user gets also reasonable values at lower currents.
Datasheet (PGU 10 / 20A)
The PGU 30V-20A is a little powerpackage. The design and the ease of use is like all PGU standard devices. The special feature is inside. With a modulation current of ±35V, a polarization voltage of ±30V and a maximum current of 20A (at 30V) here is a considerably power available. 6 current ranges provide enough resolution for the lower mA-range.
The PGU 100V-2A is our new 100V standard device. With an output voltage of ±140V, a polarization voltage of ±100V and 8 current ranges from 2000mA to 1µA numerous experiments that require higher voltages can be performed.
The PGU 100V-10A is the big brother of our 100V standard device. Particularly for galvanic experiments or for anodization both high voltages and high currents are needed. Due to the high performance of this device it is equipped with a programmable power supply. Thereby, no excessive power dissipation must be dissipated as heat. However, this means a limitation of the control rate / speed. This device is not suitable for pulse experiments with rise times in the ms range.
The PGU 200 V is a high voltage potentiostat/galvanostat. For applications, where the customer needs a higher compliance voltage we designed the PGU 200 V with a compliance voltage of ±220 V and a polarisation voltage of ±200 V. The maximum current range is 2 A.
The PGU 400 V is a high voltage potentiostat/galvanostat. For applications, where the customer needs a higher compliance voltage than 200 V we designed the PGU 400 V with a compliance voltage of ±420 V and a polarisation voltage of ±400 V. The maximum current range is 1 A.
This potentiostat / galvanostat can be used for standard and impedance measurements. This device has a signal generator for frequencies from 100µH up to 100kHz. A fast measuring module inside allows frequency measurement up to 100kHz as well. The integrated offset adjustment for current and voltage allows efficient amplification of lowest signals down to the lowest frequency range. Due to a specifically approximation procedure very low current signals can be reliable measured at lower fA-range with the result that impedances up to 200GOhms (where applicable even higher) are measurable. Furthermore all available standard methods in our software can be performed with the result that this device is universal.
The retrieved values of the impedance measurement are provided with frequency, real and imaginary part. To analyze the data we recommend Solatrons® software ZView™.
PGU IMP-Micro
BI-potentiostat for measurements on rotating ring-disc electrodes. Recently requested out of the fields sensor and medical technology.
Output voltage max. ±11V and current of max. ±1000mA. It has 11 current ranges from 1000mA to 100pA with a resolution of 10fA=1mV at the lowest range. Current and voltage displays, two internal nominal voltage generators und two nominal voltage inputs. Integrated interface.
With this device IPS reacts on increased demand of the market for BI-potentiostats that can reliable measure currents from the lower pA-ranges.
Low noise potentiostat / galvanostat to control lowest currents
Digital voltmeter for potential measurement U-ring / U-disc
Internal nominal voltage generators and inputs for external nominal voltage (for disc and ring)
Current ranges ring and disc 1000mA to 100pA
(max. disc only 1000mA; max. disc and ring 1000mA / 750mA)
Working electrode virtually grounded
- Overload display
The devices of the PGU-MOD Series are built for pure computer operation. They contain neither display modules nor manual control elements. The design is considerably smaller than other standard PGU devices. The picture above shows a single device, the following picture a four-channel device. With a current range
of 100nA to 200mA or 100mA to 10nA, most applications are processed. Interface and our software EcmWin are included in the product contents.
When multiple channel devices are connected to a computer, EcmWIn is started several times, so that each module can be operated separately and with full range of functions.
The PGU-stack is more compact, smaller and stackable. Single or four devices in a standard 19" table unit with three rack units. Or 8 devices at 6 RUs or correspondingly more.
Connection to the computer via ethernet, equipped with our new interface with 24-bit A/D converters and 26-bit D/A converter (330 nV increment of the scanner). Parallel operation with multiple start of our EcmWin software feasible. In principle arbitrary, limited only by the capacity of the connected computer system.
More details in the appropriate datasheet or get in touch with us.
The PGU-1A-OEM is a more powerful model of the PGU-MOD-series. With a maximum current of ±1A measurement tasks that require a higher current can be processed.
It is built in a 42HP case, compared to the 100/200mA variant with its 28HP case. If additional potentiostats shall be accommodated in the same housing, we use a twice as high (6U) standard 84HP wide table top case. The following picture shows the 2A version.
Especially at request of a customer, we equipped the 2A model with additional displays for potential and current. The devices are used for long term measurement and even with the monitor of the computer in sleep mode, the potential and current can be read off quickly.
This instrument equipped version approved well in practice, so we will maintain it.
The P-M 100 is a purely manually operated potentiostat. It is mainly dimensioned for hold experiments. The purpose is for example to analyze the cathodic disponding. According to requirements the device can be assembled with only one but also with up to 4 modules. The modulation current amounts to approximately ±12V, the current can be displayed with two ranges with 20mA and 100mA, the maximum current amounts to approximately 180mA. The device has digital instruments for current and voltage. An internal nominal voltage generator amounts to ±2V. No in- and output computer connections.
The PguTouch is our latest Potentiostat/Galvanostat in a completely new design. A modern touch display substitutes the previous instruments and manual control elements.
The core of the device is a powerful yet low-power ARM-Cortex microcontroller, the ideal prerequisite for portable battery operation.
A 4-channel 24-bit analog-to-digital converter for data acquisition and a scanner with a 26-bit digital-to-analog converter give the device the characteristics of a high-quality laboratory instrument. The built-in SD card with 2 GB memory allows the storage of a considerable amount of data. The Ethernet interface is used to read out the stored data as well as for convenient operation of the device on a PC with our EcmWin software. This potentiostat/galvanostat can be used as a laboratory measuring station for more complex tasks as well as a field device for predefined measurement routines.By using a portable computer, more complex methods can be performed in the field.
The PguEducation is the new potentiostat/galvanostat for schooling persons who like to discover the world of electrochemical measurements and want to make their first experiences with this subject. Also intermediate learners can do experiments and measurements with this tiny unit.
When connecting the PguEducation with a computer running our EcmWin Software it behaves like a normal potentiostat. Performing OCP, Constant value, Scan and Pulse measurements are supported. EIS or ECN are not feasible with this device.A maximal current of 20mA some realistic measurements can be carried out. In cases a higher current is required you can also reduce the sample size to be inside of the possible current. With 6 ranges, the lowest current range is 1 µA. It is obvious that the resolution and the accuracy of a professional device cannot be reached in this range. Nevertheless also measurement can be done in this range. With a compliance voltage of +- 10V and a polarization range of +-5V, the device is ideal for teaching and training. Moreover it is able to introduce in the typical nature of electrochemical measurements.


text:
(Updated August 2020)
IMPORTANT!!! I have moved to Korea since I created this blog, and I have discovered that many videos – especially ones that are uploaded by fans with English subs – have been blocked on Korean YouTube and other websites. So unfortunately, I cannot watch most of these videos or verify the links anymore. This also means I cannot add as many videos as before because they simply are not available in my region. I'm sorry if you click on something and it's no longer there, but there's not really any way for me to check! – Katherine
Approximate Promotion Period: March and April 2015
NOTE: There are not a lot of variety show appearance for GFriend during this time. I imagine this is because they were rookies from a relatively small company and didn't have a lot of recognition yet.
MV Bank Stardust 2
Weekly Idol
(주간 아이돌)
MBC Every1
Episode 194
A popular variety show that shines the spotlight on one or more idol groups every episode. There are well-known corners that often involve dance challenges or aegyo, but the guests always play games or complete missions to earn prizes. GFriend appeared on a rookie special with Berry Good.
Weekly Idol fansubbed episodes are blocked in Korea, so I can only link whatever subbed clips I can find on YouTube at this point. While this clip of GFriend and Berry Good playing Random Play Dance isn't subbed, I don't think you really need subtitles to understand what's going on.
GFriend! Look After Our Dog!
12 episodes
A reality show that features the girls petsitting and fulfilling various missions while divided into teams. I think this aired between their "Glass Bead" and "Me Gustas Tu" promotions.
Episode 1
Episode 3
Episode 5
Episode 7
Episode 9
Episode 11
Episode 2
Episode 4
Episode 6
Episode 8
Episode 10
Episode 12
SOURCES: YouTube*, Dailymotion*, KBS, MBC Every1, skyTV
*Weekly Idol clip uploaded by ALL THE K-POP. The first episode listed here is subbed by GFRIEND United, while the remaining episodes are on the page for GFSQUAD Subs.
**MV Bank Stardust 2 episode uploaded and subbed by user GFRIEND United.


text:
Collecting, cleaning, displaying, researching, and appreciating TRIVETS and related go-withs!
This rare sad iron stand (7 x 5″ with 3 feet; 1561 on reverse) sold on eBay for $155.50 on 2/4/12 after 16 bids. What's so unusual about it? Well, for starters, it was an advertising giveaway from the Ringen Stove Company of St. Louis, a division of the American Stove Company and maker of the Quick Meal line of wood burning and gas stoves.
According to the information below the stand probably dates to the turn of the century. As quoted from Wikipedia:
"In the 1850s, an immigrant to the United States John Ringen began a tinshop in St. Louis, Missouri. His business prospered and in 1870, he took in a partner, George August Kahle, who had immigrated to America in 1867. The business sold housewares, washing machines and cooking stoves they called "Quick Meals". In 1881, George Kahle persuaded his brothers-in-law, Charles and Louis Stockstrom to set up a shop to make stoves. These four principals then organized two corporations, the Ringen Stove Company and the Quick Meal Stove Company."
"Quick Meal manufactured the stoves with Ringen Stove handling the entire output of Quick Meal's production. The phenomenal growth of these two companies during the 1880s and 1890s led to the merger of eight other stove companies in St. Louis, Chicago and Cleveland in 1901 to form the American Stove Company."
To learn about actually using a Quick Meal stove, see Industrialist Cuisine: Slow Cooking on a Quick Meal from the blog Jet City Gastrophysics.
PS: See also my blog post on the very similar Clark Jewel advertising stand.
Thanks to the following information received from fellow PITCA member Dennis McDonald, we now learn that the Quick Meal stand was actually the companion stand to the gas iron shown below, and dates to 1914-1915.
I think I found the gas iron that is married to this American Stove Co./Quick Meal/Ringen trivet. I didn't know the iron existed until I saw one sold on eBay in September 2014 ….. it sold for $165, just $10 more than the trivet; see iron pic attached. I've also found the G. B. Child & C. Munzner Sad Iron Patent No. 1,143,507 which was filed 7/27/1914 and issued 6/15/1915.
A stove lid lifter was used to lift the circular openings on the top of a cast iron stove. This 8″ long antique nickel-plated cast iron stove lid lifter is in excellent condition. On face: QUICK MEAL. On reverse: D62. Circa late 1800s – early 1900s.


text:
2006036 - Coloured washbowl
Dimensions product:
Height :32,00 cm / 12,60 inches
Width :53,00 cm / 20,87 inches
Depth :51,00 cm / 20,08 inches
Dimensions shipping carton:
Height :37,00 cm / 14,57 inches
Width :56,00 cm / 22,05 inches
Depth :58,00 cm / 22,83 inches
Packaging weight: 12,40 kg / 27,28 lbs
Complete including:
-Water tap self-closing 1/2"
-Stainless steel washbowl ø 41
-Stainless steel adapter ring
-Siphon PVC
-Flexible water supply 1/2" - compression fitting ø10 -Mounting screws.
-Attention! Automatic mixing or water (pressure) control not included.
Material specification:
This product is made of 5 to 6mm thick polyester, and is coated with a matt varnish. With this coating the product is resistant against all kinds of cleaning materials. We use the same coating on our products as been used in the car industry, so you can clean our products just like a car. (do not use an abrasive sponge) Also you can clean our products with water pressure.
Important tips for installation:
- Let your installation be performed by a specialised installation company.
- Normal height of the top side of the washbowl, for children between 3 and 9 years old is 50 to 60 cm / 19,69 to 23,62 inches, measured from the floor. c to c of the drain which leaves the wall is: ±33 cm / 12,99 inches high
- Screw the product securely to the wall with a rubber ring for the screw. This prevents the product may crack if you tighten it too hard.
- In case you bought a mirror in combination with this washbowl please watch out. In most cases the washbowl cannot support the mirror because the water tap doesn't fit underneath. Hold 10cm / 3,94 inches space between washbowl and mirror. (see picture)
- Don't tighten the screw (which is used to secure the drain plug for installation of the siphon) too hard because otherwise the stainless steel washbowl can bow.
- After mounting the product, put some putty around the product so water and dirt gets no chance to get behind the product, also for extra reinforcement.
- Put some putty around the stainless steel washbowl so water and dirt gets no chance to get behind the product.
- We advice you to use a silicon putty for gluing around the product and use a panel and construction adhesive for gluing the stainless steel washbowl in the product.
Assembly procedure:
- Mount the self-closing water tap in the appropriate hole, fitting should be done from the bottom side. Take care that the black rubber ring is mounted between the tap and the product.
- Mount the connecting hose secure to the tap at the bottom side.
- Glue the drain plug to the stainless steel washbowl with appropriate putty.
- Hold the adapter ring against the bottom side of the stainless steel washbowl.
- Mount the siphon to the bottom side of the adapter ring.
- Mount the screw of the siphon from above, trough the drain plug to secure the ring between the drain plug and the siphon.
- Hold the product to the wall so you can mark the 2 mounting holes on the wall.
- Drill the marked holes.
- Mount the plugs in the wall.
- Glue the stainless steel washbowl with all accessories secure in the product.
- Connect the flexible water supply and hose to the wall.
- Mount the product to the wall with the colored mounting screws.
- After mounting the product, put some putty around the product so water and dirt gets no chance to get behind the product.


text:
LOWELL, MI-- While most of us may be familiar with the White Pine or Fred Meijer Trail, I wonder how many of us realize there is a national trail that spans seven states and 4,600 miles? It's called the North Country National Scenic Trail and is headquartered in Lowell.
The trail was designated in 1980 by congress and begins in upstate New York on Lake Champlain. The walking and hiking trail runs through Pennsylvania, Ohio, directly through West Michigan and Lowell, north through the Manistee forest, and to the Mackinac Bridge where it crosses in to Michigan's Upper Peninsula and goes west through Wisconsin, Minnesota, and eventually in to North Dakota. It's one of 11 national scenic trails across the country and is the longest of all of them.
It took several thousand volunteers many years to make and connect the trails through all seven states...and it's a work still in progress according to North Country Trail Association Executive Director Bruce Matthews. In fact, there's still about 1800 miles to build and protect and volunteers are always being sought. The trail is administered by the National Parks system and what makes it unique is that it tells the collective story of American peoples both struggling to live with a harsh climate and landscape as well as experiencing the joys of recreating in the great north woods of the United States. What's known or called the Red Plaid Nation!
"The North Country Trail is more of a primitive foot path. It's conducive to hiking. There are few places where bikes can go on it, but it's primarily a more natural experience through the woods and fields" says Matthews. In fact, a handful of folks have been known to pack up their house (on their back) and hit the trail in late winter, through summer, and late fall and conquer all 4,600 miles. Camping is allowed in several spots!
There really is some raw, beautiful scenery and countryside along the North Country National Scenic Trail...especially here in Michigan. It's a well-marked trail whose headquarters came to be here because of all the people involved and their vision in the 1970s and 80s. Their first office was actually located in White Cloud in Newaygo County, but was eventually moved to Lowell in 2001 and there it remains. Murals were painted on the side of their Lowell building by Lowell high school students depicting the various seasons along the trail.
If you'd like more information on the North Country National Scenic Trail you can visit their local website here. The National Parks Service trail website can be found here. What's the best part of this trail? It's absolutely FREE. You may enter or exit the trail anywhere at any point!


text: Established in the 2018's, the Forensic Science Laboratory is an autonomous body under the aegis of the Ministry of Justice Office, Home Affairs Division. The Forensic Science Laboratory is the sole provider of forensic and advisory service to law enforcement agencies in Rwanda and is fast becoming an increasingly prominent forensic service player provider in the region. Our experts depone in all courts of law.


text:
I talk a lot about #growyourown, urban farming, and homesteading. But there's another part of our @HomeCrazzyHome that is just as important. That is working in harmony with PachaMama to foster a habitat which fosters the life of her otehr creations as well.
After our first year here, I heard about the concept of re-wilding, allowing your yards to grow instead of those Pleasant Valley Sunday mowings.
Trust me, our posh upper-middle-class white only neighborhood is very much in keeping with that song. But Alan was happy for me to let the back garden go to wild. He did keep digging dandelions up the first year or two.
Even before we gave up on mowing, we had begun the process. That first spring @PanKwake discovered frog spawn in the grass. We learned through neighbors that a previous owner once had a frog pond. Then during one of those first mowings, I discovered the edge of it. Our first summer here digging it up became a family project. My son from America even helped shovel a tiny bit when he visited. By early fall, we had successfully unearthed it. Most of it remained intact. We need only line it. We bought water plants. That winter we discovered more spawn in it. We placed old logs from the basement and rocks all around it. The area around it became the first No-Mow zone.
But it is not just frogs. Bees, too, are welcome in our garden. That's one of the reasons why Alan gave up digging out those dandelions. They are the first food of spring for bees and other insects who are just waking. Of course, due to pesticide use, bee populations world wide are declining. But not at our @HomeCrazzyHome. In fact, we delayed work on the old carriage house at the back of the garden when white-tailed bumblebees took up residence in an old bird box on its side. Once last summer I counted a dozen bees in less than five minutes time. Of course, bees are great for my fruits and vegetables too. A true symbiosis.
It has been a bit more challenging to get Alan on plan with the front garden. I would turn it into a forest-community garden if I had my druthers. But it is teeny-tiny baby steps on that one. I have managed to stretch the time between those mowings. The result is that moss, clover, and a few other wildflowers are beginning to take over there too. I have sown more wildflower seeds and even he mentioned that the neighbors might have to cope as allowing lawns to return to meadows was becoming more popular. Give it a couple more years, I'll win him over.
But the biodiversity of flora and fauna in our back garden is astounding. The bees, frogs, and butterflies are joined by numerous varieties of birds. I like to imagine it as a bit of the Garden of Eden, Shangri-la, or Xanadu right in the middle of that Pleasant Valley of lies. I treasure it greatly and do my best to be a good custodian of it, not only for myself, but other creations as well.
Yesterday, we began our journey with a new young apprentice/helper. His first task was to take the new garden trimmer to the stone patio. I left the garden bit alone for the flora and fauna. I have my plant babies coming along to feed us and others. But my dream is to crave out a niche in the corner with a table and chair where I sit each morning with my cup of coffee and a tablet. A place where the beauty of creation overcomes the nastiness of hate and prejudice that have soiled her…and me.
@HomeCrazzyHome is my island, my oasis, my refuge from (Un)Pleasant Valley. May all of you find and steward yours.


text:
18K White Gold Diamond & Ruby Earrings, Item# DERP04809
Selected Specs
- {{spec}} : {{val}}
Sale Price:
Email This Item
Share information about this beautiful piece.
Tell A Loved One
Give them a hint about what you want.
About this item
Item Specifications
Need immediate assistance? Call (925) 344 8317
powered by Google


text:
Autonomous vehicles and robots are expanding in agriculture because of labor shortages and the need for more precise use of water, fertilizer, and pesticides. Measurement company Hexagon AB this week said that two of its brands, NovAtel and AutonomouStuff, have developed an autonomous positioning and sensing kit that was demonstrated in its research and development tractor.
Stockholm, Sweden-based Hexagon produces sensors, software, and autonomous systems to improve efficiency, productivity, and quality across applications and industries, including infrastructure, manufacturing, safety, and mobility. The company said it has about 20,000 employees in 50 countries and net sales of $4.4 billion.
Hexagon's Autonomy & Positioning division develops technology for autonomous vehicles, drones, and other systems on land, sea, and air. NovAtel designs, manufactures, and sells positioning technology that can be rapidly integrated for precision agriculture, said the company. AutonomouStuff provides R&D platforms, sensor fusion products, software, and engineering services for robots and autonomous systems in agriculture, construction, mining, and other off-road applications.
Positioning kit to aid autonomy development
Hexagon's Autonomy & Positioning division launched the kits that NovAtel and AutonomouStuff developed as part of its Smart Autonomous Mobility offering at CES 2020. With decades of expertise in Global Navigation Satellite System (GNSS) positioning, autonomy, and safety-critical applications, the brands created these systems with agricultural OEMs and robotic machinery manufacturers in mind.
As a demonstrator vehicle for Smart Autonomous Mobility, the autonomous tractor features object detection and classification, simultaneous relative localization and mapping, absolute positioning through GNSS technology, and localization sensor fusion. The tractor also incorporates safety features for situational and environmental awareness, as well as manual remote control when needed, said Hexagon. This platform validates how these capabilities can accelerate autonomous development, it added.
The positioning and sensing kits are optimized for autonomous agriculture applications, including products like the SMART7 antenna and autonomous capabilities through the NovAtel OEM7 driver powered by the Robot Operating System (ROS).
The kits also feature TerraStar GNSS Correction Services, ALIGN heading and relative positioning firmware, and SPAN GNSS+INS technology. Though designed for agriculture, the kits can integrate seamlessly into other off-road autonomy applications, Hexagon claimed.
Hexagon aims autonomy kit at agriculture
"These positioning and sensing kits provide developers with technology bringing assured positioning to autonomy in agriculture," explained Michael Martinez, agriculture segment manager at Hexagon-NovAtel. "Robotic machinery manufacturers or those experienced in autonomy may be unfamiliar with the unique challenges facing agriculture applications."
"Conversely, those experienced with agriculture may not have the expertise to integrate positioning and sensing products within autonomous solutions," he added. "We can help in both cases through these positioning and sensor kits, as demonstrated by our autonomous tractor."
The global market for agricultural robots will experience a compound annual growth rate (CAGR) of 34.5%, growing from $4.6 billion in 2020 to $20.3 billion by 2025, predicted Markets and Markets.
"We're excited to use this tractor as a platform to validate the human identification, obstacle detection, and enhanced environmental awareness that our sensing kits add to our assured positioning solutions in agriculture," said John Buszek, vice president of products and services at Hexagon-AutonomouStuff. "The sensing and positioning technologies we've integrated on this demonstration platform showcase the Smart Autonomous Mobility portfolio, which enables and accelerates the development of autonomy in agriculture applications from prototyping to production."
To learn more about Hexagon's agriculture autonomy capabilities, take a virtual tractor tour via its 3D interactive app or online.


text:
Good for you
AWARDED scholarships to attend Washington State University for the 1992-93 school year are Kecia Adkins, a graduate of Olympic High School, Tony Brooks, a graduate of South Kitsap and a transfer from Olympic College, and
Amy Haynes, a graduate of North Kitsap. Adkins, daughter of Rosemary and Doug Adkins of Bremerton, plans to study veterinary medicine and was a member of Students Against Drunk Driving. Brooks is the son of Barbara Brooks and Edward Brooks, both of Port Orchard. He plans to study history, was an honor student, and received an Associates Technical Arts degree. Haynes is the daughter of Susan and Michael Haynes of Suquamish. She plans to study premedicine, was in choir, and the National Honor Society, as well as a special education and Spanish tutor.
HONORED with Apple Awards by the South Kitsap School District for outstanding individual achievement or Keystone awards for organizational support of the district were the following volunteers and community organizations. Apple Award winners, the highest honor a school volunteer can receive, were: Marlene Butler, Burley-Glenwood; Deby Perez and Nancy Prante, East Port Orchard; Karen Furgeson, Hidden Creek; Linda Blust, John Sedgwick; Robert Schreiber and Nancy Wilder, Manchester; Bernie Boyd and Mary Hembd, Marcus Whitman; Leah Ann Odegard, Mullenix Ridge; Alana Grunenfelder, Olalla; Debie Garrett, Cherry Glover and Linda Fogelson, Orchard Heights; Becky Jull and Patti Orser, Sidney Glen; Laurie Sheridan, South Colby; Joan Snyder and Shari Willson, South Kitsap High School; and Claudia Horch, Sunnyslope. Apple Awards given for district-wide service went to Chief Virgil Fleming, Kitti Phillips, Roxann Christensen, Don Nelson, Chaplain Jack Roberts, and Gordon Young. Keystone Awards were presented to businesses and organizations that have demonstrated ongoing support for the schools. This year's awards went to: the Pacific Fleet Integrated Logistics Overhaul Team, Olympic Schwinn, Buck's A & W, Washington State Patrol (Glen Tyrell), Naval Supply Center-Puget Sound, USS John Marshall, Port Orchard Rotary Club, Kitsap Public Works, and Puget Sound Naval Shipyard.
WINNING $500 awards for having the highest numbers of volunteers and volunteer hours for the 1991-92 school year were Mullenix Ridge Elementary School and Marcus Whitman Junior High School. The high numbers were the result of a contest sponsored by the school board to stimulate more volunteerism in the schools. The second place winner was Mullenix Ridge while Manchester won third place for volunteer hours pledged. Awarded second place for total number of volunteer hours served went to Burley-Glenwood, while East Port Orchard won third place. South Kitsap schools received more than 2,500 days of volunteer time this year from 1979 volunteers.
EARNING a 4.0 GPA for the third trimester from Marcus Whitman Junior High School are the following students: seventh graders are, Crystal Ambler, Susan Cho, Erin Fletcher, Catherine Mioni, Lori Russo, and Nicolas Schlafer; eighth graders are, Celest Blair, Jana Burnett, Dave Davis, Deanna Deford, Jason Frazier, Vicente Garcia, Kristen Peterson, Coni Posey, Katie Reischman, and Livia Schonteich; and ninth graders are, Jason Brown, Jodi Davis, Lisa Hageman, Angela Hill, Tamarra Jeu, Selena Picinich, Amy Randall, Casey Selfridge, Dan Williams, and Steve Williams.
WINNING top awards in area parades recently was the South Kitsap School District's AllDistrict Junior High School Marching Band , under the direction of Jim Allen, music teacher at Marcus Whitman Junior High School . The band won first place in its division in the Port Townsend Rhododendron Festival Parade and in the Sequim Irrigation Festival Parade. Participation in the band is an extracurricular activity for selected students who are in either intermediate or advanced band at their respective junior high schools.
ACCEPTED for a nine-month internship with Operation Mobilization is Melanie Baldwin, a 1990 graduate of Central Kitsap High School. Baldwin, who will be working with Afghan Refugees in India and Pakistan, recently finished her sophomore year at Bethany College of Missions in Minnesota. She is the daughter of Steve and Barb Baldwin of Crosby and the granddaughter of City Councilman Morrie Dawkins.
ELECTED as Superintenent of Public Instruction for Evergreen State at Girls' State 1992 in Ellensburg recently was Tina Arciaga of Bremerton High School. The conference on American government was sponsored by the American Legion Auxiliary.
ATTENDING Utah State University's Third Annual Engineering State Program in Logan, Utah in June was Mikel Anderson , of Bremerton. He is the son of Leonard and Kathy Anderson and was sponsored by Novell. He has been involved in cross country, basketball, track, the International Friendship Club, and the National Honor Society.
RECEIVING Army Reserve National Scholar/Athlete Awards were the following local students: from King's West High School, John Phelps and Laura Johnson; from Bremerton High School, Brian Graff and Maiya Anderson; from Chimacum High School, Dennis Miller and Melanie Klatt; from Central Kitsap High School, James Manuguid and Christina Lake; from Olympic High School, Thad Reichley and Cari Munro; from South Kitsap High School, J. Chris Bock and Danielle M. Fessler; and from North Mason High School, Jason Terry and Deanna Hull.
NAMED to the Dean's List for spring quarter at Cedarville College in Cedarville, Ohio, was Dwight Kienzle, sophomore. He is the son of Mr. and Mrs. Tony Kienzle of Silverdale and a 1991 graduate of Central Kitsap High School.
RECEIVING her bachelor of arts degree in Asian studies from Carleton College in Northfield, Minn. recently was Kirsten Swingle. She is the daughter of Margaret Swingle of Bainbridge Island and Larry Swingle of Germany.
WINNING Western Washington University's 1992 Paul and Ruth Olscamp Outstanding Research Award recently was David C. Engebretson, associate professor of geology. He is the son of Ray and Josephine Engebretson of Bremerton.
COMPLETING a leadership training program with "Leadership Tomorrow" recently was Linda Zarek, Director of Resource Development at Olympic College. Zarek has been with Olympic College for two years.
AWARDED scholarships for the 1992-93 academic year at Western Washington University recently were Joseph E. Seymour, Jo Anderson, and Jessica Santos. Seymour, of Bremerton, is a transfer student from Olympic College, was awarded a $1000 President's Honor Scholarship. Anderson, holder of a 3.72 GPA and daughter of Lowell and Elizabeth Anderson of Bremerton, was awarded a $1200 Minority Achievement Program Scholarship. Santos, also awarded a $1,200 Minority Achievement Program Scholarship, is the daughter of Jacinto and Ramona Santos of Bremerton.
SELECTED to represent all Washington homecoming queens in the upcoming 12th Annual Selection of America's Homecoming Queen is Pauline Marie Monzon. She is the daughter of
Domingo and Marlene Monzon of Bremerton and a student of Olympic High School.
HONORED recently for their community service by Soroptimist International of Port Orchard were Lore Coe, Melody Sapp and Virginia Minor. Coe, of Coe Property Management, was named Club Woman of the Year; Sapp, executive director of the Port Orchard Chamber of Commerce, was named Woman of Distinction; and Minor, Port Orchard's Woman of the Year for 1991, received the Woman Helping Woman Award. The club, a professional and executive businesswomen's group, supports Helpline and provides a variety of community services throughout South Kitsap.
WINNING first place in their respective skills contest for Vocational Industrial Clubs of America (VICA) recently were the following local students. They were: Hal Williams, Skills Center senior and Discovery Program student from South Kitsap, whose mother is Toni Williams, and Matt Steuermann, motorcycle technician and a senior from South Kitsap, son of Mr. and Mrs. Michael Steuermann. James Moore , Bremerton High School junior and stepson of Dawn Moore and Brian George , junior from North Kitsap and son of Mr. and Mrs. Lyle George, both placed first in the Job Interview Contest.
PLACING third in the state were members of the Club Business Parliamentary Procedure Team (from Kitsap Peninsula Vocational Skills Center). They were: Mark Johnson, Stephanie Lee, Christine Lorance, Bill Walker, Bill Mangus, Joe Krecker, and Harry Rothford.
COMPETING in the FFA Forestry Skills Contest and earning ninth place in a field of over fifty participants was Mike Glass, a senior in forestry at the Skills Center. His parents are Mr. and Mrs. Phillip Glass.
RECEIVING the Entertainers Independent Association (EIA) Most Promising Artist and Songwriter Award for 1992 in Nashville recently was former Bremerton resident Ray Reeves. Now of Ocean Shores, Reeves won the award for his song entitled, "Should've Watched Those Signs.


text:
Workplaces have changed significantly over the past several months, with organizations opting to integrate the concept of virtual office spaces as a part of their day-to-day operations. Even as organizations are learning the skill of managing their virtual teams and offices in the most efficient manner, they are facing major challenges in building a strong workplace culture for this new virtual setup. This article should act as a guide for building workplace culture in virtual environments.
Virtual workspaces can be defined in the simplest terms as a digital environment where the employees of an organization meet, interact with one another to share information and perform tasks. Such employees are not physically co-located but are involved in the day-to-day activities of the organization and contribute to its business.
Employees, who are working remotely, need to be integrated with the organizational culture – ensuring the proper engagement and cultural integration of such employees becomes even more important for organizations.
It is a well-acknowledged fact that the culture of an organization plays a critical role in enhancing its success. While most organizations have managed to create a well-developed organizational culture in their physical workspaces, its integration into the newly developed virtual work environment is still a long journey.
There are a few key challenges faced by organizations to extend their culture into the digital work environment:
· Lack of proper and timely communication among the employees or even between the employees and their managers is one of the biggest challenges faced by organizations looking to develop a strong culture in virtual environments.
· Most organizations tend to use traditional culture-building initiatives while extending their work culture to virtual environments, without realizing that these initiatives might prove ineffective in digital workspaces.
· Cultural and ideological differences between participating employees are often difficult to overcome in a virtual environment and this can hinder the development of strong workplace culture.
· A majority of organizations lack competent leaders having the necessary skills required for managing remote employees in an efficient manner and hence are unable to covey the idea of strong virtual organizational culture in an effective manner.
The most important thing for organizations to understand is that their virtual teams basically need similar things to thrive as their physical teams. However, the key difference lies in how these things are provided to them. This fact can help them to pave the way for building a strong organizational culture for their virtual office space and the teams operating therein.
Discussed below are a few important guidelines that can prove helpful for organizations in this context:
1. Provide the Right Infrastructure
As is the case with physical teams, virtual employees also need to have access to the right infrastructure and tools to complete their tasks in a timely and efficient manner. Hence, it is important for organizations to ensure that the vital infrastructure requirements of their virtual teams are met in a satisfactory manner.
If the organizations are not able to provide material support to the employees, they might volunteer to offer financial compensation to the employees arranging the requisite technology and tools on their own.
2. Establish and Communicate Work Policies and Expectations
It is extremely important for organizations to clearly establish and communicate their work policies and expectations to their virtual teams. Organizations should make sure that these policies and expectations integrate the operating philosophies of the business.
The culture thus developed will reflect the corporate values of the organization and will assure the virtual teams of being an integral part of the organization.
3. Create a Virtual Culture Statement
Many times organizations fail to provide a clear virtual culture statement to their remote working teams since they believe that it does not make much of a difference. However, such a statement helps the virtual teams to associate their work environment with physical spaces, which can go a long way in keeping them engaged and motivated.
These statements might include a list of values and interests shared by the remote employees along with the details about how these interests and values will be nurtured by the organization.
4. Set Up an Events Calendar
Creating an events calendar detailing the time and venue of virtual meetings, recognition events, happy hours, brainstorming sessions, and other such programs is an important aspect of building a strong culture. Such an events calendar provides the virtual teams with a firm sense of time and connectivity with their colleagues working in the same team.
It fills them with the hope of meeting and interacting with the other members of the workforce virtually, eliminating the sense of isolation and loneliness of the remote workers.
5. Establish Unique Traditions
Just as in physical workspaces, the culture of virtual office environments should be defined by some unique traditions. These traditions might include enabling virtual team members to bond with their colleagues via online chat, provide the employees to work while travelling as long as they meet key deadlines, or even set aside a specific time every day during work hours to discuss issues and resolve problems in an informal setting.
6. Plan for Career Growth and Development of Remote Workers
Ensuring the growth and development of its employees is the most important aspect of organizational culture and is equally applicable to virtual teams. Hence, it is essential for organizations to ensure that they plan for the career growth and development of the members of their virtual teams.
They need to invest in the skill development and professional growth of these remote employees in accordance with their desired professional trajectory and their pre-defined career objectives.
As the demand for digital workspaces continues to grow, organizations can benefit greatly by considering this guide for building workplace culture in virtual environments for enhancing their profitability and business success.
To stay updated on the latest HiFives blogs follow us on Twitter (@MyHiFives)


text:
Gods of Egypt centers around Horus (played by Nikola Coster) who is also the "God of Light" and Bek (who plays Brenton Thwaites). On the coronation day by his father Set (Gerald Butler), the "God of the Desert", shows up and decides to take over…a sibling rivalry in all its green glory. Bek then decides to team up with a defeated Horus on a quest, despite hating his guts, in an attempt to save the woman he loves from death.
Despite the movie bringing back the Egyptian mythology there are very few colored actors. Or rather they acted the slave part. (Power to the black people)
Director Alex Proyas, best known for Helming the crow and iRobot. Gods of Egypt has traces of The mummy in it. It clearly doesn't feel fresh.
The leads of the movie are all trying their best even when some of them are so out of place. It looks like reunion of Iron man and The Power Rangers. Or rather the fact that they were larger than the humans (touché).
I didn't hate this movie. Infact I liked it, the touch of romance and friendship gave it life. Girls take your man to this movie and make sure he sees you staring at him when Beck goes through the trials to save his girl. Give him that deadly stare. Happy watching.


text:
Take one look at a sunflower you'll quickly understand why it's the universal flower for happiness. They sure makes Lucy happy… just look at that face!
Maybe it's the fact that they're bright yellow like the sun. Or maybe the fact that they naturally grow to be 10 feet tall. It could even be that sunflowers are made up of thousands of tiny flowers in the center? All we know is sunflowers bring a smile to EVERYONE'S face. And with over 70 varieties there's plenty to go around!
Go see for yourself. Maryland is full of sunflower fields. Here are the locations rated top 5 for our area (click on name to visit their website and learn more).


text:
Guilt Free Self Care
"You deserve the best because your loved ones deserve the best of you, not what's left of you."
- Becky Lauridsen, Founder
Sign Up For Weekly Self Care Tips
IOME is taking a preventative approach to your mental wellness!
You deserve the best because your loved ones deserve the best of YOU.
It's an IOME, not an IOU!
Tired of feeling guilty about taking time for you? IOME is on a mission to help EVERYONE experience GUILT FREE SELF CARE.
+ Luxury self care at discounted rates
+ One on one's from a skilled, licensed therapist
+ Savings on your existing self care routine
+ Exclusive events
+ Resources & tips to practice self care
You can't pour from an empty cup.
Start Your Self Care
Choose the best membership level for you and schedule a goal session
Receive exclusive discounts on dozens self care services
Benefit from recurring self-care services
"IOME has been an amazing resources and inspiration for me both personally and professionally! I had "aha moments" every time I talked with Becky. IOME is life changing!"
- IOME Member


text:
Each of PlatinumGames' mainline Bayonetta titles has been a high-octane, high-camp celebration of feminine witchiness that relied on overt visual extra-ness to compensate for repetitive — if mesmerizing — combat mechanics and stories that have left much to be desired. While its fancifully illustrated storybook aesthetics suggest otherwise at first glance, Bayonetta Origins: Cereza and the Lost Demon has a narrative heart and soul reminiscent of its more mature, gun-filled predecessors. But between its more simplified approach to combat, and the gentle emphasis it puts on controlling two characters simultaneously, Cereza and the Lost Demon isn't just a delightful prequel — it's one of the Bayonetta franchise's most inspired and delightful entries yet.
Set in one of the cozier and more vibrant (but nonetheless stylish) corners of the multiverse more thoroughly explored in Bayonetta 3, Cereza and the Lost Demon tells the tale of how a young Cereza variant's life is forever changed when she wanders into an enchanted forest one fateful day. As an enthusiastic but somewhat unskilled Umbra Witch in training, Cereza knows better than to disobey her mistress Morgana's strict rules about steering clear of Avalon Forest until she has better control of her burgeoning power to summon and control demons.
But as the loving daughter of a witch imprisoned for violating Umbran law, Cereza can't help but be tempted when a mysterious presence begins urging her toward Avalon and a strange power hidden there that she might use to free her mother. Elegant wuss that she is, it isn't until Cereza accidentally manages to summon a demon, name him Cheshire, and bind him to her stuffed animal that she's willing to enter the forest and the game properly begins.
If you've spent time playing previous Bayonetta games — especially Bayonetta 3 — then series creator Hideki Kamiya's signature flair for the outré will be readily apparent as you first start poking around Avalon, controlling Cereza with the left joystick and Cheshire with the right. But what immediately signals how hard a pivot Cereza is from the rest of the franchise is art director Tomoko Nishii's lush, dreamy, cel-shaded visual style and the game's storybook framing, which brings a refreshing kind of whimsy to Bayonetta's lore.
Rather than another Bayonetta game focused on pulling off long strings of combo attacks, Cereza and the Lost Demon plays more like an interactive book whose pages you're meant to pore over both to solve a variety of puzzles and to drink in its beauty. As witch and demon, Cereza and Cheshire are bound to one another and can only wander but so far apart while the beast is in "unleashed mode" until they're forced to come back together in their cooperative "hug mode," where he essentially becomes an extended grabbing arm for her.
Because they're both so inexperienced with their powers, Cheshire and Cereza also have to rely on one another in battle as they encounter the many different types of wonderfully gnarly faeries lurking all throughout Avalon who want nothing more than to lead them to their dooms. It's a bit disorienting the first time Cereza and the Lost Demon sits up straight to tell you that a battle's about to begin in which you have to use Cereza's relatively weak magic to temporarily bind enemies in place while also commanding Cheshire to tear into them with his claws and fangs. But after a few seconds of moving the witch / demon duo around and getting accustomed to thinking of them as two halves of a whole meant to be working in concert, Cereza and the Lost Demon quickly becomes just the right amount of mildly gimmicky to feel both inspired and accessible.
Cereza and the Lost Demon isn't the first Bayonetta game to ever hit a Nintendo system. But it is the most Nintendo-esque entry in the franchise yet — both in terms of the way its visual language feels perfectly calibrated to make the most of the Switch's hardware and in how much more oriented toward a younger audience the game's story feels. What Avalon lacks in terms of high-definition detail, the game makes up for and then some by building out a pulsing, illustrated world full of otherworldly beasties and playful forest spirits who each bring their own unique energy to Cereza's dark fairytale with their presence.
But as interesting as nearly all of Cereza and the Lost Demon's character designs are, fighting baddies never really becomes all that much of a challenge as your adventure takes you deeper into Avalon and Cereza and Cheshire gain a variety of more powerful but rather simple to pull off attacks. Once you've really gotten accustomed to timing Cereza's cooldowns and Cheshire's attacks, it's beyond easy to mow your way through the batches of ornery battle-hungry fae folk who really don't need to telegraph their attacks quite as obviously as they do. As repetitive as combat can be, though, the game does try to keep it feeling fresh and visually stimulating by giving Cheshire a number of new elemental physical forms like Fire Cheshire that grant him unique abilities and designs that feel like something plucked from Gankutsuou: The Count of Monte Cristo.
While they're very different beasts, playing Cereza and the Lost Demon in 2023 feels a lot like playing Capcom's Ōkamiden for the original DS back in 2011 in the sense that the new game is a technical triumph that's still almost certain to rub many fans the wrong way simply because it's different from the games that came before it. To be fair, Cereza is undeniably making a bold gamble by taking such a beloved character in a new direction that reads as kid-friendly first and true to Bayonetta second. But with its charming story, clever expansion of the franchise's multiversal mythos, and a healthy selection of unlockable costumes, Cereza and the Lost Demon is pure Bayonetta at its core, and after the controversy surrounding Bayonetta 3, it might be exactly what the series needs.
Bayonetta Origins: Cereza and the Lost Demon drops on March 17th.


text: Covid-19 is good for very little but it is encouraging makers to share their work in this virtual realm where most of us are now living our lives which is positive. Here is another short by the wonderful Chris O'Neill, programmer and film-maker. This is the second project that I collaborated with him on.