The new Era
of Full-Stack
A Hitachi Group Company
Volodymyr Vyshko
Plan
- The full-stack 10y ago vs now
- Is full-stack in demand on the market
- Is it worth it?
- Trends
- Quiz
A Hitachi Group Company
A Hitachi Group Company
Quiz gift!
Full-Stack
10 years ago
A Hitachi Group Company
A Hitachi Group Company
2012
A Hitachi Group Company
2012
A Hitachi Group Company
2013
A Hitachi Group Company
2023
A Hitachi Group Company
2023
A Hitachi Group Company
2023
A Hitachi Group Company
A Hitachi Group Company
Be flexible and adaptable
Network with other IT professionals
Keep up with the latest trends
A Hitachi Group Company
Trends 2024
A Hitachi Group Company
Repetetive tasks / code generation
A Hitachi Group Company
A Hitachi Group Company
A Hitachi Group Company
A Hitachi Group Company
SSR - Server Side Rendering
A Hitachi Group Company
// routes/index.js
import { useLoaderData } from "remix";
import prisma from "~/lib/db.server";
export const loader = async () => {
// Fetch all the users from the Prisma SQL DB
const users = await prisma.user.findMany();
// Return the users as the loader data
return users;
};
// Add an action that handles the POST request
export const action = async ({ request }) => {
// Get the form data from the request
const formData = await request.formData();
// Get the values from the form data
const name = formData.get("name");
const email = formData.get("email");
// Create a new user in the Prisma SQL DB
const user = await prisma.user.create({ data: { name, email } });
// Redirect to the same route with a success message
return redirect(request.url, {
headers: { "X-Message": `User ${user.name} created successfully!` },
});
};
export default function Index() {
// Use the loader data in the component
const users = useLoaderData();
return (
<div>
<h1>Users</h1>
<ul>
{users.map((user) => (
<li key={user.id}>
<p>{user.name}</p> <p>{user.email}</p>{" "}
</li>
))}
</ul>
<form method="post">
<label htmlFor="name">Name</label>
<input type="text" id="name" name="name" required />
<label htmlFor="email">Email</label>
<input type="email" id="email" name="email" required />
<button type="submit">Create User</button>
</form>
</div>
);
}
A Hitachi Group Company
Custom AI interface
Site index / Training data
Generate model
Open AI API
Perform Open AI call with custom model
const response = await openai.createChatCompletion({
model: "skt-1234abcd",
messages,
max_tokens: 150,
temperature: 0,
});
const { Configuration, OpenAIApi } = require("openai");
const fs = require("fs");
const configuration = new Configuration({
apiKey: "sk-XXXXXXXXXXXXXXXXXX",
});
(async () => {
const openai = new OpenAIApi(configuration);
const response = await uploadfile(openai);
console.log("response ::: ", response.data);
})();
function uploadfile(openai) {
return openai.createFile(fs.createReadStream("mydata.jsonl"), "fine-tune");
}
A Hitachi Group Company
BFF
A Hitachi Group Company
Best Friends Forever
Backend For Frontend
A Hitachi Group Company
BFF
Frontend dev
Backend dev
?
A Hitachi Group Company
BFF vs SSR
vs Gateway API
A Hitachi Group Company
Serverless
A Hitachi Group Company
A Hitachi Group Company
A Hitachi Group Company
NestJS + Serverless + Lambda + AWS
import { Handler, Context } from 'aws-lambda';
import { Server } from 'http';
import { createServer, proxy } from 'aws-serverless-express';
import { eventContext } from 'aws-serverless-express/middleware';
import { NestFactory } from '@nestjs/core';
import { ExpressAdapter } from '@nestjs/platform-express';
import { AppModule } from './app.module';
const express = require('express');
const binaryMimeTypes: string[] = [];
let cachedServer: Server;
async function bootstrapServer(): Promise<Server> {
if (!cachedServer) {
const expressApp = express();
const nestApp = await NestFactory.create(AppModule, new ExpressAdapter(expressApp))
nestApp.use(eventContext());
await nestApp.init();
cachedServer = createServer(expressApp, undefined, binaryMimeTypes);
}
return cachedServer;
}
export const handler: Handler = async (event: any, context: Context) => {
cachedServer = await bootstrapServer();
return proxy(cachedServer, event, context, 'PROMISE').promise;
}
sls deploy -v
service:
name: nest-serverless-lambda-demo
plugins:
- 'serverless-plugin-typescript'
- serverless-plugin-optimize
- serverless-offline
provider:
name: aws
runtime: nodejs12.x
functions:
main: # The name of the lambda function
# The module 'handler' is exported in the file 'src/lambda'
handler: src/lambda.handler
events:
- http:
method: any
path: /{any+}
A Hitachi Group Company
Serverless SSR BFF Application
A Hitachi Group Company
A Hitachi Group Company
Full-Stack
Cloud
BFF
SSR
Serverless
Devops
Low-code
A Hitachi Group Company
opportunities
A Hitachi Group Company
Search interest
A Hitachi Group Company
SelaRY
A Hitachi Group Company
- More opportunitiesĀ
- Can launch a product on your own
- Getter general understanding of web
Pros
- Maintain skills of backend/frontend
- multiple backend stacks
- too many frameworks/libs
Cons
Full-stack
A Hitachi Group Company
A Hitachi Group Company
ROADMAP
A Hitachi Group Company
A Hitachi Group Company
A Hitachi Group Company
Full-stack
Solution
architect
Manager
Own business
Specialize
DevOps
A Hitachi Group Company
QUIZ
A Hitachi Group Company
Join quiz!
Win a prize!
Thank you
A Hitachi Group Company
The new era
By vovy
The new era
- 104