# ⏱️ Performance Measurement — Node.js
Utilities for measuring execution time of async service calls using the `perf_hooks` API.
---
## Snippet 1 — Single Call Measurement
Wraps a single async operation to measure its execution time in milliseconds.
```typescript
import { performance } from 'perf_hooks';
const start = performance.now();
// Replace with your async service call
const result = await myService.doSomething(params);
const end = performance.now();
const elapsed = end - start;
# Commit Workflow — Toolchain & Execution Flow
> Enforced formatting · Standardized commit messages · Mandatory JIRA traceability
---
## Toolchain Overview
| Tool | Role |
|---|---|
| **Commitizen** (`cz`) | Interactive prompt to build a conventional commit message |
| **@commitlint/cz-commitlint** | Adapter that powers the Commitizen prompt with commitlint rules |
| **Husky** | Manages and runs Git hooks at the right lifecycle points |
| **lint-staged** | Runs Prettier on staged `.ts` files# VS Code Workspace Setup
## Prerequisites
Open a Linux terminal and run the following:
```bash
cd projects
nano core-api.code-workspace
```
Paste the following configuration:
```json
{
"folders": [
{
"path": "./core-api"
}
],
"settings": {
"terminal.integrated.cwd": "${workspaceFolder}",
"terminal.integrated.defaultProfile.linux": "bash"
},
"remoteAuthority": "wsl+Ubuntu"
}
```
Save and exit: `Ctrl + X` → `Y` → `Enter`
---
<div class="card-grid">
<div class="card">
<div class="card-header">カードタイトル1</div>
<div class="card-body">カードの内容がここに入ります。長いテキストでも高さが揃います。長いテキストでも高さが揃います。長いテキストでも高さが揃います。長いテキストでも高さが揃います。</div>
<div class="card-footer">フッター</div>
</div>
<div class="card">
<div class="card-header">カードタイトル2</div>
<div class="card-body">短い内容</div>
<div class="card-footer">フッター</div>
</div>
<div class="card">
<div class="card-header">カードタイトル3</div>
<div class="card-body"(Peek)
https://adesignl.github.io/Peek/body {
min-height: 100dvh;
}
footer {
position: sticky;
top: 100%;
}/* 画面幅いっぱいに表示 */
.photo {
width: 100vw;
margin-inline: calc(50% - 50vw);
}
/* 画面幅左半分に表示 */
.photo {
width: 50vw;
margin-left: calc((50vw - 50%) * -1);
}
/* 画面幅右半分に表示 */
.photo {
width: 50vw;
margin-right: -50vw;
}.button {
border-radius: 100vmax;
}.parent {
display: grid;
place-content: center;
}/**
* @param {number[][]} grid
* @param {number} k
* @return {number[][]}
*/
var minAbsDiff = function(grid, k) {
const m = grid.length;
const n = grid[0].length;
// The result matrix has (m - k + 1) rows and (n - k + 1) columns,
// because that's how many k×k windows can slide across the grid.
const ans = Array.from({ length: m - k + 1 }, () =>
Array(n - k + 1).fill(0)
);
// Slide a k×k window over every valid top-left corner (i, j)
for (let i = 0; private* batcher(aggs: [string, string][] = [], batchSize: number = 5) {
let j = 0;
for (let i = 0; i < aggs.length; i += batchSize) {
j = i + batchSize;
yield aggs.slice(i, j);
}
}
private* batcher(aggs: [string, string][] = [], batchSize: number = 5) {
while (aggs.length) {
yield aggs.splice(0, batchSize);
}
}package com.legendss.backend.controllers;
import com.legendss.backend.entities.LED;
import com.legendss.backend.services.LEDService;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/leds")
@CrossOrigin("*")
public class LEDController {
private final LEDService ledService;
public LEDController(LEDService ledService) {
this.ledService = ledService;
}
@GetMapping("/get/color/{id}")
public LED getLEDColorController(@PathVariable Longpackage com.legendss.backend.repositories;
import com.legendss.backend.entities.LED;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface LEDRepository extends JpaRepository<LED, Long> {
}
package com.legendss.backend.repositories;
import com.legendss.backend.entities.LED;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface LEDRepository extends JpaRepository<LED, Long> {
}
package com.legendss.backend.entities;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Table(name = "leds")
@Entity
@Getter
@Setter
public class LED {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "color")
private String color;
}#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "secrets.h"
const char* SSID = NETWORK_SSID;
const char* PASSWORD = NETWORK_PASSWORD;
const char* GET_URL = URL;
#define LED_PIN 38
#define NUM_PIXELS 1
Adafruit_NeoPixel pixels(NUM_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
String color = "";
void setup()
{
Serial.begin(115200);
delay(1000);
WiFi.begin(SSID, PASSWORD);
Serial.print("Connecting to WiF