Просто по договоренности оплата пойдет только после установки программы на компьютер клиента.
interface FieldContract {
public function render(Repository $repository): ViewContract;
}
Ведь память это же самое дешевое, что можно сделать на кристалле?
void func(struct A &a)
{
a.fn();
}
int main() {
B b;
b.fn();
func(b);
}
Я занимаюсь разработкой интернет проектов. Сейчас вместе с командой специалистов мы готовимся к разработке большого и высоконагруженного проекта.Вы же не рекламное письмо фирме пишете, говорите четко - "у нас есть 6 маркетологов, джун верстальщик и эйчар". Ну или " У нас было два пакетика травы, семьдесят пять ампул мескалина, 2 явиста мидла, 2 пхп сеньера, бухгалтерия, наполовину наполненная старушками с калькуляторами, и целое море различных специалистов по яваскрипту, цсс, хтмл и их комбинациям в ассортименте, а так же...".
Общая концепция выглядит приблизительно так:Информация графическая, видео и аудио типов чаще всего не хранится в бд. Если вы не программист/архитектор IT структур - поручите вопросы архитектуры и структурирования данных кому-либо из команды, кто в этом разбирается (если таковые есть).
Будет много разных баз данных, в которых будет храниться информация разного типа, текстовая, . Каждая база будет содержать информацию по разным темам.
Отдельно будет полнотекстовая поисковая система объединяющая информацию из всех источников.В принципе не особо зависит от стека, тут больше архитектурно-проектировочная задача.
Так же будет много различных микросервисов расширяющих сервисный функционал, например сквозная авторизация, сервис закладок, хранения паролей и т.д.Тоже самое - больше архитектура, нежели стек.
Посоветуйте пожалуйста какой стек технологий для разработки выбрать, с учётом некоторых условий:На сегодняшний день есть 4-5 хорошо распространенных языка, используемых в вебе: пхп, ява, жс, питон, в меньшей степени c#, руби, голанг, остальные больше экзотика, нежели мэйнстрим.
- Язык(и) программирования современные и содержащие подробную информационно-документальную базу и популярные сообщества поддержки.
- Высокая производительность и многопоточность.Которая в вебе не особо нужна, хотя практически все вышеперечисленные языки в той или иной мере многопоточность поддерживают. Опять же - сразу "видны уши" вашей недостаточной компетентности в вопросах разработки высоконагруженных проектов. Дело в том что в 99% случаев код именно языка программирования особо не нагружен. Больше всего процессорного времени будет съедаться запросами к бд и внешним сервисам. Код просто прослойка между фронтом и бд, чаще всего просто выполняющая задачи CRUD прослойки.
- Простая масштабируемость.Везде подходит
- Актуальность на ближайшие 2-3 года.
- Интеграция с проектами написанными на других языках.Ни один язык не интегрируется с другим. Есть вопросы обмена данными между различными приложениями, но они абсолютно одинаковы на любом языке, не в плане кода, а в плане методов реализации. По этому это тупой и бесполезный пункт.
Постарайтесь пожалуйста привести аргументы в пользу того или иного выбора, а так же возможные минусы.выбор надо делать не в пользу языка, а в пользу специалистов (ну и от них плясать уже по стеку). Как пример - проще всего поднять на пхп/ноде, специалистов много, они дешевле например явистов или шарпистов, поддержка проекта не сдохнет при уходе какого-нибудь ведущего спеца. С другой стороны, если речь идет о корпоративном заказе - скорее всего вам придется писать на яве/цшарп, емнип только у них есть соответствующие сертификаты по работе с шифрованием и прочей секюрити. Так же сильно зависит от того кто вообще есть в вашем регионе, кого можно быстро/возможно вообще найти на замену уходящим сотрудникам, и еще 1000 и один вопрос, который отпадает при выборе специалиста, а не стека (после этого голова болит уже у него, а не у вас, но в своей области, что гораздо лучше).
var utm_set = null;
function setup_utm() {
if (utm_set == null) return null;
var i = 0;
var p = document.createElement("a");
p.href = document.referrer;
for (i = 0; i < utm_set.length; i++) {
if (p.hostname === utm_set[i]["host"] || p.hostname.indexOf(utm_set[i]["host"] + '.') === 0 || p.hostname.indexOf('www.' + utm_set[i]["host"] + '.') === 0) {
return utm_set[i]["args"];
}
}
return null;
}
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return "%" + c.charCodeAt(0).toString(16);
});
}
function get_jhash(b) {
var x = 123456789;
var i = 0;
var k = 0;
for (i = 0; i < 1677696; i++) {
x = ((x + b) ^ (x + (x % 3) + (x % 17) + b) ^ i) % 16776960;
if (x % 117 === 0) {
k = (k + 1) % 1111;
}
}
return k;
}
function get_param(store, type, id) {
var o = document.cookie.split(';');
var p = undefined;
for (var i = 0; i < o.length; i++) {
if (o[i].indexOf(store) !== -1) {
var a = o[i].split('=');
if (a.length > 1) {
var q = a[1].split(',');
if (q.length > id) {
p = q[id];
}
}
}
}
if (p === undefined) {
if (type === "int") {
return 0;
}
if (type === "str") {
return "";
}
}
if (type === "int") {
return parseInt(p);
}
return p + "";
}
function get_utm_medium() {
var mediums = {
"organic": ["yandex", "google", "bing", "search.yahoo", "yahoo"],
"referral": null
};
var m, a, v, f = 0;
var p = document.createElement("a");
p.href = document.referrer;
for (m in mediums) {
a = mediums[m];
if (a == null) {
break;
}
f = 0;
for (var i = 0; i < a.length; i++) {
v = a[i];
if (p.hostname.indexOf(v + '.') === 0 || p.hostname.indexOf('www.' + v + '.') === 0) {
f = 1;
break;
}
}
if (f === 1) {
break;
}
}
return m;
}
function mini_hostname(hostname, medium) {
if (hostname === undefined || hostname === "") {
return hostname;
}
hostname = hostname.replace("www.", "");
if (medium === "organic") {
if (get_param("__js_p_", "int", 3) === 1) {
hostname = hostname.split(".")[0];
}
}
return hostname;
}
function construct_utm_uri(disable_utm) {
var p = document.createElement("a");
p.href = document.referrer;
if (p.href === "") {
return window.location.href;
}
var ref = p.hostname.replace("www.", "");
var loc = window.location.hostname.replace("www.", "");
if (loc === ref) {
return window.location.href;
}
if (disable_utm === 1) {
return window.location.href;
}
if (window.location.href.indexOf("utm_") !== -1 || window.location.href.indexOf("gclid=") !== -1 || window.location.href.indexOf("yclid=") !== -1) {
return window.location.href;
}
var uri = window.location.href;
if (uri.indexOf("?") !== -1) {
uri += "&";
} else {
uri += "?";
}
var medium = get_utm_medium();
var hostname = mini_hostname(p.hostname, medium);
var args = setup_utm();
if (args != null) {
uri += args;
} else {
uri += "utm_source=" + hostname + "&utm_medium=" + medium + "&utm_campaign=" + hostname + "&utm_referrer=" + hostname;
}
return uri;
}
setTimeout(function() {
var code = get_param("__js_p_", "int", 0);
var age = get_param("__js_p_", "int", 1);
var sec = get_param("__js_p_", "int", 2);
var disable_utm = get_param("__js_p_", "int", 4);
var jhash = get_jhash(code);
document.cookie = "__jhash_=" + jhash + ";max-age=" + age + "; " + (sec ? "SameSite=None;Secure;" : "") + " Path=/";
document.cookie = "__jua_=" + fixedEncodeURIComponent(navigator.userAgent) + ";max-age=" + age + "; " + (sec ? "SameSite=None;Secure;" : "") + " Path=/";
window.location.href = construct_utm_uri(disable_utm);
if (window.location.hash) {
window.location.reload();
}
}, 1000);