Познакомьтесь с Самсоном. Самсон — это кошка, а точнее кошачий фелис. Вы можете увидеть фотографию Самсона ниже. Поскольку в наши дни кажется, что работать дома очень популярно, я решил нанять свою кошку в качестве разработчика программного обеспечения. Таким образом, я могу лежать в гамаке, наслаждаясь солнцем, пока мой кот выполняет всю тяжелую работу. Всякий раз, когда приходит время платить зарплату, все, что мне нужно сделать, это открыть ящик Whiskas и вуаля! Зарплата выплачена!
Идея возникла из следующей логической цепочки аргументов.
- Я не могу сказать своей кошке, что делать
- Я не могу сказать своим разработчикам программного обеспечения, что делать
- Следовательно, мой кот должен быть разработчиком программного обеспечения
Довольно очевидно, если подумать, верно …?
Поэтому я ищу новых кошек, которые, будучи старшими разработчиками программного обеспечения, могли бы создавать прекрасные мурлыканья программных систем, которые я смогу продавать своим клиентам, чтобы стать богатым! Муахахахахаха (злой смех!)
Если вы кот и вы читаете это прямо сейчас, не стесняйтесь подать заявку на работу в моей команде, где Самсон будет руководить проектом, и вы, возможно, будете одним из немногих счастливчиков, которые делают разрез, наслаждаясь жизнью, полной изобилия мурлыкает и тонн корма для кошек. В конце концов, создание сотен тысяч строк кода и прекрасное следование всем стандартам lint так же просто, как нажатие кнопки . Не веришь мне? Поймите, что нажатием кнопки было создано следующее, поэтому я больше не вижу необходимости нанимать дорогих (человеческих) разработчиков программного обеспечения.
Они будут только просить больше зарплаты и потребовать кофе и бесплатную пиццу, работая сверхурочно. Гораздо более финансово выгодно просто нанять кучу кошек. Ниже вы можете наблюдать, как один из товарищей по команде Самсона работает над некоторыми корпоративными приложениями на базе Angular и .Net Core.
Ниже вы можете увидеть одну из этих программных систем, которая была фактически создана моей кошкой. Эта конкретная система представляет собой систему базы данных проката фильмов, основанную на базе данных MySQL Sakila. Однако для создания конечного результата можно использовать любую структуру базы данных как для MS SQL, так и для MySQL.
Вы видите, магиябуквально позволит вам создать полную основанную на .Net Core бэкэнд и полную угловую основу, буквально нажав кнопку. Это связано с тем, что он считывает метаданные из вашей базы данных, которые он использует для создания внутренних операций CRUD для вашей базы данных, которые он снова использует для создания компонентов и сервисов Angular. Поэтому, хотя он будет производить около 15.000 строк кода для базы данных с 80-100 таблицами, он будет делать это, нажимая мою кошку на простую кнопку, поэтому я решил, что мне больше не нужны разработчики программного обеспечения, пока я могу обучать свою кошку нажать на эту кнопку. Если вы можете дополнительно научить свою кошку, как создавать простую группу с помощью оператора SQL, извлекая пару ключ / значение из ваших данных, вы можете даже заставить ее создавать красивые диаграммы, как показано ниже. И даже если вы не можете научить свою кошку SQL,Вы могли бы научить его просто копировать и вставлять фрагменты примера SQL из StackOverflow или что-то в этом роде, верно …?
Идея была на самом деле концептуализирована путем доведения шаблона проектирования наблюдателя до его предела, до такой степени, что я мог создать полный язык программирования Тьюринга, где каждое «ключевое слово» в языке было буквально свободно соединено вместе, как простые приемники событий. Я называю этот процесс супер сигналами . Язык программирования я называю Hyperlambda . Но я подозреваю, что его общее название станет «Мяу-лямбда» после сегодняшнего дня по понятным причинам. Ниже приведен пример кода, сгенерированного для глагола HTTP GET или операции «чтение» .
Простой текст
x
1
.arguments
2
limit:long
3
offset:long
4
order:string
5
direction:string
6
address.like:string
7
address.mt:string
8
address.lt:string
9
address.mteq:string
10
address.lteq:string
11
address.neq:string
12
address.eq:string
13
phone.like:string
14
phone.mt:string
15
phone.lt:string
16
phone.mteq:string
17
phone.lteq:string
18
phone.neq:string
19
phone.eq:string
20
auth.ticket.verify:root
21
lambda2hyper:x: .arguments/*
22
add:x:./*/wait.slots.signal/*/args
23
get-nodes:x:@.arguments/*
24
wait.slots.signal:magic.db.mysql.read
25
database:sakila
26
table:address
27
args
28
columns
29
address_id
30
address
31
phone
32
location
33
last_update
34
slots.return-nodes:x:@wait.slots.signal/*
Вышеприведенный код снова преобразуется в действительный оператор выбора SQL и автоматически преобразует результаты этого выбора в массив объектов JSON. Ниже приведен пример того, как это будет выглядеть в угловых частях уравнения. Это — внутренне в его угловом компоненте — связано вместе с помощью таблицы материалов, которая автоматически привязывается к данным или «реагирует», если хотите, ко всем конечным точкам HTTP REST, созданным в вашей бэкэнде Hyperlambda. И все волшебным образом происходит простым нажатием кнопки, и я уверен, что могу научить Самсона, как это сделать, если я просто использую петли положительной обратной связи, подключенные к моему устройству подачи Whiskas 🙂
Машинопись
x
1
/*
2
* Magic, Copyright(c) Thomas Hansen 2019 - 2020, thomas@servergardens.com, all rights reserved.
3
* See the enclosed LICENSE file for details.
4
*/
5
import { Component, OnInit, ViewChild } from '@angular/core';
7
import { MatSnackBar } from '@angular/material/snack-bar';
8
import { MatDialog } from '@angular/material';
9
import { MatPaginator } from '@angular/material';
10
import { PageEvent } from '@angular/material/paginator';
11
import { FormControl } from '@angular/forms';
12
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
13
import { JwtHelperService } from '@auth0/angular-jwt';
14
import { HttpService } from 'src/app/services/http-service';
16
import { CountryEditModalComponent } from './modals/country-edit-modal';
17
/*
19
* "Datagrid" component for displaying instance of country
20
* entities from your HTTP REST backend.
21
*/
22
@Component({
23
selector: 'app-country',
24
templateUrl: './country.component.html',
25
styleUrls: ['./country.component.scss']
26
})
27
export class CountryComponent implements OnInit {
28
// Actual data currently displayed in the grid. The mat-table will be databound to this list.
30
private data: any[];
31
// Which columns we should display. Reorder to prioritize columns differently.
33
private displayedColumns: string[] = ['country', 'last_update', 'delete-instance'];
34
// Current filter being applied to filter items from our backend.
36
private filter: any = {
37
limit: 10
38
};
39
// Number of items our backend reports are available in total, matching our above filter condition.
41
private count = 0;
42
private hasFiltered = false;
43
// Number of milliseconds after a keystroke before filtering should be re-applied.
45
private debounce = 400;
46
// List of items we're currently viewing details for.
48
private viewDetails: any[] = [];
49
// Need to view paginator as a child to update page index of it.
51
@ViewChild(MatPaginator, {static: true}) paginator: MatPaginator;
52
/*
54
* This is needed to figure out whether or not user has access to
55
* delete, create and update methods.
56
*/
57
private roles: string [] = [];
58
// Form control declarations to bind up with reactive form elements.
60
private country_id: FormControl;
61
private country: FormControl;
62
private last_update: FormControl;
63
// Constructor taking a bunch of services/helpers through dependency injection.
66
constructor(
67
private httpService: HttpService,
68
private jwtHelper: JwtHelperService,
69
private snackBar: MatSnackBar,
70
public dialog: MatDialog) {
71
// Checking if user is logged in, at which point we initialize the roles property.
73
const token = localStorage.getItem('jwt_token');
74
if (token !== null && token !== undefined) {
75
// Yup! User is logged in!
77
this.roles = this.jwtHelper.decodeToken(token).role.split(',');
78
}
79
}
80
// OnInit implementation. Retrieves initial data (unfiltered) and instantiates our FormControls.
82
ngOnInit() {
83
// Retrieves data from our backend, unfiltered, and binds our mat-table accordingly.
85
this.getData();
86
// Necessary to make sure we can have "live filtering" in our datagrid.
88
this.country_id = new FormControl('');
89
this.country_id.valueChanges
90
.pipe(debounceTime(this.debounce), distinctUntilChanged())
91
.subscribe(query => {
92
this.paginator.pageIndex = 0;
93
this.filter.offset = 0;
94
this.hasFiltered = true;
95
this.filter['country_id.eq'] = this.country_id.value;
96
this.getData();
97
});
98
this.country = new FormControl('');
99
this.country.valueChanges
100
.pipe(debounceTime(this.debounce), distinctUntilChanged())
101
.subscribe(query => {
102
this.paginator.pageIndex = 0;
103
this.filter.offset = 0;
104
this.hasFiltered = true;
105
this.filter['country.eq'] = this.country.value;
106
this.getData();
107
});
108
/* ... snippet away since Samson found it boring ... 🙂 /*
110
111
}
112
}
Система Sakila, например, содержит тот же объем кода, который для разработки программного обеспечения в среднем потребуется около 3 месяцев, согласно исследованиям в этой области. Однако Самсон создал его за 20 секунд. Было бы нечестно с моей стороны выставлять счет моему клиенту в размере 20 000 евро? Хм. Может быть, мне следует избегать жадности; лучше дать ему хорошую цену. Я думаю, что пошлю ему меньший счет всего за € 18.000. В конце концов, это не так, как будто я сам делал какую-то работу, верно ...? 😉
Не стесняйтесь присылать мне по электронной почте, если вы кошка и ищете работу, таким образом, я буду кормить вас банкой вискаса в день, выставляя своим клиентам около 40 триллионов долларов за работу, которую вы выполняете в каждом из них. день. Мяуус и Вискас для тебя, доллары для меня 🙂
Мухахахахаха (злой смех 2.0)
Puuh, это утомительно, нажав на эту кнопку. Ниже вы можете увидеть меня и одного из моих коллег, которого зовут Хэппи, который принимает кражу после изнурительных 5 секунд работы ...
Кстати, с первым апрельским Дураком;)