teleren/devto huggingface dataset:
청송성인안마♠【상담톡 sx-58】청송출장마사지?? 청송출장샵여자 청송출장안마 청송출장샵추천
Published: 2024-02-21 12:44:44

청송성인안마♠【상담톡 sx-58】청송출장마사지?? 청송출장샵여자 청송출장안마 청송출장샵추천
청송성인안마♠【상담톡 sx-58】청송출장마사지?? 청송출장샵여자 청송출장안마 청송출장샵추천
청송성인안마♠【상담톡 sx-58】청송출장마사지?? 청송출장샵여자 청송출장안마 청송출장샵추천
광명애인대행☎상담톡 sx-58☎ 1위출장샵♥광명출장스웨디시 광명출장업소 광명출장샵 광명무한샷
Published: 2024-02-21 13:07:29

광명애인대행☎상담톡 sx-58☎ 1위출장샵♥광명출장스웨디시 광명출장업소 광명출장샵  광명무한샷
광명애인대행☎상담톡 sx-58☎ 1위출장샵♥광명출장스웨디시 광명출장업소 광명출장샵  광명무한샷
광명애인대행☎상담톡 sx-58☎ 1위출장샵♥광명출장스웨디시 광명출장업소 광명출장샵  광명무한샷
고성섹파만남▶ LINE-wag58▶ 고성출장안마 고성출장이용 디시 고성출장샵추천 고성성인안마,채팅
Published: 2024-02-21 13:16:43

고성섹파만남▶ LINE-wag58▶ 고성출장안마 고성출장이용 디시 고성출장샵추천 고성성인안마,채팅
고성섹파만남▶ LINE-wag58▶ 고성출장안마 고성출장이용 디시 고성출장샵추천 고성성인안마,채팅
고성섹파만남▶ LINE-wag58▶ 고성출장안마 고성출장이용 디시 고성출장샵추천 고성성인안마,채팅
안성모텔출장=상담-line라인-sx166-안성일본인출장 안성콜걸만남 안성횟수무제한 안성30대출장 안성1:1만남
Published: 2024-02-21 13:42:43

안성모텔출장=상담-line라인-sx166-안성일본인출장 안성콜걸만남 안성횟수무제한 안성30대출장 안성1:1만남  
안성모텔출장=상담-line라인-sx166-안성일본인출장 안성콜걸만남 안성횟수무제한 안성30대출장 안성1:1만남  
안성모텔출장=상담-line라인-sx166-안성일본인출장 안성콜걸만남 안성횟수무제한 안성30대출장 안성1:1만남
동두천출장마사지￥텔레wag58￥ 동두천출장마사지 동두천미녀S급퀄리티 동두천미팅/ 영광여대생출장
Published: 2024-02-21 13:57:06

동두천출장마사지￥텔레wag58￥ 동두천출장마사지 동두천미녀S급퀄리티 동두천미팅/  영광여대생출장
동두천출장마사지￥텔레wag58￥ 동두천출장마사지 동두천미녀S급퀄리티 동두천미팅/  영광여대생출장
동두천출장마사지￥텔레wag58￥ 동두천출장마사지 동두천미녀S급퀄리티 동두천미팅/  영광여대생출장
동두천출장마사지￥텔레wag58￥ 동두천출장마사지 동두천미녀S급퀄리티 동두천미팅/  영광여대생출장
제주횟수무제한+라인+sx166+ 제주ㄴㅋ출장 제주출장홈타이 제주자취방출장 제주코스프레이 제주 40대미시출장
Published: 2024-02-21 14:15:04

제주횟수무제한+라인+sx166+ 제주ㄴㅋ출장 제주출장홈타이  제주자취방출장 제주코스프레이 제주 40대미시출장
제주횟수무제한+라인+sx166+ 제주ㄴㅋ출장 제주출장홈타이  제주자취방출장 제주코스프레이 제주 40대미시출장
제주횟수무제한+라인+sx166+ 제주ㄴㅋ출장 제주출장홈타이  제주자취방출장 제주코스프레이 제주 40대미시출장
창원횟수무제한+라인+sx166+ 창원ㄴㅋ출장 창원출장홈타이 창원자취방출장 창원코스프레이 창원 40대미시출장
Published: 2024-02-21 14:18:01

창원횟수무제한+라인+sx166+ 창원ㄴㅋ출장 창원출장홈타이  창원자취방출장 창원코스프레이 창원 40대미시출장
창원횟수무제한+라인+sx166+ 창원ㄴㅋ출장 창원출장홈타이  창원자취방출장 창원코스프레이 창원 40대미시출장
창원횟수무제한+라인+sx166+ 창원ㄴㅋ출장 창원출장홈타이  창원자취방출장 창원코스프레이 창원 40대미시출장
💎(퐁)PONG 토토사이트【퐁주소.com】【코드:BJ】💎
Published: 2024-02-21 20:17:46

🩵Pong 퐁 9년차 무사고 메이저 토토사이트🩵

⚡️입플 3+3 10+5 20+7 30+10 50+20 100+30 200+70⚡️

➡️코드: BJ 
➡️주소: 퐁주소.com

❣️ 대박 이벤트 진행중 ❣️

⭐️ 신규가입 첫충전 40% 
⭐️ 무한매충 15% / 콤프 4% 
⭐️ 투타임 이벤트
⭐️ 페이백 이벤트
⭐️ 스포츠 이벤트 (한폴낙/올낙첨)
⭐️ 충전횟수 이벤트
⭐️ 미니게임 이벤트
⭐️ 콤프 이벤트
⭐️ 생일 이벤트
⭐️ 복귀 이벤트
⭐️ 지인추천 이벤트
⭐️ 일일 누적충전 이벤트
⭐️ 레벨업 이벤트
⭐️ 출석이벤트 

⭕️ 단폴가능 ⭕️
⭕️ 블랙승인 ⭕️
❌ 배팅제재 ❌
❌ 승인전화 ❌ 

✅네이버카페 cafe.naver.com/browncqpaq
✅카톡오픈채팅방 open.kakao.com/o/sYCr8x2f

➡️코드: BJ 
➡️주소: 퐁주소.com
Why Angular route order matters? Learning from a 500 server error
Tags: angular, webdev
Published: 2024-02-22 01:42:58

I was on a MEAK stack recipe project, once I got a 500 error, and I was so focused on backend debugging, the error message was:

```
Cast to ObjectId failed for value "create" (type string) at path "_id" for model "Recipe"
```


The error code plus the message itself really made me think that my POST method was wrong, even though I doubted, it worked well… until I added the recipe detail page.

I tested with postman, my POST was correct, so it must be frontend error then. I checked the network again, on this 500 error, I checked headers this time, wait, it was a wrong GET method? I then saw the http call on **http://localhost:3000/api/v1/recipes/create**.

Oh, here you are, how come I was trying to get a recipe with id **"create"**? Right away I realized it was the routing error. In my **recipe.routes.ts**, I had my routes like this:
```TypeScript
export const recipeRoutes: Route[] = [
  {
    path: '',
    loadComponent: () => import('./recipe-list/recipe-list.component').then(c => c.RecipeListComponent)
  },
  {
    path: ':id',
    loadComponent: () => import('./recipe-details/recipe-details.component').then(c => c.RecipeDetailsComponent)
  },
  {
    path: 'create',
    loadComponent: () => import('./recipe-creation/recipe-creation.component').then(c => c.RecipeCreationComponent)
  }
]
```
Look at this path order, I vaguely remember Angular routes order is important, **":id"** is a less specific route than **"create"**, by this wrong order, **"create"** string will be literally taken as an id, and certainly won’t be able to get anything from the server, except for a **500** for me.

Just to refresh the knowledge:

> Angular Router uses a **first-match wins** strategy when matching routes, so more specific routes should be placed above less specific routes. List routes with a static path first, followed by an empty path route, which matches the default route. The wildcard route comes last because it matches every URL and the Router selects it only if no other routes match first.
>

Therefore, the correct routes should be as below, simply swapping the order of **"create"** path and **":id"** path solves the problem.

```TypeScript
export const recipeRoutes: Route[] = [
  {
    path: '',
    loadComponent: () => import('./recipe-list/recipe-list.component').then(c => c.RecipeListComponent)
  },
  {
    path: 'create',
    loadComponent: () => import('./recipe-creation/recipe-creation.component').then(c => c.RecipeCreationComponent)
  },
  {
    path: ':id',
    loadComponent: () => import('./recipe-details/recipe-details.component').then(c => c.RecipeDetailsComponent)
  }
]
```

And another lesson? 500 server error may not always be the backend problem.
why do we get the error and unable to edit files
Tags: devops
Published: 2024-02-22 04:47:34

E325: ATTENTION
Found a swap file by the name ".tomcat-users.xml.swp"
          owned by: root   dated: Thu Feb 22 04:41:04 2024
         file name: /opt/apache-tomcat-9.0.86/conf/tomcat-users.xml
          modified: YES
         user name: root   host name: ip-172-31-17-216
        process ID: 2503 (STILL RUNNING)
While opening file "tomcat-users.xml"
             dated: Wed Feb 14 08:15:12 2024

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r tomcat-users.xml"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".tomcat-users.xml.swp"
    to avoid this message.

-- More --
Dashboard
Published: 2024-02-22 06:04:36

You  Can Start  the Power BI  Training Courses now in Thane. Analysing and interpreting data using Power BI to derive actionable insights. This may involve creating visualizations, reports, and dashboards. Designing and developing reports and dashboards using Power BI. This involves transforming raw data into a format suitable for analysis. Developing and maintaining data infrastructure to support Power BI reports, ensuring data is accessible and accurate. join now to start the career with Actifyzone center.
Pandas
Published: 2024-02-22 06:06:19

Best Python Developer courses in Thane. A Python developer is a professional who specializes in using the Python programming language to design, build, and maintain software applications. You will learn tools, languages and frameworks of Numpy, pandas ,Data Science ,matplotlib, NLTK, Django Python developers leverage the language to create a variety of applications, including web applications, desktop applications, data analysis tools, machine learning models, automation scripts, and more. This is the time to start the career and enroll now with the courses
고양출장안마♡텔레ssx166♧고양출장친구만남 고양섹파만남 고양노래방만남 고양애인소개팅
Published: 2024-02-22 07:36:24

고양출장안마♡텔레ssx166♧고양출장친구만남 고양섹파만남 고양노래방만남 고양애인소개팅
고양출장안마♡텔레ssx166♧고양출장친구만남 고양섹파만남 고양노래방만남 고양애인소개팅
고양출장안마♡텔레ssx166♧고양출장친구만남 고양섹파만남 고양노래방만남 고양애인소개팅
고양출장안마♡텔레ssx166♧고양출장친구만남 고양섹파만남 고양노래방만남 고양애인소개팅
사천모텔아가씨/콜걸 ☎LINE-wag58☎ 사천외국인출장 사천출장전문업소 사천출장안마? 사천출장만남
Published: 2024-02-22 08:10:52

사천모텔아가씨/콜걸 ☎LINE-wag58☎ 사천외국인출장 사천출장전문업소 사천출장안마?  사천출장만남
사천모텔아가씨/콜걸 ☎LINE-wag58☎ 사천외국인출장 사천출장전문업소 사천출장안마?  사천출장만남
사천모텔아가씨/콜걸 ☎LINE-wag58☎ 사천외국인출장 사천출장전문업소 사천출장안마?  사천출장만남
태백출장전문 ◀상담톡 sx-58▶ 태백출장아가씨 태백출장추천 태백여대생출장 태백홈타이마사지샵
Published: 2024-02-22 08:20:06

태백출장전문 ◀상담톡 sx-58▶ 태백출장아가씨 태백출장추천 태백여대생출장 태백홈타이마사지샵
태백출장전문 ◀상담톡 sx-58▶ 태백출장아가씨 태백출장추천 태백여대생출장 태백홈타이마사지샵
태백출장전문 ◀상담톡 sx-58▶ 태백출장아가씨 태백출장추천 태백여대생출장 태백홈타이마사지샵
강남구출장샵추천 LINE--라인wag58 강남구맛사지 애인대행 강남구한국인출장 강남구와꾸보장 강남구출장안마
Published: 2024-02-22 08:26:16

강남구출장샵추천 LINE--라인wag58〓 강남구맛사지 애인대행 강남구한국인출장 강남구와꾸보장 강남구출장안마
강남구출장샵추천 LINE--라인wag58〓 강남구맛사지 애인대행 강남구한국인출장 강남구와꾸보장 강남구출장안마
강남구출장샵추천 LINE--라인wag58〓 강남구맛사지 애인대행 강남구한국인출장 강남구와꾸보장 강남구출장안마
Every Neovim, Every Config, All At Once
Tags: neovim, config, development
Published: 2024-03-06 00:26:24

---
id: Every Neovim, Every Config, All At Once
aliases: []
tags: []
---

## Neovim is hot 🔥 right now

Neovim, a successful fork of Vim, is a text editor that is gaining popularity. I won't link David Heinemeier Hansson's blog post again since everyone has done it already.   
I also won't list all the good stuff about Neovim, since you can find them on the official website and tons of blog posts.  

## You can build your own IDE, or should I say, own **IDEs**(plural)

Just by learning a super-easy Lua language, you can build your own IDE with Neovim. If you're a busy person, you can just copy and paste someone else's config.  
You can also find a fully-plugged IDE level config like:

- [LazyVim](https://www.lazyvim.org/)
- [AstroNvim](https://astronvim.com/)
- [LunarVim](https://www.lunarvim.org/)
- [NvChad](https://nvchad.com/)

All you have to do is to clone the repo and paste it in your `~/.config/nvim` directory.

```bash
# Backup your current config
mv ~/.config/nvim ~/.config/nvim.bak

# Clone the repo
git clone <remote repo> ~/.config/nvim --depth 1

# Run neovim
nvim
```

But what if you want to use multiple configs at the same time?  

The answer is simple. All you need to set is the **`NVIM_APPNAME`** environment variable.

### Example: Using LunarVim and NvChad at the same time

Let's say you want to use LunarVim for your web development and NvChad for your data science work.
You should first clone both repos with their custom directory names.

```bash
# Clone LunarVim
$ git clone git@github.com:LunarVim/LunarVim.git ~/.config/lunarvim --depth 1

# Clone NvChad
$ git clone https://github.com/NvChad/NvChad ~/.config/nvchad --depth 1

```

Then, you can set the `NVIM_APPNAME` environment variable to use each config.

```bash
# Run neovim with LunarVim
$ NVIM_APPNAME=lunarvim nvim

# Run neovim with NvChad
$ NVIM_APPNAME=nvchad nvim
```

You can still use the default config by just running `nvim` without setting the `NVIM_APPNAME` environment variable. (This reads the config from `~/.config/nvim`)

```bash
# Run neovim with the default config
$ nvim
```

### Example: Make aliases for each config

You can also make aliases for each config.

```bash
# Add these lines to your .bashrc or .zshrc

alias lunarvim="NVIM_APPNAME=lunarvim nvim"
alias nvchad="NVIM_APPNAME=nvchad nvim"

# Run neovim with LunarVim
$ lunarvim
```

## Conclusion

That's it! You can use multiple Neovim configs at the same time, with just a simple environment variable `NVIM_APPNAME`.

Now, some might say _"Why don't you just use Docker?"_. Well, not everyone is comfortable with Docker, and since Neovim just supports this feature, why not use it?

I hope this tip helps you to use Neovim more effectively. Happy hacking! 🚀
Build your first Hangfire job .NET8 with PostgreSQL
Tags: postgres, hangfire, dotnet, dotnetcore
Published: 2024-02-22 12:29:29

In this article, I will share a few simple steps you will need to create your first hangfire job using .NET 8(the latest at the time of writing this article) with Postgres as the database.

Also, please be aware that in this article I'm not going to brief what Hangfire is, as there are plenty of articles already written by wise authors. :)

Alright, let's get started.

## 1. First step first

We can create either an ASP.NET Core Web App or API (it doesn't really matter what you choose). However, for simplicity, I'm using an API project targeting.NET8

## 2. Install Nuget Packages

You'll need to install the following Nuget packages
`Npgsql.EntityFrameworkCore.PostgreSQL`
`Microsoft.EntityFrameworkCore.Design`
`Hangfire.AspNetCore`
`Hangfire.PostgreSql`

That's all you need!

## 3. Create a DBContext

You will need a custom DBContext class to run a DB Migration

```
    public class DefaultDbContext : DbContext
    {
        public DefaultDbContext(DbContextOptions<DefaultDbContext> options)
            : base(options) { }
    }
```

## 4. Create a DB in Postgres

Just go ahead and create a database called `HangfireSample`
This is all you need to do at the DB level!

## 5. Configuration

Now before you run migration configure the DB path in `appsettings.json` and update `program.cs`

```
"ConnectionStrings": {
  "defaultConnection": "Host=localhost;Port=5432;Username=postgres;Password=YOUR_PWD;Database=HangfireSample"
}
```
Update the below code in `program.cs`
```
builder.Services.AddEntityFrameworkNpgsql().AddDbContext<DefaultDbContext>(options => {
    options.UseNpgsql(builder.Configuration.GetConnectionString("defaultConnection"));
});
```


## 6. Run migration

Just open Package Manager Console and run the below commands

```
dotnet ef migrations add InitContext
dotnet ef database update
```
This will create `__EFMigrationsHistory` under `public` schema

## 7. Almost done

Now configure Hangfire service in `program.cs` with the below code

```
builder.Services.AddHangfire(x =>
    x.UsePostgreSqlStorage(builder.Configuration.GetConnectionString("defaultConnection")));
```

And update middleware

```
app.UseHangfireDashboard("/dashboard");
app.UseHangfireServer();

```
This was all you had to do create the hangfire server and storage.

Now, let's create a simple job.

## 8. First Hangfire job

Just copy the code below

```
BackgroundJob.Enqueue(() => Console.WriteLine("My first handfire job!"));

```

Now, you run the solution!

To see your job, visit
[https://localhost:44397/dashboard](https://localhost:44397/dashboard)

And if you go to [https://localhost:44397/dashboard/jobs/succeeded](https://localhost:44397/dashboard/jobs/succeeded) 
you'll see the job you just executed.


Also, just you know, if you check the `HangfireSample` database, you'll the hangfire tables would be created under `hangfire` schema.

Just for your reference [here](https://github.com/pradeepradyumna/HangfireSample) is the complete working sample of the code I just explained.


I hope it helped you!
Dashboard
Published: 2024-02-22 12:13:20

You  Can Start  the Power BI  Training Courses now in Thane. Analysing and interpreting data using Power BI to derive actionable insights. This may involve creating visualizations, reports, and dashboards. Designing and developing reports and dashboards using Power BI. This involves transforming raw data into a format suitable for analysis. Developing and maintaining data infrastructure to support Power BI reports, ensuring data is accessible and accurate. join now to start the career with Actifyzone center.
Gamedev.js Survey’s all questions and answers landed on GitHub
Tags: github, results, gamedevjs, surveys
Published: 2024-02-22 17:53:16

---
title: Gamedev.js Survey’s all questions and answers landed on GitHub
published: true
date: 2024-02-22 17:29:26 UTC
tags: github,results,gamedevjs,surveys
canonical_url: https://enclavegames.com/blog/gamedevjs-survey-github/
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h3frzguvdt8dk14lfe6m.png
---

With [Gamedev.js Survey 2023](https://gamedevjs.com/survey/2023/) completed in December and the [report published](https://gamedevjs.com/survey/report-on-the-current-state-of-web-game-development-in-2023-is-now-published/) in January, I got asked multiple times about the raw results of this year’s answers and those from the past editions as well, especially from the open questions, and decided to publish all that [on GitHub](https://github.com/GamedevJS/Gamedev.js-Survey/).

You can find all the data we’ve collected (minus timestamps and email addresses) over the years by looking at the dedicated files:

- [answers-2021.csv](https://github.com/GamedevJS/Gamedev.js-Survey/blob/main/answers-2021.csv)
- [answers-2022.csv](https://github.com/GamedevJS/Gamedev.js-Survey/blob/main/answers-2022.csv)
- [answers-2023.csv](https://github.com/GamedevJS/Gamedev.js-Survey/blob/main/answers-2023.csv)

All the questions (2021–2023) were also published for reference, and the given file for the 2024 edition, [questions-2024.md](https://github.com/GamedevJS/Gamedev.js-Survey/blob/main/questions-2024.md), is up — feel free to send a [Pull Request](https://github.com/GamedevJS/Gamedev.js-Survey/pulls) if you have any feedback or updates to it already.

Now with the questions and answers from three consecutive editions, folks could pick up trends like the usage of specific technologies by developers, their tooling preferences, how earning money from building web games evolve over the years, or even the overall happiness of developers themselves. Another take would be on the open questions like what the devs are struggling with, or what might be their biggest challenges in the coming year.

The **Gamedev.js Survey** officially [joined WebDX Community Group at W3C](https://end3r.com/blog/webdx-gamedevjs-survey/) recently, so there’s hope it will grow even bigger with this year’s edition, which is planned in the second part of 2024.
Introducing a GitHub Action for Interacting with Lagoon
Tags: github, action, workflow
Published: 2024-03-07 03:47:09

[https://github.com/uselagoon/lagoon-action](https://github.com/uselagoon/lagoon-action)

We're excited to announce the release of the Lagoon Action – a GitHub Action that allows you to integrate with Lagoon, making it easy for you to automate your deployment workflows and manage Lagoon environments directly from your GitHub repository.

Currently the Lagoon action allows you to:

- Deploy branches and PRs
- Upsert environment variables

Taken together, these two features open up a range of new deployment strategies on Lagoon.

For instance, Lagoon only presently responds to a subset of GitHub webhook options. Now, with the Lagoon action, you’re able to run your CI processes in GitHub itself, and instead of having a webhook call deploy your environment, you can choose to deploy only if the CI process passes.

## Getting Started

Getting started with the Lagoon Action is straightforward. [Add the action to your GitHub workflow](https://docs.github.com/en/actions/quickstart), configure the required parameters, and you're ready to automate your Lagoon deployments. [Check out the GitHub repository](https://github.com/uselagoon/lagoon-action) for detailed documentation and examples.

## Requirements

To use the Lagoon CLI Action, ensure you have set up a GitHub Actions secret containing a private SSH key with the necessary permissions added to the Lagoon API. This key will be used for authentication during the deployment process.

We’d love to know if you use this and how it helps your workflow! Hop in to the [Lagoon Discord](https://discord.gg/te5hHe95JE) and drop us a line! 

And don’t forget our [2024 Community Survey](https://dev.to/uselagoon/2024-community-hours-survey-50m5)! Let us know how we can best serve the Lagoon community.
Azure Function app that runs Haskell Nix package
Tags: haskell, nix, azure, docker
Published: 2024-02-23 04:46:56

I built a containerized Azure Function App that internlly runs a haskell program packaged with Nix.

I followed [Create your first containerized functions on Azure Container Apps](https://learn.microsoft.com/en-us/azure/azure-functions/functions-deploy-container-apps?tabs=acr%2Cbash&pivots=programming-language-csharp) to make a scaffold. Runtime could be anything than can run sub process, which is everything. So I choose dotnet.

And at the end of the generated Dockerfile, I added some nix layers. 

```dockerfile
# Basic runtime to install nix
RUN apt install -y xz-utils curl
RUN bash -c "sh <(curl -L https://nixos.org/nix/install) --daemon --yes"
# Update PATH to include nix tools
ENV PATH="/home/.nix-profile/bin:/nix/var/nix/profiles/default/bin:${PATH}"
```
Then I copied my haskell project.

```dockerfile
ADD haskell-project /opt/haskell-project
```

Create haskell package using `cabal2nix`. I call `nix-collect-garbage` to reduce the size of docker layer.

```dockerfile
RUN nix-shell -p cabal2nix --run 'cabal2nix --no-check /opt/haskell-project > /opt/haskell-project/foo.nix' && nix-collect-garbage
```

The `default.nix` would look like this. It calls the haskell package and wrap it with [justStaticExecutables](https://github.com/NixOS/nixpkgs/blob/c0fccae2996f9dd015ce5c6b9525187ea5961007/doc/languages-frameworks/haskell.section.md#packaging-helpers-haskell-packaging-helpers) to leave only runtime dependencies.

```nix
let
  p = (import <nixpkgs> {}).pkgs;
in
  p.haskell.lib.compose.justStaticExecutables (p.haskellPackages.callPackage ./foo.nix {})
```

Build the nix package

```dockerfile
RUN nix-build
```

In the Function implementation, run the hasell executable as a subprocess

```cs
using System.Diagnostics;

using (Process hs = new Process())
{
    hs.StartInfo.UseShellExecute = true;
    hs.StartInfo.FileName = "/opt/haskell-project/result/bin/exe";

    hs.Start();
    await hs.WaitForExitAsync();
    if (hs.ExitCode != 0)
    {
        throw new Exception($"haskell subprocess failed {hs.ExitCode}");
    }
}
```
React Pure Component
Published: 2024-02-23 06:10:08

It is used when we want to see a performance boost

Rules ->
Parent Component along with all it's child component should be pure.
There should be no state mutation instead always a new object should be returned.

Advantages ->
It's shdComponentUpdate() value is be default false instead of true as in case of Regular Components.
It does a shallow comparison for both ->
**Primitive** -> checks value of them and if same doesn't re-render.
**Complex** -> Objects, arrays, lists -> It checks the reference if same -> doesn't re-render.

**Note** -> Should mostly use Regular Components unless performance is the issue