mirror of
https://github.com/bakhirev/assayo.git
synced 2024-11-16 16:21:41 +00:00
TEST-1234 some(time): all end
This commit is contained in:
parent
ffe71996f1
commit
c7f3a4768c
123
README.md
123
README.md
|
@ -63,101 +63,98 @@ This file contains data for show a report.
|
|||
The difference between the online and offline format is the presence of a wrapper for strings. The offline format will be pulled up like a `js` file if you just opened `/build/index.html `
|
||||
|
||||
### How to view the report online?
|
||||
|
||||
- Go to the [website](https://assayo.jp/)
|
||||
- Click the “[Demo](https://assayo.jp/demo)” button.
|
||||
- Drag the `log.txt` file into the browser window.
|
||||
- go to the [website](https://assayo.jp/);
|
||||
- click the “[Demo](https://assayo.jp/demo)” button;
|
||||
- drag the `log.txt` file into the browser window;
|
||||
|
||||
### How to view the report offline?
|
||||
- Download this repository.
|
||||
- Drag the `log.txt` file to the `/build` folder.
|
||||
- Run `/build/index.html`
|
||||
- Or drag the `/build` folder to your repository (where the `log.txt` is located). You can change the name. For example, from `/build` to `/report`.
|
||||
- download this repository;
|
||||
- drag the `log.txt` file to the `/build` folder;
|
||||
- run `/build/index.html`;
|
||||
- or drag the `/build` folder to your repository (where the `log.txt` is located). You can change the name. For example, from `/build` to `/report`.
|
||||
|
||||
В этом случае важно, чтобы файл `log.txt` был сгенерирован командой для офлайн просмотра.
|
||||
In this case, it is important that the `log.txt` file is generated by the command for offline viewing.
|
||||
|
||||
### How to rebuild the report build?
|
||||
- Download this repository
|
||||
- Run `npm install`
|
||||
- Run `npm run build`
|
||||
- The new build will be in the `/build` folder
|
||||
- download this repository
|
||||
- run `npm install`
|
||||
- run `npm run build`
|
||||
- the new build will be in the `/build` folder
|
||||
|
||||
### How to view a report on a group of microservices?
|
||||
- Generate for each microservice `log.txt` (`log-1.txt`, `log-2.txt`, `log-3.txt` и т.д.)
|
||||
- See “How to view an online report?”. At the last step, drag all the files at once into the browser window.
|
||||
- See “How to see a report offline?”. At the second step, drag all microservice files (`log-1.txt`, `log-2.txt`, `log-3.txt` and etc.) to the report folder (`/build`).
|
||||
- generate for each microservice file `log.txt` (`log-1.txt`, `log-2.txt`, `log-3.txt` and etc.)
|
||||
- see “How to view an online report?”. At the last step, drag all the files at once into the browser window.
|
||||
- see “How to see a report offline?”. At the second step, drag all microservice files (`log-1.txt`, `log-2.txt`, `log-3.txt` and etc.) to the report folder (`/build`).
|
||||
|
||||
### How to brand the interface?
|
||||
Вы можете написать свою тему для интерфейса. Можно менять:
|
||||
- **Заголовок**. Вы можете указать его в URL-параметре ```title```. Например: ```?title=You Company```
|
||||
- **Визуальную тему**. Для этого нужно подготовить CSS файл с новыми стилями и указать его адрес в URL-параметре ```theme```. Например: ```?theme=//company.com/some.css```. Вы можете использовать имена классов в качестве селекторов. Большинство из них не меняется в при выходе новой версий.
|
||||
- **Язык**. Вы можете указать его в URL-параметре ```lang```. Например: ```?lang=es```
|
||||
You can create your own interface theme. Options:
|
||||
- **Title**. You can set default document title in the URL parameter ```title```. Example: ```?title=You Company```
|
||||
- **Visual theme**. To do this, you need to prepare a CSS file with new styles and specify its URL in the ```theme``` parameter. Example: ```?theme=//company.com/some.css```. You can use class names as selectors. Most of them do not change in new versions.
|
||||
- **Language**. You can set language in the URL parameter ```lang```. Example: ```?lang=es```
|
||||
|
||||
### Как добавить или отредактировать перевод?
|
||||
### How to add or edit a translation?
|
||||
|
||||
Вы можете добавить новый перевод или поправить текущий в разделе ```ts/translations/``` и создать Pull Request.
|
||||
You can add a new translation or correct an existing one in the ```ts/translations/``` folder and create a Pull Request.
|
||||
|
||||
### Как подписывать коммиты?
|
||||
### How to sign commits?
|
||||
|
||||
Следуйте практике [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/). Например:
|
||||
Follow the [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/). Example:
|
||||
```
|
||||
JIRA-1234 feat(profile): Added avatar for user
|
||||
```
|
||||
- номер задачи в таск трекере `(JIRA-1234)`
|
||||
- тип работы `(feat, fix, style, refactor, test, doc и т.д.)`
|
||||
- фича `(profile - раздел сайта, страница или новый функционал, одним словом)`
|
||||
- какую проблему решали `(Added avatar for user)`
|
||||
- task number in the task tracker `(JIRA-1234)`
|
||||
- type of work `(feat, fix, style, refactor, test, doc и т.д.)`
|
||||
- feature `(profile - new page on site or new function, use one (two) short wordor an abbreviation)`
|
||||
- what problem were solved `(Added avatar for user)`
|
||||
|
||||
### Как автоматизировать сбор данных?
|
||||
### How to automate data collection?
|
||||
|
||||
#### Без бекенда
|
||||
- создайте клон нужного вам репозитория;
|
||||
- скопируйте в корень папку `build`;
|
||||
- откройте `build/index.html` в браузере и добавьте в закладки;
|
||||
- добавьте ярлык на `build/assets/ci-cd.sh` в папку автозагрузки (Windows);
|
||||
#### Without backend
|
||||
- create a clone of the repository you need;
|
||||
- copy the `build` folder to the root;
|
||||
- open `build/index.html` in the browser and add it to bookmarks;
|
||||
- add a shortcut to `build/assets/ci-cd.sh` to the startup folder (Windows);
|
||||
|
||||
Каждый раз, при перезагрузке компьютера, скрипт будет обновлять статистику по всем данным, которые автоматически влились в основную ветку.
|
||||
Every time you restart the computer, the script will update statistics on all the data that automatically merged into the main branch.
|
||||
|
||||
### DevOps (CI/CD)
|
||||
|
||||
#### Публичный сервер
|
||||
|
||||
Вы можете выкладывать файл с данными для построения отчёта на публичный URL. А для его визуализации использовать веб-интерфейс сайта [assayo](https://assayo.jp/). Просто укажите адресс, где лежат данные, в URL-параметре ```dump```:
|
||||
#### Public server
|
||||
You can upload the data file for report construction to a public URL. And use the website’s [assayo](https://assayo.jp/?ref=github&lang=en) to visualize it.
|
||||
```
|
||||
https://assayo.jp/demo/?dump=//you_site.com/some/log.txt
|
||||
```
|
||||
|
||||
#### Приватный сервер
|
||||
- скачайте [docker образ](https://hub.docker.com/r/bakhirev/assayo);
|
||||
- поднимите его в локальной сети;
|
||||
- для просмотра отчётов используйте веб-интерфейс указывая ему адресс, где лежат данные, в URL-параметре ```dump```:
|
||||
#### Private server
|
||||
- download the [docker image](https://hub.docker.com/r/bakhirev/assayo);
|
||||
- run it on your local network;
|
||||
- use the web interface to view the reports, set the URL of the data in the URL parameter ```dump```:
|
||||
```
|
||||
http://assayo_url/?dump=//you_url/some/log.txt
|
||||
assayo_url - URL адресс контейнера assayo, он слушает 80 порт;
|
||||
you_url - URL адресс вашего контейнера с логами git;
|
||||
assayo_url - URL of the assayo container, it listens on port 80;
|
||||
you_url - URL of your container with git logs;
|
||||
```
|
||||
|
||||
По умолчанию образ запустится по адресу ```http://127.0.0.1:80/```. Если не получилось проверьте свободен ли у вас 80 порт.
|
||||
#### Обновление Docker-образа
|
||||
By default, the image will run at ```http://127.0.0.1:80/```. If it doesn't work, check if port 80 is free.
|
||||
|
||||
- удилить метрику, аллерты, старые билды;
|
||||
- собрать билд ```npm run build```
|
||||
- собрать образ ```docker build -t assayo .```
|
||||
- визуально проверить образ ```docker run --name assayo -p 80:80 -d assayo```;
|
||||
- поставить тег ```docker tag IMAGE_ID bakhirev/assayo:latest```;
|
||||
- запушить образ в Docker Hub
|
||||
#### How to update the Docker image?
|
||||
- remove metrics, alerts, old builds;
|
||||
- run ```npm run build```
|
||||
- run ```docker build -t assayo .```
|
||||
- visually check the image ```docker run --name assayo -p 80:80 -d assayo```;
|
||||
- add tag ```docker tag IMAGE_ID bakhirev/assayo:latest```;
|
||||
- push image to [Docker Hub](https://hub.docker.com/r/bakhirev/assayo);
|
||||
|
||||
### Релизы, примерно, раз в полгода. Что дальше:
|
||||
### Releases are planned approximately once every six months. What’s next:
|
||||
- more recommendations and achievements;
|
||||
- annual/monthly summaries, report printing;
|
||||
- localization and internationalization;
|
||||
- file analysis;
|
||||
- different roles for statistics (hiding finances);
|
||||
- development of the backend, integration with other systems;
|
||||
|
||||
- больше советов и достижений;
|
||||
- итоги года / месяца, печать отчётов;
|
||||
- локализация и интернационализация;
|
||||
- анализ файлов;
|
||||
- разные роли для статистики (скрытие финансов);
|
||||
- разработка бекенда, интеграции с другими системами;
|
||||
|
||||
### Пожелания, предложения, замечания
|
||||
- telegramm [@bakhirev](https://t.me/bakhirev) (приоритетный способ связи)
|
||||
### Feedback, suggestions, comments
|
||||
- telegramm [@bakhirev](https://t.me/bakhirev) (priority method of communication)
|
||||
- [alexey-bakhirev@yandex.ru](mailto:alexey-bakhirev@yandex.ru)
|
||||
- сайт [https://assayo.jp/](https://assayo.jp/)
|
||||
- website [https://assayo.jp/](https://assayo.jp/)
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ Git создаст файл `log.txt`.
|
|||
- Свежая сборка будет в папке `/build`
|
||||
|
||||
### Как посмотреть отчёт по группе микросервисов?
|
||||
- Сгенерировать для каждого микросервиса `log.txt` (`log-1.txt`, `log-2.txt`, `log-3.txt` и т.д.)
|
||||
- Сгенерировать для каждого микросервиса файл `log.txt` (`log-1.txt`, `log-2.txt`, `log-3.txt` и т.д.)
|
||||
- См. «Как посмотреть отчёт онлайн?». На последнем шаге перетащить сразу все файлы в окно браузера.
|
||||
- См. «Как посмотреть отчёт офлайн?». На втором шаге перетащить все файлы микросервисов (`log-1.txt`, `log-2.txt`, `log-3.txt` и т.д.) в папку отчета (`/build`).
|
||||
|
||||
|
|
17
documents/nostalgie.bat
Normal file
17
documents/nostalgie.bat
Normal file
|
@ -0,0 +1,17 @@
|
|||
@echo off
|
||||
|
||||
for /f "skip=1 usebackq" %%g in (`wmic nicconfig where "description like '%%Check Point%%' and DHCPServer is not null" get DHCPServer ^| findstr /r /v "^$"`) do (
|
||||
if "%%g"=="" (
|
||||
echo Cannot find correct CheckPointGateway
|
||||
goto:eof
|
||||
) else (
|
||||
SET CheckPointGateway=%%g
|
||||
)
|
||||
)
|
||||
echo CheckPointGateway=%CheckPointGateway%
|
||||
for /f "tokens=1,2,3 usebackq" %%g in (`route PRINT ^| findstr "%CheckPointGateway%"`) do (
|
||||
echo %%g | >nul findstr /r /c:"10\..*" || echo %%g | >nul findstr /r /c:"192\.168\..*" || echo %%g | >nul findstr /r /c:"172\.[0-2][0-9]\..*" || echo %%g | >nul findstr /r /c:"172\.3[0-1]\..*" || (
|
||||
route DELETE %%g mask %%h %%i >nul
|
||||
)
|
||||
echo | set /p="."
|
||||
)
|
Binary file not shown.
Binary file not shown.
3
public/assets/menu/arrow_left.svg
Normal file
3
public/assets/menu/arrow_left.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke="#84858D" d="M15.41 16.59 10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 198 B |
3
public/assets/menu/arrow_right.svg
Normal file
3
public/assets/menu/arrow_right.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke="#84858D" d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 188 B |
3
src/assets/menu/arrow_left.svg
Normal file
3
src/assets/menu/arrow_left.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke="#84858D" d="M15.41 16.59 10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 198 B |
3
src/assets/menu/arrow_right.svg
Normal file
3
src/assets/menu/arrow_right.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke="#84858D" d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 188 B |
|
@ -21,8 +21,8 @@ if (module.hot) {
|
|||
module.hot.accept();
|
||||
}
|
||||
|
||||
localization.parse('ru', ru);
|
||||
localization.parse('en', en);
|
||||
localization.parse('ru', ru);
|
||||
|
||||
function renderReactApplication() {
|
||||
// @ts-ignore
|
||||
|
|
|
@ -51,7 +51,6 @@
|
|||
|
||||
&_title {
|
||||
width: 60%;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
&_value {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
class Localization {
|
||||
language:string = 'en';
|
||||
language:string = 'ru';
|
||||
|
||||
translations: any = {};
|
||||
|
||||
|
|
35
src/ts/pages/PageWrapper/components/LightHeader/index.tsx
Normal file
35
src/ts/pages/PageWrapper/components/LightHeader/index.tsx
Normal file
|
@ -0,0 +1,35 @@
|
|||
import React from 'react';
|
||||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import localization from 'ts/helpers/Localization';
|
||||
|
||||
import style from '../../styles/light_header.module.scss';
|
||||
|
||||
function LightHeader() {
|
||||
const { type, page } = useParams<any>();
|
||||
const title = type && page
|
||||
? localization.get(`sidebar.${type}.${page}`)
|
||||
: localization.get('sidebar.team.total');
|
||||
|
||||
return (
|
||||
<header className={style.light_header}>
|
||||
<div
|
||||
className={style.light_header_button}
|
||||
onClick={() => {
|
||||
console.log('x');
|
||||
}}
|
||||
/>
|
||||
<h2 className={style.light_header_title}>
|
||||
{title}
|
||||
</h2>
|
||||
<div
|
||||
className={style.light_header_button}
|
||||
onClick={() => {
|
||||
console.log('x');
|
||||
}}
|
||||
/>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
export default LightHeader;
|
30
src/ts/pages/PageWrapper/components/footer/Button.tsx
Normal file
30
src/ts/pages/PageWrapper/components/footer/Button.tsx
Normal file
|
@ -0,0 +1,30 @@
|
|||
import React from 'react';
|
||||
|
||||
import style from '../../styles/footer.module.scss';
|
||||
|
||||
interface IButtonProps {
|
||||
id: string;
|
||||
title: string;
|
||||
icon: string;
|
||||
}
|
||||
|
||||
function Button({
|
||||
id,
|
||||
title,
|
||||
icon,
|
||||
}: IButtonProps) {
|
||||
console.dir(id);
|
||||
return (
|
||||
<figure className={style.footer_button}>
|
||||
<div
|
||||
className={style.footer_button_icon}
|
||||
style={{ backgroundImage: `url(${icon})` }}
|
||||
/>
|
||||
<figcaption className={style.footer_button_text}>
|
||||
{title}
|
||||
</figcaption>
|
||||
</figure>
|
||||
);
|
||||
}
|
||||
|
||||
export default Button;
|
54
src/ts/pages/PageWrapper/components/footer/index.tsx
Normal file
54
src/ts/pages/PageWrapper/components/footer/index.tsx
Normal file
|
@ -0,0 +1,54 @@
|
|||
import React from 'react';
|
||||
|
||||
import localization from 'ts/helpers/Localization';
|
||||
|
||||
import Button from './Button';
|
||||
import style from '../../styles/footer.module.scss';
|
||||
|
||||
const MENU = [
|
||||
{
|
||||
id: 'team',
|
||||
title: 'sidebar.switch.team',
|
||||
icon: './assets/switch/team.svg',
|
||||
},
|
||||
{
|
||||
id: 'person',
|
||||
title: 'sidebar.switch.person',
|
||||
icon: './assets/switch/person.svg',
|
||||
},
|
||||
{
|
||||
id: 'print',
|
||||
title: 'sidebar.buttons.print',
|
||||
icon: './assets/menu/print.svg',
|
||||
},
|
||||
{
|
||||
id: 'settings',
|
||||
title: 'sidebar.buttons.settings',
|
||||
icon: './assets/menu/setting.svg',
|
||||
},
|
||||
];
|
||||
|
||||
function Footer() {
|
||||
// const { type, page } = useParams<any>();
|
||||
const buttons = MENU.map((config: any) => (
|
||||
<Button
|
||||
key={config.id}
|
||||
id={config.id}
|
||||
title={localization.get(config.title)}
|
||||
icon={config.icon}
|
||||
/>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={style.footer_gap}></div>
|
||||
<div className={style.footer}>
|
||||
<nav className={style.footer_wrapper}>
|
||||
{buttons}
|
||||
</nav>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Footer;
|
|
@ -2,8 +2,10 @@ import React, { ReactNode } from 'react';
|
|||
|
||||
import SideBar from './components/sidebar';
|
||||
import Header from './components/header';
|
||||
import Footer from './components/footer';
|
||||
import Print from './components/Print';
|
||||
import style from './styles/index.module.scss';
|
||||
import LightHeader from './components/LightHeader';
|
||||
|
||||
interface IPageWrapper {
|
||||
children: ReactNode;
|
||||
|
@ -13,14 +15,19 @@ interface IPageWrapper {
|
|||
function PageWrapper({
|
||||
children,
|
||||
}: IPageWrapper) {
|
||||
const isMobile = false;
|
||||
return (
|
||||
<div className={style.page_wrapper}>
|
||||
<SideBar />
|
||||
<Header />
|
||||
{!isMobile && <SideBar />}
|
||||
{isMobile
|
||||
? <LightHeader />
|
||||
: <Header />
|
||||
}
|
||||
<div className={style.page_wrapper_main}>
|
||||
{children}
|
||||
</div>
|
||||
<Print />
|
||||
{isMobile && <Footer />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
72
src/ts/pages/PageWrapper/styles/footer.module.scss
Normal file
72
src/ts/pages/PageWrapper/styles/footer.module.scss
Normal file
|
@ -0,0 +1,72 @@
|
|||
@import 'src/styles/variables.scss';
|
||||
|
||||
.footer {
|
||||
position: fixed;
|
||||
bottom: var(--space-s);
|
||||
left: var(--space-s);
|
||||
right: var(--space-s);
|
||||
text-align: center;
|
||||
pointer-events: none;
|
||||
|
||||
&_wrapper {
|
||||
display: inline-block;
|
||||
width: 300px;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
pointer-events: auto;
|
||||
box-shadow: 0 0 var(--space-l) #F5F7F9, 0 0 var(--space-l) #F5F7F9;
|
||||
border-radius: var(--border-radius-m);
|
||||
background-color: var(--color-black);
|
||||
}
|
||||
|
||||
&_gap {
|
||||
display: block;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
&_button {
|
||||
display: inline-block;
|
||||
width: 25%;
|
||||
text-align: center;
|
||||
white-space: normal;
|
||||
vertical-align: top;
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
|
||||
&_text {
|
||||
font-size: var(--font-s);
|
||||
font-weight: 100;
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0 0 var(--space-m);
|
||||
margin: 0 auto;
|
||||
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
border: none;
|
||||
|
||||
color: #84858D;
|
||||
}
|
||||
|
||||
&_icon {
|
||||
display: block;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
margin: var(--space-s) auto var(--space-xxs);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.footer {
|
||||
&_wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -27,11 +27,21 @@
|
|||
user-select: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
&_print {
|
||||
margin-right: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.header {
|
||||
&_print,
|
||||
&_setting {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.header {
|
||||
display: none;
|
||||
|
|
|
@ -30,6 +30,16 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.page_wrapper {
|
||||
grid-template-areas: 'header header' 'main main';
|
||||
|
||||
&_main {
|
||||
width: calc(100vw - 20px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.page_wrapper {
|
||||
grid-template-areas: 'main main' 'main main';
|
||||
|
|
44
src/ts/pages/PageWrapper/styles/light_header.module.scss
Normal file
44
src/ts/pages/PageWrapper/styles/light_header.module.scss
Normal file
|
@ -0,0 +1,44 @@
|
|||
@import '../../../../styles/variables';
|
||||
|
||||
.light_header {
|
||||
grid-area: header;
|
||||
display: flex;
|
||||
padding: 0;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
white-space: nowrap;
|
||||
background-color: #FFFFFF;
|
||||
|
||||
&_title {
|
||||
font-size: 24px;
|
||||
font-weight: 100;
|
||||
|
||||
display: inline-block;
|
||||
width: calc(100% - 96px);
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
white-space: normal;
|
||||
color: var(--color-black);
|
||||
}
|
||||
|
||||
&_button {
|
||||
display: inline-block;
|
||||
width: 48px;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
vertical-align: top;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% auto;
|
||||
background-position: center;
|
||||
background-image: url('../../../../assets/menu/arrow_right.svg');
|
||||
|
||||
&:first-child {
|
||||
background-image: url('../../../../assets/menu/arrow_left.svg');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
94
src/ts/translations/es/achievements.ts
Normal file
94
src/ts/translations/es/achievements.ts
Normal file
|
@ -0,0 +1,94 @@
|
|||
export default `
|
||||
§ achievements.commitsAfter1500.title: Сова
|
||||
§ achievements.commitsAfter1500.description: 70% коммитов после 15:00
|
||||
§ achievements.commitsBefore1500.title: Ранняя пташка
|
||||
§ achievements.commitsBefore1500.description: 70% коммитов до обеда
|
||||
§ achievements.workEveryTime.title: Раб божий
|
||||
§ achievements.workEveryTime.description: есть коммит на каждый час суток
|
||||
§ achievements.workNotWork.title: Стрельба холостыми
|
||||
§ achievements.workNotWork.description: коммиты есть, а закрытых задач нет
|
||||
§ achievements.userNotWork.title: Залётный
|
||||
§ achievements.userNotWork.description: это не его основной проект
|
||||
§ achievements.userIsDied.title: Мёртвая душа
|
||||
§ achievements.userIsDied.description: работал, но уволился
|
||||
§ achievements.lessTasks.title: Зашел и вышел
|
||||
§ achievements.lessTasks.description: меньше всего закрытых задач
|
||||
§ achievements.moreTasks.title: Батя грит малаца
|
||||
§ achievements.moreTasks.description: больше всего закрытых задач
|
||||
§ achievements.everyMessageLong.title: Мастер красноречия
|
||||
§ achievements.everyMessageLong.description: стабильно самые длинные подписи коммитов
|
||||
§ achievements.everyMessageShort.title: Болтун находка для шпиона
|
||||
§ achievements.everyMessageShort.description: стабильно, самые короткие подписи коммитов
|
||||
§ achievements.shortestName.title: Размер не главное
|
||||
§ achievements.shortestName.description: самое короткое имя
|
||||
§ achievements.longestName.title: Азим Азиз Иль Ам Кадир Имран II
|
||||
§ achievements.longestName.description: самое длинное имя
|
||||
§ achievements.moreCommits.title: Мастер бекапов
|
||||
§ achievements.moreCommits.description: больше всего коммитов
|
||||
§ achievements.lessCommits.title: Редко но метко
|
||||
§ achievements.lessCommits.description: меньше всего коммитов
|
||||
§ achievements.oneCommitOneTask.title: Точно в цель
|
||||
§ achievements.oneCommitOneTask.description: в среднем один коммит на задачу
|
||||
§ achievements.moreLazyDays.title: Мысленно я с вами
|
||||
§ achievements.moreLazyDays.description: больше всего дней без коммитов
|
||||
§ achievements.lessLazyDays.title: Папа Карло
|
||||
§ achievements.lessLazyDays.description: меньше всего дней без коммитов
|
||||
§ achievements.zeroLazyDays.title: Ни единого разрыва
|
||||
§ achievements.zeroLazyDays.description: ни одного дня без коммитов
|
||||
§ achievements.moreWorkDays.title: Ценный работник
|
||||
§ achievements.moreWorkDays.description: больше всего рабочих дней
|
||||
§ achievements.moreScopes.title: Стартапер
|
||||
§ achievements.moreScopes.description: сделал больше всего фичей
|
||||
§ achievements.lessScopes.title: Щегол
|
||||
§ achievements.lessScopes.description: сделал меньше всего фичей
|
||||
§ achievements.moreDaysForTask.title: Улитка на склоне
|
||||
§ achievements.moreDaysForTask.description: работа по задачам идёт медленнее чем у остальных
|
||||
§ achievements.more2DaysForTask.title: Cо слоу
|
||||
§ achievements.more2DaysForTask.description: больше двух дней на задачу
|
||||
§ achievements.moreDaysInProject.title: Старожил
|
||||
§ achievements.moreDaysInProject.description: больше всего дней на проекте
|
||||
§ achievements.lessDaysInProject.title: А это кто?
|
||||
§ achievements.lessDaysInProject.description: меньше всего дней на проекте
|
||||
§ achievements.more90DaysInProject.title: Добро пожаловать
|
||||
§ achievements.more90DaysInProject.description: не уволили на испытательном
|
||||
§ achievements.lessDaysForTask.title: Скорострел
|
||||
§ achievements.lessDaysForTask.description: одна задача занимает меньше дня
|
||||
§ achievements.adam.title: Адам
|
||||
§ achievements.adam.description: первый стабильный сотрудник на проекте
|
||||
§ achievements.more666DaysInProject.title: Чёрт
|
||||
§ achievements.more666DaysInProject.description: отработал 666 дней на проекте
|
||||
§ achievements.more777DaysInProject.title: Азино 3 топора
|
||||
§ achievements.more777DaysInProject.description: отработал 777 дней на проекте
|
||||
§ achievements.moreRefactoring.title: Выпускающий редактор
|
||||
§ achievements.moreRefactoring.description: сделал больше всех меток «рефакторинг»
|
||||
§ achievements.longestMessage.title: А разговоров то было...
|
||||
§ achievements.longestMessage.description: самая длинная подпись коммита за все время
|
||||
§ achievements.moreTasksInDay.title: Спиди-гонщик
|
||||
§ achievements.moreTasksInDay.description: рекорд по количеству закрытых задач в день
|
||||
§ achievements.hasCommitFrom0to7.title: Ночной дозор
|
||||
§ achievements.hasCommitFrom0to7.description: есть коммит на каждый час ночи
|
||||
§ achievements.noCommitOnDay.title: Технический перерыв
|
||||
§ achievements.noCommitOnDay.description: есть определенный час и день в рабочее время в который никогда не комитит
|
||||
§ achievements.hasCommitEveryTime.title: Умер на работе
|
||||
§ achievements.hasCommitEveryTime.description: есть коммит на час каждого дня (включая выходные)
|
||||
§ achievements.commitsAfter1800.title: Делу время
|
||||
§ achievements.commitsAfter1800.description: нет ни одного коммита после 18:00
|
||||
§ achievements.more1488DaysInProject.title: им. Максима Марцинкевича
|
||||
§ achievements.more1488DaysInProject.description: отработал 1488 дней на проекте
|
||||
§ achievements.taskNumber300.title: Знаком с трактористом
|
||||
§ achievements.taskNumber300.description: первый взял в работу задачу с номером 300
|
||||
§ achievements.moreFix.title: Bug hunter
|
||||
§ achievements.moreFix.description: больше всего закрытых багов
|
||||
§ achievements.lessWorkDays.title: Дальше без меня
|
||||
§ achievements.lessWorkDays.description: меньше всего рабочих дней
|
||||
§ achievements.moreCreateCode.title: Созидатель
|
||||
§ achievements.moreCreateCode.description: склонен больше остальных добавлять код
|
||||
§ achievements.moreRemoveCode.title: Разрушитель
|
||||
§ achievements.moreRemoveCode.description: склонен больше остальных удалять код
|
||||
§ achievements.moreChangeCode.title: Реформатор
|
||||
§ achievements.moreChangeCode.description: склонен больше остальных изменять код
|
||||
§ achievements.moreStyle.title: Полиция моды
|
||||
§ achievements.moreStyle.description: склонен больше остальных изменять CSS
|
||||
§ achievements.moreOnHoliday.title: Нет жизни
|
||||
§ achievements.moreOnHoliday.description: относительно много коммитов в нерабочее время
|
||||
`;
|
30
src/ts/translations/es/common.ts
Normal file
30
src/ts/translations/es/common.ts
Normal file
|
@ -0,0 +1,30 @@
|
|||
export default `
|
||||
§ uiKit.console.button: Copiar
|
||||
§ uiKit.console.notification: El texto ha sido copiado
|
||||
§ uiKit.dataLoader.page: Página
|
||||
§ uiKit.dataLoader.size: Mostrando hasta
|
||||
§ uiKit.dataLoader.from: de
|
||||
§ uiKit.dataLoader.all: Mostrar todo
|
||||
§ uiKit.hoursChart.work: horario laboral normal (lunes a viernes, de 07:00 a 20:00)
|
||||
§ uiKit.hoursChart.weekend: días o horario antes/después del día laboral
|
||||
§ uiKit.hoursChart.days: número total de commits en un día y una hora específica
|
||||
§ uiKit.page.remove: Eliminar
|
||||
§ uiKit.races.go: ¡Adelante!
|
||||
§ uiKit.nothingFound.common.title: No hay o no hay suficientes datos para mostrar
|
||||
§ uiKit.nothingFound.common.description: El sistema procesará más datos si los commits se firman con el formato de [Git commit message convention|https://www.conventionalcommits.org/en/v1.0.0/]. Patrón:
|
||||
§ uiKit.nothingFound.common.console: Número_de_tarea tipo(característica): descripción
|
||||
§ uiKit.nothingFound.common.example: Por ejemplo:
|
||||
§ uiKit.nothingFound.personal.title: No hay datos para este colaborador
|
||||
§ uiKit.nothingFound.personal.description1:
|
||||
El no hizo cambios todos los días laborables y obtuvo el estado “Asistente”.
|
||||
El trabajo de los colaboradores con este estatus en este proyecto puede desestimarse, ya que su aporte en el conjunto es insignificante.
|
||||
|
||||
§ uiKit.nothingFound.staff.description2:
|
||||
Поэтому система не рассчитывает для него ряд показателей.
|
||||
Если это ошибка и данного сотрудника нужно рассчитать как обычного, перейдите в раздел «Настройки» и измените его тип.
|
||||
|
||||
§ common.title: Estadísticas git
|
||||
§ common.filters: Filtros
|
||||
§ common.notifications.save: Cambios guardados
|
||||
§ common.notifications.setting: Ajustes guardados
|
||||
`;
|
15
src/ts/translations/es/index.ts
Normal file
15
src/ts/translations/es/index.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import achievements from './achievements';
|
||||
import common from './common';
|
||||
import navigation from './navigation';
|
||||
import recommendations from './recommendations';
|
||||
import settings from './settings';
|
||||
import pages from './pages';
|
||||
|
||||
export default [
|
||||
achievements,
|
||||
common,
|
||||
navigation,
|
||||
recommendations,
|
||||
settings,
|
||||
pages,
|
||||
].join('');
|
37
src/ts/translations/es/navigation.ts
Normal file
37
src/ts/translations/es/navigation.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
export default `
|
||||
§ sidebar.switch.team: Команда
|
||||
§ sidebar.switch.person: Сотрудник
|
||||
§ sidebar.buttons.settings: Настройки
|
||||
§ sidebar.buttons.print: Печать
|
||||
§ sidebar.filters.all: всё время
|
||||
§ sidebar.filters.year: год
|
||||
§ sidebar.filters.halfYear: пол года
|
||||
§ sidebar.filters.month: месяц
|
||||
§ sidebar.filters.week: неделя
|
||||
§ sidebar.team.total: Общая информация
|
||||
§ sidebar.team.scope: Фичи
|
||||
§ sidebar.team.author: Сотрудники
|
||||
§ sidebar.team.type: Типы задач
|
||||
§ sidebar.team.pr: Влитие кода
|
||||
§ sidebar.team.day: По дням
|
||||
§ sidebar.team.week: По неделям
|
||||
§ sidebar.team.month: По месяцам
|
||||
§ sidebar.team.tree: Анализ файлов
|
||||
§ sidebar.team.hours: Расписание
|
||||
§ sidebar.team.commits: Все коммиты
|
||||
§ sidebar.team.changes: Все изменения
|
||||
§ sidebar.team.words: Популярные слова
|
||||
§ sidebar.team.top: Викторина
|
||||
§ sidebar.team.settings: Настройки
|
||||
§ sidebar.person.total: Общая информация
|
||||
§ sidebar.person.money: Стоимость работы
|
||||
§ sidebar.person.speed: Скорость
|
||||
§ sidebar.person.day: По дням
|
||||
§ sidebar.person.week: По неделям
|
||||
§ sidebar.person.month: По месяцам
|
||||
§ sidebar.person.hours: Расписание
|
||||
§ sidebar.person.commits: Все коммиты
|
||||
§ sidebar.person.changes: Все изменения
|
||||
§ sidebar.person.words: Популярные слова
|
||||
§ sidebar.person.settings: Настройки
|
||||
`;
|
201
src/ts/translations/es/pages.ts
Normal file
201
src/ts/translations/es/pages.ts
Normal file
|
@ -0,0 +1,201 @@
|
|||
export default `
|
||||
§ page.welcome.step1: Выполните команду в корне вашего проекта
|
||||
§ page.welcome.step3: Перетащите
|
||||
§ page.welcome.step4: файл log.txt на эту страницу
|
||||
§ page.welcome.description: Git создаст файл log.txt. Он содержит данные для построения отчёта. Или git shortlog -s -n -e если отчёт вам не нужен. Создайте файл [.mailmap|https://git-scm.com/docs/gitmailmap] в корне проекта, чтобы объединить статистику по сотрудникам.
|
||||
§ page.welcome.warning1: Сервис *НЕ ХРАНИТ* и *НЕ ПЕРЕДАЁТ* ваши данные. Все расчёты выполняются локально в вашем браузере прямо на вашей машине.
|
||||
§ page.welcome.warning2: Сервис *НЕ СОБИРАЕТ СТАТИСТИКУ* по проектам. Вы можете отключить интернет, проверить трафик и даже собрать локальный билд из [исходников|https://github.com/bakhirev/assayo].
|
||||
§ page.common.words.title: Статистика по словам
|
||||
§ page.common.words.description: самое популярное слово. Встречается $1 раза.
|
||||
§ page.common.commits.title: Количество коммитов по дням
|
||||
§ page.common.commits.description: ($1) самый продуктивный день по числу коммитов.
|
||||
§ page.common.commits.title2: $1 сделано коммитов: $2
|
||||
§ page.common.filter.allUsers: Не имеет значения
|
||||
§ page.print.modal.title: Что распечатываем?
|
||||
§ page.print.modal.page: Текущую страницу
|
||||
§ page.print.modal.type: Текущий раздел
|
||||
§ page.print.modal.all: Всю статистику
|
||||
§ page.print.modal.cancel: Отмена
|
||||
§ page.print.tableOfContents: Оглавление
|
||||
§ page.print.title: Отчёт по git-репозиторию «$1»
|
||||
§ page.print.description: Данные для отчёта были получены из истории коммитов.
|
||||
§ page.team.author.title: Статистика по сотрудникам
|
||||
§ page.team.author.description1: *Часть статистики* (скорость работы, затраченные деньги и т.п.) *по сотрудникам с типом «Помощник» не считается*, т.к. это эпизодическая роль в проекте. Предполагаем, что они не влияют на проект, а их правками можно пренебречь на фоне общего объема работы.
|
||||
§ page.team.author.description2: *Сортировка по умолчанию* — это сортировка по количеству задач и группам (текущие, уволенные, помогающие сотрудники).
|
||||
§ page.team.author.types: Тип работ
|
||||
§ page.team.author.commits: Коммитов
|
||||
§ page.team.author.commitsSmall: коммитов
|
||||
§ page.team.author.tasks: Задач
|
||||
§ page.team.author.tasksSmall: задач
|
||||
§ page.team.author.workedLosses: Дни с коммитами и без
|
||||
§ page.team.author.worked: работа
|
||||
§ page.team.author.losses: дни без коммитов
|
||||
§ page.team.author.days: дней
|
||||
§ page.team.author.daysForTask: Дней на задачу
|
||||
§ page.team.author.scopes: Фич
|
||||
§ page.team.author.moneyAll: Получил
|
||||
§ page.team.author.moneyWorked: Отработал
|
||||
§ page.team.author.moneyLosses: Переплата
|
||||
§ page.team.hours.title: Распределение коммитов в течении каждого дня недели
|
||||
§ page.team.month.title: Календарь работы по проекту
|
||||
§ page.team.scope.title: Статистика по фичам
|
||||
§ page.team.scope.scope: Фича
|
||||
§ page.team.scope.days: Раб. дней
|
||||
§ page.team.scope.authorsDays: Человеко-дней
|
||||
§ page.team.scope.tasks: Задач
|
||||
§ page.team.scope.commits: Коммитов
|
||||
§ page.team.scope.commitsSmall: коммитов
|
||||
§ page.team.scope.types: Тип работ
|
||||
§ page.team.scope.authors: Персональный вклад
|
||||
§ page.team.scope.cost: Стоимость
|
||||
§ page.team.type.title: Статистика по типам задач
|
||||
§ page.team.type.description: *Персональный вклад* считается по количеству коммитов, а не объему измененных строк или файлов. Поэтому следует так же смотреть раздел «Анализ файлов», чтобы оценить масштаб изменений.
|
||||
§ page.team.type.type: Тип работы
|
||||
§ page.team.type.tasks: Задач
|
||||
§ page.team.type.tasksSmall: задач
|
||||
§ page.team.type.days: Дней
|
||||
§ page.team.type.daysSmall: дней
|
||||
§ page.team.type.authorsDays: Человеко-дней
|
||||
§ page.team.type.commits: Коммитов
|
||||
§ page.team.type.authors: Персональный вклад
|
||||
§ page.team.total.titleA: Объём работ
|
||||
§ page.team.total.titleB: Стоимость
|
||||
§ page.team.total.daysWorked.title: человеко-дней
|
||||
§ page.team.total.daysWorked.description: Учтены только дни, в которые делались коммиты
|
||||
§ page.team.total.commits.title: коммитов
|
||||
§ page.team.total.commits.description: Удалённые ветки не считаются
|
||||
§ page.team.total.daysLosses.title: дней без коммитов
|
||||
§ page.team.total.daysLosses.description: Все дни минус: праздники, выходные, отпуск, дни с коммитами
|
||||
§ page.team.total.employment.title: работает / уволилось
|
||||
§ page.team.total.employment.description: Если сотрудник в течении месяца не сделал ни одного коммита, он считается уволенным
|
||||
§ page.team.total.moneyAll.title: общая
|
||||
§ page.team.total.moneyAll.description: Суммарные затраты на зп
|
||||
§ page.team.total.moneyWorked.title: фактическая
|
||||
§ page.team.total.moneyWorked.description: Фактически отработанные дни умноженные на среднюю зп
|
||||
§ page.team.total.moneyLosses.title: возможная переплата
|
||||
§ page.team.total.moneyLosses.description: Оплаченные рабочие дни, когда коммитов не было
|
||||
§ page.team.total.weekendPayment.title: работа на выходных
|
||||
§ page.team.total.weekendPayment.description: Суммарная переплата за работу в выходные дни
|
||||
§ page.team.total.workSpeed.title: задач в день
|
||||
§ page.team.total.workSpeed.description: Средняя скорость работы команды при текущем составе сотрудников
|
||||
§ page.team.total.moneySpeed.title: в месяц
|
||||
§ page.team.total.moneySpeed.description: Прогнозируемая сумма выплаты на зп при текущем составе сотрудников без учета налогов и сопутствующих затрат
|
||||
§ page.team.total.description1: *Человеко-дни* — это работа одного сотрудника в течение одного рабочего дня. Например, за один календарный день, команда из трех сотрудников выдает объем работы в три человеко-дня.
|
||||
§ page.team.total.description2: *Днями прогулов* считаются только рабочие дни, когда коммиты могли бы быть сделаны. Выходные, государственные праздники и отпуска в расчёте не участвуют.
|
||||
§ page.team.total.description3: Карточка *работает и уволилось* показывает фактический состав сотрудников, которые постоянно участвуют в работе. Кроме этого, есть «помощники» — это сотрудники, как правило другой специализации, которые могут иногда делать коммиты в проект.
|
||||
§ page.team.total.description4: *Переплатой* считаются только рабочие дни, когда коммиты могли бы быть сделаны. Выходные, государственные праздники и отпуска в расчёте не участвуют. Именно поэтому переплата + фактическая стоимость != общей. В общей стоимости заложена оплата выходных, государственных праздников и отпусков.
|
||||
§ page.team.total.description5: *Работой на выходных* считается по коэффициенту х2 от оплаты обычного дня. Выше отображена именно переплата (х1), т.к. сам факт переработки в данном контексте не интересен. Мы не смотрим скорость сжигания бюджета. Мы смотрим переплату при увеличении скорости работы.
|
||||
§ page.team.tree.title: Дерево проекта с учётом выбранных фильтров
|
||||
§ page.team.tree.filters.author: Сотрудник
|
||||
§ page.team.tree.filters.commits: Количество коммитов
|
||||
§ page.team.tree.filters.help: Минимальное количество коммитов, которое сделал сотрудник в файле
|
||||
§ page.team.tree.filters.all: Все сотрудники
|
||||
§ page.team.tree.add: Кто добавлял
|
||||
§ page.team.tree.change: Кто менял
|
||||
§ page.team.tree.remove: Кто удалял
|
||||
§ page.team.tree.line: строк
|
||||
§ page.team.tree.lineAdd: добавили
|
||||
§ page.team.tree.lineRemove: изменили
|
||||
§ page.team.week.title: Статистика по неделям
|
||||
§ page.team.week.date: Дата
|
||||
§ page.team.week.numberTasks: Количество задач
|
||||
§ page.team.week.people: Количество человек
|
||||
§ page.team.week.line: Изменение строк
|
||||
§ page.team.week.days: Дни с коммитами и без
|
||||
§ page.team.week.lossesDetails: Кто не коммитил
|
||||
§ page.team.week.add: добавили
|
||||
§ page.team.week.change: изменили
|
||||
§ page.team.week.remove: удалили
|
||||
§ page.team.week.hasCommits: были коммиты
|
||||
§ page.team.week.hasNotCommits: небыло коммитов
|
||||
§ page.team.week.days: дней
|
||||
§ page.team.week.tasks: задач
|
||||
§ page.team.pr.task: Задача
|
||||
§ page.team.pr.tasks: задач
|
||||
§ page.team.pr.firstCommitTime: Первый коммит
|
||||
§ page.team.pr.lastCommitTime: Последний
|
||||
§ page.team.pr.workDays: Дней разработки
|
||||
§ page.team.pr.delayDays: Дней ожидания влития
|
||||
§ page.team.pr.commits: Коммиты
|
||||
§ page.team.pr.date: Дата влития
|
||||
§ page.team.pr.mergeAuthor: Влил
|
||||
§ page.team.pr.author: Сотрудник
|
||||
§ page.team.pr.middleTimeRelease: Среднее время поставки (дни)
|
||||
§ page.team.pr.work: разработка
|
||||
§ page.team.pr.delay: ожидание
|
||||
§ page.team.pr.days: дней
|
||||
§ page.team.pr.oneTaskDays: Время потраченное на одну задачу
|
||||
§ page.team.pr.description1: *Время разработки* это разница времени от первого до последнего коммита по задаче. Не важно были перерывы в несколько дней между коммитами или нет. Сам факт какого-либо коммита увеличивает время.
|
||||
§ page.team.pr.description2: *Время ожидания* это время между последним коммитом и влитием кода. Оно показывает фактический простой в ожидании чего-либо.
|
||||
§ page.team.pr.description3: *Зачем отображать время разработки* без разбивки на кодинг и код-ревью? Затем, чтобы показать бизнесу фактическое время поставки кода. Ожидание тестирования, замечания на ревью, проблемы DevOps и прочие несовершенства процесса, как раз уже заложены в этот срок.
|
||||
§ page.team.pr.statByAuthors: Статистика по сотрудникам
|
||||
§ page.team.pr.longDelay: Длительное ожидание влития
|
||||
§ page.person.print.photo.title: Фотография
|
||||
§ page.person.print.photo.description: место для фотографии
|
||||
§ page.person.total.title: Основные характеристики
|
||||
§ page.person.total.daysWorked.title: дней работы
|
||||
§ page.person.total.daysWorked.description: Учтены только дни, в которые делались коммиты
|
||||
§ page.person.total.tasks.title: задач
|
||||
§ page.person.total.tasks.description: Если коммиты правильно подписаны
|
||||
§ page.person.character.title: Персонаж
|
||||
§ page.person.achievement.title: Достижения
|
||||
§ page.person.achievement.positive: Позитивные
|
||||
§ page.person.achievement.normal: Нейтральные
|
||||
§ page.person.achievement.negative: Негативные
|
||||
§ page.person.achievement.description: Чем больше сотрудник набрал отрицательных достижений, тем больше вероятность, что ситуация нестандартная. Возможно, стоит изменить режим его работы, задачи или отчётность. Следует поговорить с ним и узнать, какие проблемы мешают его работе.
|
||||
§ page.person.gets.title: Взятые геты:
|
||||
§ page.person.gets.description: «Взять гет» в данном случае означает первым оставить коммит к задаче с «красивым» номером.
|
||||
§ page.person.business.days.title: дней работы
|
||||
§ page.person.business.days.description: Учтены только дни, в которые делались коммиты
|
||||
§ page.person.business.tasks.title: задач
|
||||
§ page.person.business.tasks.description: Если коммиты правильно подписаны
|
||||
§ page.person.business.losses.title: дней без коммитов
|
||||
§ page.person.business.losses.description: Все дни минус: праздники, выходные, отпуск, дни с коммитами
|
||||
§ page.person.business.commits.title: коммитов
|
||||
§ page.person.business.commits.description: Удалённые ветки не считаются
|
||||
§ page.person.business.time.description: Время от первого, до последнего коммита (в том числе, нерабочие дни)
|
||||
§ page.person.business.time.title: Дней на проекте:
|
||||
§ page.person.business.time.dismissed: (уволен)
|
||||
§ page.person.business.time.staff: (не в команде)
|
||||
§ page.person.business.achievements: Достижения
|
||||
§ page.person.changes.title: Достижения
|
||||
§ page.person.changes.description:
|
||||
При некоторых видах форматирования git отмечает строки как «удалённые» и «добавленные»,
|
||||
хотя на самом деле они были «изменены». Поэтому, если вы провели большой рефакторинг,
|
||||
git может показать малое количество изменений в статистике, а фактический результат
|
||||
будет отмечен, как скачок «удаленных» и «добавленных» строк.
|
||||
§ page.person.changes.description: Список коммитов и количество изменений в них за этот день:
|
||||
§ page.person.commits.title: Список коммитов:
|
||||
§ page.person.money.title.total: За всё время
|
||||
§ page.person.money.title.middle: Средняя стоимость
|
||||
§ page.person.money.moneyAll.title: получил
|
||||
§ page.person.money.moneyAll.description: Предполагаемая сумма зп с проекта (см. настройки)
|
||||
§ page.person.money.moneyWorked.title: отработал
|
||||
§ page.person.money.moneyWorked.description: Фактически отработанные дни умноженные на среднюю зп
|
||||
§ page.person.money.moneyLosses.title: возможная переплата
|
||||
§ page.person.money.moneyLosses.description: Дни без коммитов умноженные на среднюю зп
|
||||
§ page.person.money.tasks.title: задача
|
||||
§ page.person.money.tasks.description: Количество закрытых задач к стоимости дня
|
||||
§ page.person.money.commits.title: коммит
|
||||
§ page.person.money.commits.description: Количество коммитов к стоимости рабочего дня
|
||||
§ page.person.speed.task: Одна задача в среднем это
|
||||
§ page.person.speed.max: Максимальная скорость в день
|
||||
§ page.person.speed.days.title: дней
|
||||
§ page.person.speed.days.description: Имеются ввиду рабочие дни, если коммиты правильно подписаны
|
||||
§ page.person.speed.commits.title: коммитов
|
||||
§ page.person.speed.commits.description: Отрезаны 10% максимальных и минимальных значений
|
||||
§ page.person.speed.line.title: строк кода
|
||||
§ page.person.speed.line.description: Отрезаны 10% максимальных и минимальных значений
|
||||
§ page.person.speed.tasks.title: задач
|
||||
§ page.person.speed.tasks.description: Задача может быть не доделана, но работа по ней должна быть
|
||||
§ page.person.speed.maxCommits.title: коммитов
|
||||
§ page.person.speed.maxCommits.description: Задача может быть не доделана, но работа по ней должна быть
|
||||
§ page.person.hours.title: Распределение коммитов в течении каждого дня недели
|
||||
§ page.person.week.date: Дата
|
||||
§ page.person.week.tasks: Количество задач
|
||||
§ page.person.week.workDays: Дни с коммитами
|
||||
§ page.person.week.taskInDay: Задач в день
|
||||
§ page.person.week.days: дней
|
||||
§ page.person.week.workDay: будни
|
||||
§ page.person.week.weekends: выходные
|
||||
`;
|
506
src/ts/translations/es/recommendations.ts
Normal file
506
src/ts/translations/es/recommendations.ts
Normal file
|
@ -0,0 +1,506 @@
|
|||
export default `
|
||||
§ recommendations.title
|
||||
Рекомендации и факты
|
||||
|
||||
§ recommendations.timestamp.firstCommit.description
|
||||
сделал первый коммит
|
||||
|
||||
День недели: $1
|
||||
|
||||
§ recommendations.timestamp.lastCommit.description
|
||||
сделал последний коммит
|
||||
|
||||
День недели: $1
|
||||
|
||||
§ recommendations.timestamp.common.title: $1 дней
|
||||
§ recommendations.timestamp.allDays.description: от первого до последнего коммита (включая выходные и праздники).
|
||||
§ recommendations.timestamp.lossesDays.description: без коммитов, даже с учётом выходных, отпуска и государственных праздников.
|
||||
§ recommendations.timestamp.weekendDays.description
|
||||
работы на выходных
|
||||
|
||||
# Почему это плохо:
|
||||
- заказчик платит двойную цену за работу в выходной день;
|
||||
- сотрудники быстрее выгорают;
|
||||
|
||||
§ recommendations.timestamp.regularWeekendWord.title: Регулярные переработки
|
||||
§ recommendations.timestamp.sometimeWeekendWord.title: Бывают переработки
|
||||
§ recommendations.timestamp.weekendWord.description
|
||||
Вероятно, стоит сменить менеджера проекта, аналитика и архитектора.
|
||||
|
||||
# Почему это плохо:
|
||||
- заказчик платит двойную цену за работу в выходной день;
|
||||
- качество продукта, как правило, получается низкое;
|
||||
- часть сотрудников увольняется;
|
||||
- из-за спешки появляются новые ошибки;
|
||||
|
||||
# Скорее всего:
|
||||
- неверно оценили сроки в самом начале;
|
||||
- тех. задание отсутствует;
|
||||
- слабая аналитика;
|
||||
- слабая архитектура (архитектора не нанимали, а команда состоит из мидл разработчиков);
|
||||
- сначала начали писать код, потом проектировать;
|
||||
- нет нормальных процессов, чтобы понять ошибки;
|
||||
|
||||
§ recommendations.timestamp.neverWeekendWord.title: Обычно без переработок
|
||||
§ recommendations.timestamp.neverWeekendWord.description
|
||||
Но иногда бывают.
|
||||
|
||||
# Почему это плохо:
|
||||
- заказчик платит двойную цену за работу в выходной день;
|
||||
- сотрудники быстрее выгорают;
|
||||
|
||||
§ recommendations.scope.parallelism.not.title
|
||||
Нет параллельных работ
|
||||
|
||||
§ recommendations.scope.parallelism.not.description
|
||||
любую фичу в один момент времени делает один человек.
|
||||
|
||||
# Метод расчёта:
|
||||
- человеко-дни делятся на фактические дни для каждой фичи;
|
||||
- находим среднее арифметическое;
|
||||
- если результат меньше 1.3 считаем, что параллельных работ в рамках большинства фичей обычно нет;
|
||||
|
||||
# Почему это плохо:
|
||||
- повышается bus factor;
|
||||
- сотрудники медленнее развиваются;
|
||||
- трудно качественно проверить работу сотрудника;
|
||||
|
||||
# Почему это хорошо:
|
||||
- появляются эксперты, которые очень глубоко погружены в предметную область и могут предложить более качественные решения;
|
||||
- скорее всего не бывает merge конфликтов;
|
||||
- проект может очень быстро параллельно развиваться в разные стороны;
|
||||
|
||||
§ recommendations.scope.parallelism.has.title
|
||||
Часть работ параллельно
|
||||
|
||||
§ recommendations.scope.parallelism.has.description
|
||||
Иногда фичу делают одновременно несколько человек.
|
||||
|
||||
# Метод расчёта:
|
||||
- человеко-дни делятся на фактические дни для каждой фичи;
|
||||
- находим среднее арифметическое;
|
||||
- если результат от 1.3 до 2.0 считаем, что часть работ в рамках разных фичей иногда делается параллельно;
|
||||
|
||||
|
||||
§ recommendations.scope.parallelism.every.title
|
||||
Параллельные работы
|
||||
|
||||
§ recommendations.scope.parallelism.every.description
|
||||
любую фичу в один момент времени делают несколько человек
|
||||
|
||||
# Метод расчёта:
|
||||
- человеко-дни делятся на фактические дни для каждой фичи;
|
||||
- находим среднее арифметическое;
|
||||
- если результат больше двух считаем, что большая часть работ в рамках разных фичей обычно делается параллельно;
|
||||
|
||||
|
||||
§ recommendations.scope.money
|
||||
в такую сумму можно оценить работу по данному проекту.
|
||||
|
||||
# Метод расчёта:
|
||||
- человеко-дни затраченные на разработку умножаются на индивидуальную зарплату разработчиков;
|
||||
|
||||
Изменить зарплату каждого разработчика, для более точной суммы, можно в разделе «Настройки»
|
||||
|
||||
# Это много или мало?
|
||||
Для ответа на этот вопрос, нужно ответить на следующие:
|
||||
- Можно ли за эти деньги было купить готовое решение?
|
||||
- Можно ли за эти деньги сделать более хороший продукт?
|
||||
|
||||
Если ответ на оба вопроса «да», то возможно, разработка с нуля не стоила потраченных на неё денег.
|
||||
|
||||
§ recommendations.scope.bus.everyHasOne.title
|
||||
Bus factor = 1
|
||||
|
||||
§ recommendations.scope.bus.everyHasOne.description
|
||||
В большинство фич погружен один человек.
|
||||
Надо переключать людей.
|
||||
|
||||
# Почему это плохо:
|
||||
- если сотрудники будут увольняться, будет трудно продолжить их работу;
|
||||
- невозможно контролировать качество его кода;
|
||||
|
||||
# Как делается выборка:
|
||||
- более 80% коммитов в фичу делает один человек;
|
||||
- проект имеет более 60% таких фичей;
|
||||
|
||||
§ recommendations.scope.bus.oneMaintainer
|
||||
в фичи погружен один человек.
|
||||
|
||||
# Почему это плохо:
|
||||
- если он уволится, будет трудно продолжить разработку;
|
||||
- снижается качество code-review;
|
||||
- трудно запараллелить разработку при необходимости;
|
||||
|
||||
# Как делается выборка:
|
||||
- более 80% коммитов в фичу сделал один человек;
|
||||
|
||||
§ recommendations.scope.types.process.title
|
||||
Плохие процессы
|
||||
|
||||
§ recommendations.scope.types.process.description
|
||||
Большинство фич содержат один тип задач.
|
||||
|
||||
§ recommendations.scope.types.one
|
||||
фичи содержат один тип задач.
|
||||
|
||||
§ recommendations.scope.types.common
|
||||
Возможно, разработчики неправильно подписывают коммиты или менеджер заводит один и тот же тип задач.
|
||||
|
||||
# Почему это важно:
|
||||
- невозможно передать поддержку другой команде;
|
||||
- невозможно выпустить "коробочную" версию;
|
||||
- сильная зависимость от конкретных разработчиков;
|
||||
- большое количество ошибок и низкое качество кода;
|
||||
- вероятное замедление разработки в будущем;
|
||||
|
||||
# В чём ошибка менеджера:
|
||||
- взгляд на продукт, только с позиции «работающей демки»;
|
||||
|
||||
# Что должно быть:
|
||||
- тесты;
|
||||
- ошибки (выявленные по результатам тестов);
|
||||
- рефакторинг (т.к. архитектура может измениться);
|
||||
- документация;
|
||||
- правки стиля (как результат опроса фокус-группы);
|
||||
|
||||
§ recommendations.scope.plan.title
|
||||
Постройте долгосрочный план
|
||||
|
||||
§ recommendations.scope.plan.description
|
||||
с учетом архитектуры.
|
||||
|
||||
При том опираться этот план должен сразу на самые трудные задачи.
|
||||
|
||||
# Почему отсутствие плана плохо:
|
||||
- сотрудники делают минимально работающую версию, не закладывая точки расширения. После этого пишется не масштабируемый код, который тормозит следующие фичи;
|
||||
|
||||
# В чём ошибка менеджера:
|
||||
- он не показал, как продукт будет развиваться далее и в каких точках будет рост;
|
||||
|
||||
# Как должно быть:
|
||||
- составляется глобальный план развития продукта;
|
||||
- составляется глобальный план развития архитектуры (с разработчиками и DBA);
|
||||
- на уровне схем сразу проговариваются моменты, которые могут сильно измениться;
|
||||
|
||||
§ recommendations.scope.cost.title
|
||||
Оцените инвестиции в фичу
|
||||
|
||||
§ recommendations.scope.cost.description
|
||||
с количеством потенциальной прибыли.
|
||||
|
||||
Фичи которые дорого стоят в разработке, но приносят мало прибыли, возможно, стоит отложить или вообще отменить. Это сделает проект более коммерчески успешным.
|
||||
|
||||
§ recommendations.author.lotOfLazy
|
||||
пишет слишком мало кода.
|
||||
|
||||
# Может уволить?
|
||||
- он тимлид, архитектор, аналитик?
|
||||
- это его основной проект?
|
||||
- есть какие-то зависимости от него?
|
||||
|
||||
# Почему нет смысла исправлять
|
||||
Суммарные затраты на разработчика уже больше чем прибыль от его работы.
|
||||
Если мы считаем, что объективных помех его работе не было, то человек либо не хочет работать вообще, либо работает на двух проектах одновременно.
|
||||
Увольнение и замена новым сотрудником выглядит оправданным с точки зрения общей статистики.
|
||||
|
||||
§ recommendations.author.manyLazy
|
||||
пишет мало кода. Нужно взять на контроль.
|
||||
|
||||
# Как делается выборка:
|
||||
- на тестовых выборках хороший программист пишет код больше 80% времени;
|
||||
- в данном случае показатель от 60% до 80%;
|
||||
|
||||
# Как контролировать:
|
||||
- дробить задачи на 1..2 дня;
|
||||
- каждый день спрашивать статус;
|
||||
- убедиться, что задачи хорошо расписаны и готовы к началу разработки;
|
||||
- устроить парное программирование, чтобы проверить фактическую скорость;
|
||||
|
||||
§ recommendations.author.oneTypeMans
|
||||
получает слишком однообразные задачи по типу. Может выгореть.
|
||||
|
||||
# Почему это важно:
|
||||
- если сотрудник выгорит, его скорость работы снизится;
|
||||
- замедляется профессиональный рост;
|
||||
- повышается вероятность увольнения;
|
||||
|
||||
# Как делается выборка:
|
||||
- для каждого коммита определятся тип задачи;
|
||||
- если больше 70% задач одного типа, значит человек делает одно и тоже;
|
||||
|
||||
§ recommendations.author.workToday.title: Работает $1
|
||||
§ recommendations.author.workToday.description
|
||||
над проектом в данный момент.
|
||||
|
||||
# Состав:
|
||||
- $1;
|
||||
|
||||
# Почему именно они:
|
||||
- рабочих дней более 50%;
|
||||
- работали в течении последних 30 дней;
|
||||
|
||||
§ recommendations.author.dismissed.title: Уволилось $1
|
||||
§ recommendations.author.dismissed.description
|
||||
или работало короткий промежуток времени.
|
||||
|
||||
# Состав:
|
||||
- $1;
|
||||
|
||||
# Почему именно они:
|
||||
- работали в нормальном ритме (видимо, это их основной репозиторий);
|
||||
- за последний месяц не было ни одного коммита;
|
||||
- отпуск обычно 14 дней (их отсутствие не похоже на отпуск);
|
||||
|
||||
§ recommendations.author.staff.title: Помогают $1
|
||||
§ recommendations.author.staff.description
|
||||
Люди другой специализации, которые что-либо коммитили.
|
||||
|
||||
# Состав:
|
||||
- $1;
|
||||
|
||||
# Почему именно они:
|
||||
- это не open-source проект;
|
||||
- рабочих дней менее 15% от общего числа;
|
||||
- изменяют примерно одни и те же файлы;
|
||||
|
||||
§ recommendations.author.projectType.openSource.title
|
||||
Открытый проект
|
||||
|
||||
§ recommendations.author.projectType.openSource.description
|
||||
пять дней в неделю тут не работают.
|
||||
|
||||
Проект может быть и закрытым, просто такой темп работы обычно у открытых библиотек на GitHub.
|
||||
|
||||
# Метод оценки:
|
||||
- берется статистика по всем активным разработчикам;
|
||||
- подсчитывается среднее число дней работы и без коммитов;
|
||||
- у open-source библиотек рабочих дней обычно максимум 15..20%;
|
||||
|
||||
# Последствия
|
||||
Для проектов, где работа не постоянна, нет смысла во многих показателях. Поэтому показатели без коммитов, скорости и т.п. будут скрыты.
|
||||
|
||||
Как правило, оценку таких проектов делают перед началом разработки своей закрытой версии. Самые интересные показатели в этом случае вероятная стоимость и суммарное время на разработку.
|
||||
|
||||
|
||||
§ recommendations.author.projectType.easy.title
|
||||
Слабая загрузка
|
||||
|
||||
§ recommendations.author.projectType.easy.description
|
||||
слишком много дней без коммитов. Нужно понять почему команда не пишет код.
|
||||
|
||||
# Метод оценки:
|
||||
- берется статистика по всем активным разработчикам;
|
||||
- подсчитывается среднее число дней работы и без коммитов;
|
||||
- загрузка считается слабой, если процент без коммитов от 5% до 20%;
|
||||
|
||||
# Возможные причины:
|
||||
- фактически нет задач;
|
||||
- задачи есть, но хорошо ложатся на текущую архитектуру;
|
||||
- разработчиков отвлекают совещаниями;
|
||||
- команда не работает;
|
||||
|
||||
# Варианты решения:
|
||||
- обсудить проблему с командой;
|
||||
- уменьшить гранулярность задач, чтобы за день можно было успеть сделать одну или две задачи;
|
||||
- ввести ежедневные совещания, чтобы проверять движение задач по статусу;
|
||||
- устроить сеансы парного программирования, чтобы убедиться, что разработчик может работать быстрее;
|
||||
|
||||
§ recommendations.author.manager.title
|
||||
Обозначьте дедлайны
|
||||
|
||||
§ recommendations.author.manager.description
|
||||
У любой задачи должен быть чёткий дедлайн.
|
||||
|
||||
Это позволит не затягивать её выполнение на несколько дней или недель.
|
||||
|
||||
# Какие показатели стоит проверить:
|
||||
- количество дней на одну задачу, которое тратит работник;
|
||||
- количество дней ожидания влития PR (страница статистики по PR);
|
||||
|
||||
§ recommendations.author.shorTalk.title
|
||||
Проводите ежедневные совещания
|
||||
|
||||
§ recommendations.author.shorTalk.description
|
||||
они помогают быть в курсе проекта.
|
||||
|
||||
Не растягивайте их отвлекаясь на посторонние темы.
|
||||
|
||||
# На какие вопросы должен ответить сотрудник:
|
||||
- что было сделано;
|
||||
- что будет сделано;
|
||||
- есть ли какие-либо проблемы;
|
||||
|
||||
# Следует обрывать монолог, если:
|
||||
- начинают подробно описывать мелкие детали, которые не важны;
|
||||
- уводят диалог в сторону, от первоначального плана;
|
||||
|
||||
# Почему это важно:
|
||||
Часто сотрудник, который ничего не делает, старается уйти от ответа. Для этого он рассказывает кучу ненужных подробностей свой работы. Это позволяет усыпить внимание участников и растянуть время ответа. Создается ощущение что он чем-то занят, хотя по факту работы не было.
|
||||
|
||||
§ recommendations.author.ipr.title
|
||||
Составьте план обучения
|
||||
|
||||
§ recommendations.author.ipr.description
|
||||
на каждого сотрудника.
|
||||
|
||||
*Индивидуальный план обучения* — это список целей и задач, которые помогают человеку развиваться в определенной области.
|
||||
|
||||
# Как составить план:
|
||||
- составить матрицу компетенций;
|
||||
- определить по каким компетенциям меньше всего знаний и опыта;
|
||||
- узнать какие из этих компетенций интересны сотруднику;
|
||||
- придумать 3..5 целей в рамках каждой такой компетенции на полпостороние года или год;
|
||||
- каждый месяц пытаться сделать что-либо для достижения одной цели;
|
||||
- каждый месяц напоминать об общем плане достижения этих целей;
|
||||
|
||||
# Нужен ли план руководителю?
|
||||
Да, руководитель так же должен составить план на себя. Если нет вышестоящего руководителя, то он должен проверять сам себя.
|
||||
|
||||
# Почему это важно:
|
||||
- сотрудники становятся более лояльны к компании;
|
||||
- за теже деньги вы получаете более квалифицированные кадры;
|
||||
|
||||
§ recommendations.author.oneToOne.title
|
||||
Проводите 1-1 каждый месяц
|
||||
|
||||
§ recommendations.author.oneToOne.description
|
||||
это поможет выявить проблемы на ранней стадии.
|
||||
|
||||
*One-to-one* — это регулярные личные встречи руководителя с подчиненным. На таких встречах обычно обсуждают всё, что важно для сотрудника, что его волнует, и то, чем он может поделиться с руководителем только наедине.
|
||||
|
||||
# Почему это важно:
|
||||
- легко выяснить, кто из сотрудников перегружен, а у кого есть свободное время;
|
||||
- можно предотвратить выгорание сотрудника;
|
||||
- можно получить быструю обратную связь о процессах, которые вы можете не замечать;
|
||||
- формируется доверительное отношение, сотрудники становятся более лояльны к компании;
|
||||
- повышается мотивация и вовлеченность сотрудников;
|
||||
|
||||
§ recommendations.author.club.title
|
||||
Ходите в бар
|
||||
|
||||
§ recommendations.author.club.description
|
||||
один раз в месяц или два.
|
||||
|
||||
Это поможет выстроить неформальную коммуникацию в коллективе и сплотить команду, даже если общение будет сжатым.
|
||||
|
||||
# Почему это важно:
|
||||
- можно получить быструю обратную связь о процессах, которые вы можете не замечать;
|
||||
- формируется доверительное отношение, сотрудники становятся более лояльны к компании;
|
||||
- повышается вовлеченность сотрудников;
|
||||
|
||||
§ recommendations.hour.onlyWork.title: Выходных тут нет
|
||||
§ recommendations.hour.onlyWork.description: Вероятно, стоит уволить менеджера проекта.
|
||||
§ recommendations.hour.weekends.title: Работа на выходных
|
||||
§ recommendations.hour.weekends.description: Вероятно, стоит проверить менеджера проекта.
|
||||
§ recommendations.hour.easy.title: Бывают проблемы
|
||||
§ recommendations.hour.easy.description: Вероятно, бывают завалы и приходится работать на выходных.
|
||||
§ recommendations.week.lazyDays.down.title: Стало меньше прогулов
|
||||
§ recommendations.week.lazyDays.down.description: за последние три недели этот показатель упал
|
||||
§ recommendations.week.lazyDays.up.title: Стало больше прогулов
|
||||
§ recommendations.week.lazyDays.up.description: нет задач или нужен более жесткий контроль
|
||||
§ recommendations.week.notWork.title: Стабильно не дорабатывает
|
||||
§ recommendations.week.notWork.description: т.к. каждую неделю пишет код не 100% времени
|
||||
§ recommendations.week.upWork.title: Стабильно перерабатывает
|
||||
§ recommendations.week.upWork.description: т.к. каждую неделю пишет код в выходные дни
|
||||
§ recommendations.week.task.up.title: Растёт производительность
|
||||
§ recommendations.week.task.up.description: или задачи стали слишком мелкие. Нужно проверить. Если гранулярность та же - закрепить результат.
|
||||
§ recommendations.week.task.lazyMaintainer.description: стабильный лидер по прогулам. Уволить?
|
||||
§ recommendations.week.task.down.title: Падает производительность
|
||||
§ recommendations.week.task.down.description
|
||||
или задачи хуже разбивают. Нужно проверить. Если гранулярность та же - взять на контроль.
|
||||
|
||||
# Метод оценки:
|
||||
- количество задач в день, над которыми работают, на протяжении последних трех недель стабильно падает.
|
||||
|
||||
# Возможные ошибки:
|
||||
- задачи могли быть сложнее, чем казались;
|
||||
- задачи могли иметь большой объём работы (нужно проверить количество изменений, падают они или нет за этот же период)
|
||||
|
||||
§ recommendations.type.everyHasOne.title: Не подписывают тип задачи
|
||||
§ recommendations.type.everyHasOne.description: большинство типов задач делает один человек.
|
||||
§ recommendations.type.oneMaintainer.title: Узкая специализация
|
||||
§ recommendations.type.oneMaintainer.description
|
||||
большинство задач одного типа делают одни и те же люди.
|
||||
|
||||
# Типы задач:
|
||||
|
||||
§ recommendations.type.common
|
||||
# Возможно, это не так
|
||||
|
||||
Нужно убедиться, что остальные сотрудники верно подписывают коммиты.
|
||||
|
||||
Шаги, которые помогут это сделать:
|
||||
- настроить пре-коммит проверку для commit message;
|
||||
- объяснить команде, что нужно указывать тип;
|
||||
- проверить в новых ветках, что сотрудники следуют правилу;
|
||||
|
||||
# Если это действительно так
|
||||
|
||||
Вы настроили проверки и убедились что один и тот же сотрудник, делает задачи одного и того же типа.
|
||||
|
||||
Почему это плохо:
|
||||
- его увольнение остановит целую пачку процессов;
|
||||
- уменьшается компетенция остальных членов команды;
|
||||
- трудно верхнеуровнево понять его правки;
|
||||
|
||||
Как это исправить:
|
||||
- распределять разные типы задач равномерно;
|
||||
- менять область работы (тесты, документация, ошибки) между сотрудниками через спринт;
|
||||
|
||||
§ recommendations.type.fewTypes.title
|
||||
Это локальный продукт
|
||||
|
||||
§ recommendations.type.fewTypes.description
|
||||
для конкретного заказчика или проблемы.
|
||||
|
||||
# Какие признаки есть у «глобального» продукта:
|
||||
- локализация;
|
||||
- документация;
|
||||
- большой объём тестов;
|
||||
- визуальная кастомизация;
|
||||
- рефакторинг узких мест;
|
||||
- и т.п.
|
||||
|
||||
# Почему этот продукт выглядит как «локальный»:
|
||||
- у каждого «глобального» признака будет перевес по своему типу задач;
|
||||
- чем больше «глобальных» признаков, тем больше вероятность «глобального» продукта;
|
||||
|
||||
В данном случае мы видим небольшое число типов, а следовательно, скорее всего есть недоработки, мешающие легко масштабировать продукт на мировой рынок и продавать его в других странах.
|
||||
|
||||
# Возможно, это не так
|
||||
По типам файлов мы можем предположить тип программы (сайт, серверное приложение, DevOps скрипты и т.д.). Для frontend приложения наша гипотеза будет более верной, чем для DevOps-скриптов, которые могут быть лишь микро-модулем инициализации.
|
||||
|
||||
§ recommendations.type.diff.title
|
||||
Разбейте лидирующий тип на подтипы
|
||||
|
||||
§ recommendations.type.diff.description
|
||||
для детализации ошибок.
|
||||
|
||||
Как правило, тип задач с меткой «исправление ошибок» является лидирующим. Это делает статистику слабо-детализированной.
|
||||
|
||||
*Если у вас произошла такая ситуация*, вы можете разбить этот тип на подтипы (например, по месту обнаружения).
|
||||
|
||||
Рассмотрим несколько вариантов подтипов:
|
||||
- fix_dev (ошибка выявленная в процессе разработки);
|
||||
- fix_test (ошибка выявленная в процессе тестирования);
|
||||
- fix (ошибка выявленная в проде);
|
||||
|
||||
§ recommendations.type.buddy.title
|
||||
Копите мелкие задачи
|
||||
|
||||
§ recommendations.type.buddy.description
|
||||
для новых сотрудников.
|
||||
|
||||
# Если задача:
|
||||
- не важная;
|
||||
- не большая;
|
||||
- не требует сильного погружения в контекст;
|
||||
- больше про рефакторинг, чем про новый код;
|
||||
|
||||
# Положите её в backlog с меткой «для новичков».
|
||||
|
||||
Когда придёт новый сотрудник, вы сможете моментально достать ему пачку небольших и разнообразных по типу задач, для ознакомления с проектом.
|
||||
|
||||
Также, если у вас будет застой в работе, вы сможете доставать по одной такой мелкой задаче из backlog-а.
|
||||
`;
|
27
src/ts/translations/es/settings.ts
Normal file
27
src/ts/translations/es/settings.ts
Normal file
|
@ -0,0 +1,27 @@
|
|||
export default `
|
||||
§ page.settings.document.title: Настройки отображения
|
||||
§ page.settings.document.name: Заголовок страницы
|
||||
§ page.settings.document.language: Язык интерфейса
|
||||
§ page.settings.links.title: Префиксы ссылок
|
||||
§ page.settings.links.task: Для номеров задач
|
||||
§ page.settings.links.pr: Для PR
|
||||
§ page.settings.user.title: Индивидуальные настройки
|
||||
§ page.settings.user.notFound: Индивидуальных настроек нет. Данные по всем сотрудникам вычисляются по общим параметрам.
|
||||
§ page.settings.user.subTitle: Дополнение к трудовому договору №$1
|
||||
§ page.settings.user.from: Дата начала действия
|
||||
§ page.settings.mailmap: Настройки .mailmap
|
||||
§ page.settings.common.title: Общие данные по зарплате
|
||||
§ page.settings.common.type.title: Тип работы над проектом
|
||||
§ page.settings.common.type.full: Полная занятость
|
||||
§ page.settings.common.type.part: Проектная работа
|
||||
§ page.settings.common.salary: Зарплата в месяц
|
||||
§ page.settings.common.currency: Валюта
|
||||
§ page.settings.common.workDaysInYear: Количество рабочих дней в году
|
||||
§ page.settings.common.vacationDaysInYear: Количество дней отпуска в год
|
||||
§ page.settings.common.workDaysInWeek: Рабочие дни
|
||||
§ page.settings.form.save: Сохранить
|
||||
§ page.settings.form.cancel: Отмена
|
||||
§ page.settings.form.remove: Удалить
|
||||
§ page.settings.form.addEmployee: Добавить сотрудника
|
||||
§ page.settings.form.addContract: Добавить трудовой договор
|
||||
`;
|
Loading…
Reference in a new issue