Skip to content

Commit 66b8c0d

Browse files
authored
Add Newsletter (#7114)
* Adds newsletter * Adds newsletter * Adds newsletter * fix lanuage * Added newsletter * Fix build
1 parent a162880 commit 66b8c0d

File tree

16 files changed

+250
-19
lines changed

16 files changed

+250
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
---
2+
path: "/blog/2024/04/01/fullstack-workshop"
3+
date: "2024-04-01"
4+
title: "Full Stack GraphQL Workshop"
5+
description: "We're excited to announce our new Full Stack GraphQL Workshop. Learn more about the workshop here!"
6+
tags: ["bananacakepop", "graphql", "hotchocolate", "workshops"]
7+
featuredImage: "header.png"
8+
author: Pascal Senn
9+
authorUrl: https://github.com/pascalsenn
10+
authorImageUrl: https://avatars.githubusercontent.com/u/14233220?v=4
11+
---
12+
13+
In today's rapidly evolving technology landscape, staying ahead requires not only understanding the latest technologies but also how to implement them effectively. This two-day workshop is a hands-on journey designed to demystify advanced concepts by building from the ground up. We'll start with the basics and progressively build a fully functional distributed web shop using HotChocolate, Relay.js, Fusion, multiple subgraphs .NET Aspire and also concepts like domain driven design, CQRS and clean architecture.
14+
15+
Book your seat now and learn more about the workshop [here](https://learn.chillicream.com/blog/2024-04-01/fullstack-workshop).
16+
17+
![Full Stack GraphQL Workshop](img1.png)
18+
19+
Over two days, we'll cover everything from basic concepts to advanced techniques. We start by getting to know GraphQL, learning about its features and benefits compared to traditional methods. Later, we introduce Relay.js, focusing on how it works with GraphQL to improve data handling and application performance.
20+
21+
**Day 1:** We begin with basic GraphQL concepts, then move on to how you can build efficient APIs. In the afternoon, we'll learn about Relay.js, starting with the fundamentals and advancing to more complex topics.
22+
23+
**Day 2:** We explore deeper topics like how to change and improve your GraphQL setup, how to handle data updates smoothly, and how other advanced techniques fit into the GraphQL world. We end by learning about real-time data updates with subscriptions.
24+
25+
For the next online workshop you [find more information here](https://learn.chillicream.com/blog/2024-04-01).
26+
27+
This workshop can also be tailored to meet your company's specific needs. We offer the flexibility to customize the content and focus areas to best match your team's requirements and goals.
28+
29+
Here are the detailed modules available:
30+
31+
**Module 1: Getting Started with GraphQL**
32+
33+
Kick off with GraphQL by understanding its fundamental concepts such as operations, types system, syntax, and reasons for using GraphQL over other APIs. The session ends with setting up a first GraphQL server, providing hands-on experience from the start.
34+
35+
**Module 2: Building a Database Driven Application**
36+
37+
Explore how to build GraphQL apis using Entity Framework Core, with features like paging, filtering, sorting, and projections. The session will also cover some advanced concepts like field middlewares.
38+
39+
**Module 3: Building APIs with Simple Layering**
40+
41+
This session focuses on API with simple layering, including applying filtering and pagination in layered architectures. It also covers best practices using DataLoaders for optimized data fetching operations.
42+
43+
**Module 4: GraphQL Query Patterns and Best Practices**
44+
45+
Detailed exploration of advanced GraphQL patterns such as evolving schemas, entity and connection patterns for large-scale applications, ensuring best practices are met for enterprise development.
46+
47+
**Module 5: Getting Started with Relay.js**
48+
49+
Introduction to Relay.js, focusing on queries, using fragments and arguments effectively.
50+
Module 6: Advanced Fetching Patterns
51+
This module covers complex data fetching strategies in Relay.js, including transitions, refetching, and pagination, essential for managing data in applications and providing peak user experience.
52+
53+
**Module 7: Understanding Relay**
54+
55+
Expands on Relay's core concepts, including store management, data prefetching methods, and internal workings of Relay for performance improvements and predictable state management.
56+
57+
**Module 8: GraphQL Mutations Patterns and Best Practices**
58+
59+
Deep dive into the structure and patterns of GraphQL mutations, focusing on how to effectively manage errors and ensure robust mutation operations.
60+
61+
**Module 9: Mutations In Relay**
62+
63+
This module focuses on teaching effective methods for managing mutations, error handling, and executing optimistic updates within Relay.
64+
65+
**Module 10: GraphQL Schema Evolution**
66+
67+
Review of techniques to evolve a GraphQL schema over time without breaking existing operations, including the use of client and schema registries and implementing open telemetry.
68+
69+
**Module 11: Introduction to Distributed GraphQL**
70+
71+
Covering the concepts and implementation of distributed GraphQL with fusion to allow scalable, efficiently distributed data across different services and servers.
72+
73+
**Module 12: Authentication / Authorization**
74+
75+
Detailed breakdown of implementing authentication and authorization in GraphQL applications, ensuring secure and controlled access to data through proper practices.
76+
77+
**Module 13: CQRS, DDD and GraphQL, the Perfect Fit?**
78+
79+
Exploration of how CQRS and Domain Driven Design can be integrated with GraphQL to optimize complexity management in large-scale domains.
80+
81+
**Module 14: GraphQL Subscriptions Patterns and Best Practices**
82+
83+
In-depth look at implementing real-time functionalities via GraphQL subscriptions, with specific focus on patterns. Implemented in both the backend and frontend..
84+
85+
**Closing Session: Q&A**
86+
87+
An open session where attendees can ask questions or clarify doubts about the topics covered, facilitating deeper understanding and practical implementations.
88+
89+
## We Want to Hear From You
90+
Your insights are invaluable to us. If you have questions, need more information, or just want to talk to use, don’t hesitate to reach out on [email protected] or on [slack.chillicream.com](https://slack.chillicream.com/blog/2024/04/01/fullstack-workshop)
Loading
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
path: "/blog/2024/05/21/newsletter-may"
3+
date: "2024-05-21"
4+
title: "What we have been up to!"
5+
description: "We just released the Operation Builder, Telemetry, and a new Full Stack GraphQL Workshop. Checkout the blog post to learn more!"
6+
tags: ["bananacakepop", "graphql", "hotchocolate", "workshops", "cloud", "release"]
7+
featuredImage: "header.png"
8+
author: Pascal Senn
9+
authorUrl: https://github.com/pascalsenn
10+
authorImageUrl: https://avatars.githubusercontent.com/u/14233220?v=4
11+
---
12+
13+
We’re excited to bring you some significant updates from ChiliCream that can genuinely make a difference in your day-to-day development. This isn't just about new features—it's about making your workflow more effective and your projects more successful.
14+
15+
# 🛠️ Operation Builder
16+
We’re proud to introduce the Operation Builder in Banana Cake Pop, a tool designed to make creating and managing your GraphQL operations a breeze.
17+
18+
![Operation Builder](img1.png)
19+
20+
The Operation Builder simplifies the process of creating and managing queries, making it easier than ever to draft, edit, and inspect your operations. Dive deep into your schema, seamlessly navigate fields and fragments, and gain instant insights into your data structure.
21+
22+
This is perfect for both quick edits and detailed explorations, helping you understand and optimize your queries with ease.
23+
24+
Try out the Operation Builder today and transform the way you work with GraphQL!
25+
26+
**[Check out the video here](https://link.chillicream.com/2024/05/21/ops-builder-video)**
27+
28+
# 📊 Telemetry
29+
30+
![Telemetry](img2.png)
31+
We’re want to put a spotlight on our Telemetry integration. Why did we build this? The answer is simple. Understanding your application’s performance shouldn't be a guessing game and GraphQL Telemetry is difficult. With our telemetry integration, you can have complete visibility into your GraphQL server.
32+
33+
![Telemetry](img3.png)
34+
- **Trace Visualization:** See every trace in detail. This helps you pinpoint precisely where your system can be improved.
35+
- **Latency Monitoring:** Track average latency and critical percentiles to ensure top-notch performance.
36+
- **Throughput Metrics:** Keep an eye on operations per minute, so you can manage and scale your resources effectively.
37+
- **Client Insights:** Identify which clients impact your system the most, helping you make data-driven decisions.
38+
- **Error Tracking:** Stay ahead of potential issues with real-time error reports.
39+
- **In-depth Operation Analysis:** Gain a comprehensive overview of each operation's latency, throughput, and error rates.
40+
41+
The fusion dashboard offers extensive monitoring capabilities, presenting real-time tracing and telemetry insights of your gateway and subgraphs. The topology view reveals interconnections and client activities, while status indicators provide a quick overview of latency, throughput, and error rates.
42+
43+
_Create, Collaborate, Conquer! Get Started with Banana Cake Pop Pro. Use the promo code **BCPROCKS** to get a discount on your first year and start using our GraphQL IDE to enhance your projects efficiently._
44+
45+
**[Check out the video here](https://link.chillicream.com/2024/05/21/telemetry-video)**
46+
47+
or read the docs: [Open Telemetry Documentation](https://link.chillicream.com/2024/05/21/otel-docs)
48+
49+
# 🛠️ Announcing Our New Full Stack GraphQL Workshop
50+
51+
In today's rapidly evolving technology landscape, staying ahead requires not only understanding the latest technologies but also knowing how to implement them effectively. Our brand-new Full Stack GraphQL Workshop is a two-day, hands-on journey designed to demystify advanced concepts.
52+
53+
![Full Stack GraphQL Workshop](img4.png)
54+
55+
We'll start with the basics and progressively build a fully functional distributed web shop using HotChocolate, Relay.js, Fusion, multiple subgraphs, and .NET Aspire. We’ll also delve into foundational principles like domain-driven design, CQRS, and clean architecture.
56+
57+
Learn more about the workshop here: [learn.chillicream.com](https://link.chillicream.com/2024/05/21/learn)
58+
59+
## We Want to Hear From You
60+
Your insights are invaluable to us. If you have questions, need more information, or want to discuss how our tools can fit into your projects, don’t hesitate to reach out on [email protected] or on [slack.chillicream.com](https://link.chillicream.com/2024/05/21/slack)
61+
62+
## ❤️️ Thank You
63+
We appreciate your engagement and are thrilled to support your projects with our evolving GraphQL solutions. Keep an eye out for HotChocolate 14, and let us help you take your projects to the next level.
Loading
Loading
Loading
Loading
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { graphql, useStaticQuery } from "gatsby";
2+
import { GatsbyImage } from "gatsby-plugin-image";
3+
import React, { FC } from "react";
4+
import styled from "styled-components";
5+
6+
import { GetFullStackWorkshopQuery } from "@/graphql-types";
7+
8+
export const FullstackWorkshop: FC = () => {
9+
const data = useStaticQuery<GetFullStackWorkshopQuery>(graphql`
10+
query getFullStackWorkshop {
11+
file(
12+
relativePath: { eq: "2024-04-01-fullstack-workshop/header.png" }
13+
sourceInstanceName: { eq: "blog" }
14+
) {
15+
childImageSharp {
16+
gatsbyImageData(layout: CONSTRAINED, width: 1200, quality: 100)
17+
}
18+
}
19+
}
20+
`);
21+
22+
return (
23+
<Container>
24+
<GatsbyImage
25+
image={data.file?.childImageSharp?.gatsbyImageData}
26+
alt="Fullstack Workshop"
27+
/>
28+
</Container>
29+
);
30+
};
31+
32+
const Container = styled.div`
33+
padding: 30px;
34+
35+
.gatsby-image-wrapper {
36+
border-radius: var(--border-radius);
37+
box-shadow: 0 9px 18px rgba(0, 0, 0, 0.25);
38+
}
39+
`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { graphql, useStaticQuery } from "gatsby";
2+
import { GatsbyImage } from "gatsby-plugin-image";
3+
import React, { FC } from "react";
4+
import styled from "styled-components";
5+
6+
import { GetNewsletterMay2024ImageQuery } from "@/graphql-types";
7+
8+
export const NewsletterMay2024: FC = () => {
9+
const data = useStaticQuery<GetNewsletterMay2024ImageQuery>(graphql`
10+
query getNewsletterMay2024Image {
11+
file(
12+
relativePath: { eq: "2024-05-21-newsletter-may/header.png" }
13+
sourceInstanceName: { eq: "blog" }
14+
) {
15+
childImageSharp {
16+
gatsbyImageData(layout: CONSTRAINED, width: 1200, quality: 100)
17+
}
18+
}
19+
}
20+
`);
21+
22+
return (
23+
<Container>
24+
<GatsbyImage
25+
image={data.file?.childImageSharp?.gatsbyImageData}
26+
alt="Newsletter May 2024"
27+
/>
28+
</Container>
29+
);
30+
};
31+
32+
const Container = styled.div`
33+
padding: 30px;
34+
35+
.gatsby-image-wrapper {
36+
border-radius: var(--border-radius);
37+
box-shadow: 0 9px 18px rgba(0, 0, 0, 0.25);
38+
}
39+
`;

website/src/docs/hotchocolate/v12/server/dependency-injection.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ While Hot Chocolate's internals rely heavily on Microsoft's dependency injection
229229
230230
You can switch out the service provider used for GraphQL requests, as long as your dependency injection container implements the [`IServiceProvider`](https://docs.microsoft.com/dotnet/api/system.iserviceprovider) interface.
231231
232-
To switch out the service provider you need to call [`SetServices`](/docs/hotchocolate/v12/server/interceptors#setservices) on the [`OperationRequestBuilder`](/docs/hotchocolate/v12/server/interceptors#OperationRequestBuilder) in both the [`IHttpRequestInterceptor`](/docs/hotchocolate/v12/server/interceptors#ihttprequestinterceptor) and the [`ISocketSessionInterceptor`](/docs/hotchocolate/v12/server/interceptors#isocketsessioninterceptor).
232+
To switch out the service provider you need to call [`SetServices`](/docs/hotchocolate/v12/server/interceptors#setservices) on the [`OperationRequestBuilder`](/docs/hotchocolate/v12/server/interceptors#operationrequestbuilder) in both the [`IHttpRequestInterceptor`](/docs/hotchocolate/v12/server/interceptors#ihttprequestinterceptor) and the [`ISocketSessionInterceptor`](/docs/hotchocolate/v12/server/interceptors#isocketsessioninterceptor).
233233

234234
```csharp
235235
public class HttpRequestInterceptor : DefaultHttpRequestInterceptor

website/src/docs/hotchocolate/v12/server/interceptors.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public override ValueTask OnCreateAsync(HttpContext context,
5151
5252
Most of the configuration will be done through the `OperationRequestBuilder`, injected as argument to this method.
5353

54-
[Learn more about the OperationRequestBuilder](#OperationRequestBuilder)
54+
[Learn more about the OperationRequestBuilder](#operationrequestbuilder)
5555

5656
If we want to fail the request, before it is being executed, we can throw a `GraphQLException`. The middleware will then translate this exception to a proper GraphQL error response for the client.
5757

@@ -149,7 +149,7 @@ public override ValueTask OnRequestAsync(ISocketConnection connection,
149149
150150
Most of the configuration will be done through the `OperationRequestBuilder`, injected as argument to this method.
151151

152-
[Learn more about the OperationRequestBuilder](#OperationRequestBuilder)
152+
[Learn more about the OperationRequestBuilder](#operationrequestbuilder)
153153

154154
If we want to fail the request, before it is being executed, we can throw a `GraphQLException`. The middleware will then translate this exception to a proper GraphQL error response for the client.
155155

website/src/docs/hotchocolate/v13/server/dependency-injection.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ While Hot Chocolate's internals rely heavily on Microsoft's dependency injection
229229
230230
You can switch out the service provider used for GraphQL requests, as long as your dependency injection container implements the [`IServiceProvider`](https://docs.microsoft.com/dotnet/api/system.iserviceprovider) interface.
231231
232-
To switch out the service provider you need to call [`SetServices`](/docs/hotchocolate/v13/server/interceptors#setservices) on the [`OperationRequestBuilder`](/docs/hotchocolate/v13/server/interceptors#OperationRequestBuilder) in both the [`IHttpRequestInterceptor`](/docs/hotchocolate/v13/server/interceptors#ihttprequestinterceptor) and the [`ISocketSessionInterceptor`](/docs/hotchocolate/v13/server/interceptors#isocketsessioninterceptor).
232+
To switch out the service provider you need to call [`SetServices`](/docs/hotchocolate/v13/server/interceptors#setservices) on the [`OperationRequestBuilder`](/docs/hotchocolate/v13/server/interceptors#operationrequestbuilder) in both the [`IHttpRequestInterceptor`](/docs/hotchocolate/v13/server/interceptors#ihttprequestinterceptor) and the [`ISocketSessionInterceptor`](/docs/hotchocolate/v13/server/interceptors#isocketsessioninterceptor).
233233

234234
```csharp
235235
public class HttpRequestInterceptor : DefaultHttpRequestInterceptor

website/src/docs/hotchocolate/v13/server/interceptors.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public override ValueTask OnCreateAsync(HttpContext context,
5151
5252
Most of the configuration will be done through the `OperationRequestBuilder`, injected as argument to this method.
5353

54-
[Learn more about the OperationRequestBuilder](#OperationRequestBuilder)
54+
[Learn more about the OperationRequestBuilder](#operationrequestbuilder)
5555

5656
If we want to fail the request, before it is being executed, we can throw a `GraphQLException`. The middleware will then translate this exception to a proper GraphQL error response for the client.
5757

@@ -149,7 +149,7 @@ public override ValueTask OnRequestAsync(ISocketConnection connection,
149149
150150
Most of the configuration will be done through the `OperationRequestBuilder`, injected as argument to this method.
151151

152-
[Learn more about the OperationRequestBuilder](#OperationRequestBuilder)
152+
[Learn more about the OperationRequestBuilder](#operationrequestbuilder)
153153

154154
If we want to fail the request, before it is being executed, we can throw a `GraphQLException`. The middleware will then translate this exception to a proper GraphQL error response for the client.
155155

website/src/pages/index.tsx

+13-13
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import styled from "styled-components";
55

66
import { BananaCakePop } from "@/components/images/banana-cake-pop";
77
import { BlogPostBananaCakePopApis } from "@/components/images/blog-post-banana-cake-pop-apis";
8-
import { BlogPostEFMeetsGraphQL } from "@/components/images/blog-post-ef-meets-graphql";
9-
import { BlogPostHotChocolate13 } from "@/components/images/blog-post-hot-chocolate-13";
108
import { BlogPostGraphQLFusion } from "@/components/images/blog-post-graphql-fusion";
9+
import { BlogPostHotChocolate13 } from "@/components/images/blog-post-hot-chocolate-13";
10+
import { NewsletterMay2024 } from "@/components/images/newsletter-may-2024";
1111
import { Layout } from "@/components/layout";
1212
import { Link } from "@/components/misc/link";
1313
import {
@@ -30,6 +30,7 @@ import { GetIndexPageDataQuery } from "@/graphql-types";
3030
import { THEME_COLORS } from "@/shared-style";
3131

3232
// Artwork
33+
import { FullstackWorkshop } from "@/components/images/fullstack-workshop";
3334
import { SrOnly } from "@/components/misc/sr-only";
3435
import ContactUsSvg from "@/images/artwork/contact-us.svg";
3536
import DashboardSvg from "@/images/artwork/dashboard.svg";
@@ -75,6 +76,16 @@ const IndexPage: FC = () => {
7576
showStatus={false}
7677
showThumbs={false}
7778
>
79+
<Slide>
80+
<Link to="/blog/2024/05/21/newsletter-may">
81+
<NewsletterMay2024 />
82+
</Link>
83+
</Slide>
84+
<Slide>
85+
<Link to="/blog/2024/04/01/fullstack-workshop">
86+
<FullstackWorkshop />
87+
</Link>
88+
</Slide>
7889
<Slide>
7990
<Link to="/blog/2023/08/15/graphql-fusion">
8091
<BlogPostGraphQLFusion />
@@ -102,17 +113,6 @@ const IndexPage: FC = () => {
102113
</SlideContent>
103114
</Link>
104115
</Slide>
105-
<Slide>
106-
<Link to="/blog/2020/03/18/entity-framework">
107-
<BlogPostEFMeetsGraphQL />
108-
<SlideContent>
109-
<SlideTitle>Entity Framework Meets GraphQL</SlideTitle>
110-
<SlideDescription>
111-
Get started with Hot Chocolate and Entity Framework
112-
</SlideDescription>
113-
</SlideContent>
114-
</Link>
115-
</Slide>
116116
</Slideshow>
117117
</Intro>
118118
<Section>

0 commit comments

Comments
 (0)