Профиль пользователя заблокирован сроком с 16 октября 2023 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как бюджетно реализовать распределенный сервер БД?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Сравнение репликаций в документации postgresql

    Судя по всему вам нужна асинхронная репликация master-master.
    Это можно реализовать с помощью Bucardo
    Ответ написан
    2 комментария
  • Как организована работа rand()?

    @TheCalligrapher
    Вы все совершенно правильно описали: функция rand() является stateful функцией, т.е. она обладает состоянием (state), которое сохраняется между последовательными вызовами функции. И по понятным причинам это состояние также должно быть доступно функции srand().

    Однако, во-первых, не ясно, почему вы решили, что это состояние обязательно должно храниться в локальной статической переменной, объявленной внутри функции rand(). Даже если следовать вашей логике, то намного разумнее предположить, что это - некая статическая переменная, объявленная не уровне файла (модуля), и немедленно доступная как функции rand(), так и функции srand(). Или даже глобальная переменная. (Во многих реализациях стандартной библиотеки, старающихся поддерживать работу в многопоточных приложениях, это состояние может храниться в thread-локальной переменной.)

    Во-вторых, что важнее (!), реализация стандартной библиотеки в общем случае делается платформенно-зависимыми средствами, не имеющими никакого отношения к языкам С или С++. Она может быть реализована на Ассемблере, Фортране или на языке нанайских мальчиков. С языками С или С++ должен быть совместим лишь ее внешний интерфейс, но не внутренняя реализация. Поэтому рассматривать реализацию стандартной библиотеки в терминах языков С или С++ - бессмысленное и некорректное занятие. Реализация стандартной библиотеки живет по своим законам. Если ей нужно, чтобы состояние rand() было также доступно в srand() - значит так и будет. А как это сделано - волшебство конкретной реализации.
    Ответ написан
    Комментировать
  • Как лучше связать frontend с backend-ом на c#?

    summoner2015
    @summoner2015
    Backend всему голова
    Неплохо было бы сделать rest api, на стороне сервера, и стучать в него с клиентской части (html+js+ajax, или разобраться с vuejs и использовать его).
    В api сделать:
    1. ручку для постановки задачи в очередь (rabbitmq, kafka, db)
    2. ручку для проверки статуса задачи
    3. ручку для получения результатов, если задача в статусе "выполнено"

    Соответственно, с клиента дергать первую ручку, затем крутить прелоадер и периодически дергать вторую ручку, пока не получим нужный статус задачи, или не закончится какой-нибудь таймаут, и в конце дернуть третью ручку и поменять текущий DOM с учетом полученных данных.
    На серверной части, по идее, можно отказаться от зоопарка из php+c#, и сделать это все на чем-то одном. Сами задачи будут обрабатываться чем-то в вечном цикле, а именно - ждать пока в очереди появятся задачи и сразу брать их в работу (при необходимости запустить несколько таких воркеров, и обрабатывать задачи параллельно)
    Ответ написан
    3 комментария
  • Выполняю тестовое задание для работы в компании. Что делать, чтоб мой дизайн не продала эта компания, не взяв меня на работу?

    @Legal2019
    Всё в имени моём... и радость и печаль...
    1. Если вы являетесь дизайнером, то у вас возникает авторство на то, что вы создаёте.
    2. если вы хотите сделать так, чтобы вашим дизайном ни кто не воспользовался без вашего ведома, то нужно делать под договор обязательно.
    3. Лучше зарегистрировать свои права.
    4. Денег вам всё равно придётся потратить на регистрацию ваших прав.
    Можно сделать через нотариуса (не все делают), можете узнать в ФИПС и в РАО
    У нотариуса это называется обеспечение доказательств.
    Лично я не занимался пока ещё таким вопросом (не регистрировал коды/дизайны, да и не возникало у меня таких вопросов, да и не было таких заказчиков)
    Если действовать по аналогии с самым распространённым и менее затратным вариантом, то это делаете диск с вложенным тхт в котором указываете все основные параметры, дату, заказчика и т.п., делаете скрины на печать в цвете, делаете видеозапись экрана по дизайну сайта. Вообщем максимально описываете весь дизайн, каждый файл маркируете и описываете в тхт (к примеру style.css - содержит код ... , дизайн проект.pdf - содержит .... и т.п.), где и когда делался, кем делался, включая свои паспортные данные и адрес регистрации.
    Затем упаковываете в конверт на почте и отправляете заказным с уведомлением о вручении самому себе. Всё делаете в нескольких экз. В итоге, у вас получится, скажем три письма с тремя идентичными дисками и распечатанными скринами. Получается дешевле в разы, чем у нотариуса.
    Так раньше делали права авторства на произведения (статьи, книги, стихи, мелкие рисунки/картины, видео и аудио записи)
    А регистрация произведений осуществляется в целях своевременного и правильного распределения и выплаты авторского вознаграждения. Она производится на основании заявления автора (заявительный порядок регистрации). Она не подтверждает авторства на произведения, а необходима только для распределения и выплаты вознаграждения. Такая регистрация свидетельствует о том, что правообладатель объявил себя автором конкретных произведений и поручил РАО сбор вознаграждения за их использование.
    ФИПС регистрирует заявки на программу для ЭВМ или базу данных.

    Учитывая положения (для РФ, который отвечает нормам международного права в области авторского права и смежных прав) результат дизайнера сайтов в т.ч. с написанием кодов, относится к объектам авторского права, а следовательно, возможна регистрация, осуществляемая по желанию правообладателя.
    Отмечу важный момент:
    Авторские права не распространяются на идеи, концепции, принципы, методы, процессы, системы, способы, решения технических, организационных или иных задач, открытия, факты, языки программирования, геологическую информацию о недрах.
    Если интересно знать что не является объектами авторских прав, то рекомендую почитать п. 6 ст. 1259 "Гражданский кодекс Российской Федерации (часть четвертая)" от 18.12.2006 N 230-ФЗ (ред. от 26.07.2019, с изм. от 24.07.2020).
    Надеюсь описал популярно и смог ответить на ваш вопрос )))
    Снова правлю, т.к. забыл добавить про то, что в рисунках делайте в каком-нибудь месте водяной знак и в правом нижнем углу свои ФИО и дату.

    Перечитывая свой пост, заметил, что забыл упомянуть про то, что в рамках патентного права объектом патентных прав являются результаты интеллектуальной деятельности в научно-технической сфере, отвечающие установленным настоящим Кодексом требованиям к изобретениям и полезным моделям, и результаты интеллектуальной деятельности в сфере дизайна, отвечающие установленным настоящим Кодексом требованиям к промышленным образцам.
    Так что дизайн защищён не только авторскими правами, но и патентами.
    Ответ написан
    Комментировать
  • Выполняю тестовое задание для работы в компании. Что делать, чтоб мой дизайн не продала эта компания, не взяв меня на работу?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Если дизайн действительно хороший, компании выгоднее получить человека, умеющего такие дизайны делать, и продавать их сотням заказчиков, чем урвать гешефт единожды.
    Ответ написан
    5 комментариев
  • Как использовать vue на коллекции элементов?

    @Nolan81
    программист
    Vue не совсем так работает.
    Он отталкивается от javascript данных и уже по ним строится html.
    Т.е. вот этот div к которому vue цепляется служит как шаблон, а не источник данных. Его содержимое будет заменяться Vue.
    Ответ написан
    3 комментария
  • Предложение по расширению тостера нужно ли?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Вы про этот блок?
    5f22e25806488812285431.jpeg
    Ответ написан
    1 комментарий
  • Нужен ли .NET Framework?

    robinzonejob
    @robinzonejob
    разработчик .NET
    Некоторые технологии, специфичные для Windows, например WCF, не поддерживаются .Net Core из коробки, ввиду нацеленности данного фреймворка на мультиплатформу, так что если есть необходимость работать с такими технологиями - придется использовать .Net Framework. В остальном - .Net Core более современный и предпочтительный для разработки.
    Ответ написан
    1 комментарий
  • Xamarin.Forms Как в функцию передать значение кнопки?

    FoggyFinder
    @FoggyFinder
    Лучше всего будет начать с чтения туториалов по MVVM

    Паттерн Model-View-ViewModel

    Ключевое в таком подходе разделение представления (View) от внутренней логики (Model/VM). В некоторых очень простых случаях (например, демонстрационных примерах) роли Model и VM объединяют в одну.

    Концептуально, то что вы описали в своем вопросе можно определить следующим образом:

    Есть некоторый объект, который содержит информацию об изменяемом значении. Также объект характеризуется двумя состояниями: "нажат" (кнопка окрашена в красный цвет) и "отжат" (кнопка стандартного цвета). В терминах C# можно выразить в виде класса:

    public class Item : ViewModelBase
    {
        private int value;
        private bool isSelected;
        public int Value
        {
            get => value;
            private set => SetProperty(ref this.value, value);
        }
        public bool IsSelected
        {
            get => isSelected;
            set => SetProperty(ref isSelected, value);
        }
    
        public Item(int value, bool isSelected = false)
        {
            Value = value;
            IsSelected = isSelected;
        }
    
        public void IncrementSelected()
        {
            if (IsSelected)
            {
                Value++;
            }
        }
    }


    Обратите внимание что класс унаследован от ViewModelBase это вспомогательный класс для того чтобы сообщать представлению об изменении некоторых свойств объекта.

    Теперь сама страница:

    Здесь у вас есть 3 объекта (Item) которые можно изменять, а также методы для изменения этих самых объектов. Понадобятся всего два метода:

    1. Изменить состояние соответствующего объекта по нажатию на кнопку
    2. Изменить значение для всех объектов для которых IsSelected истинно

    Опишем этом в коде:

    public class MyContext
    {
        public int BaseValue { get; } = 14;
        public Item Item1 { get; }
        public Item Item2 { get; }
        public Item Item3 { get; }
    
        public MyContext()
        {
            Item1 = new Item(BaseValue, true);
            Item2 = new Item(BaseValue);
            Item3 = new Item(BaseValue);
    
            IncrementSelectedCommand =
                new DelegateCommand<object>(_ => IncrementSelected());
            ClickCommand = new DelegateCommand<Item>(
                o => SelectOrDeselect(o),
                o => o is Item);
        }
    
        public ICommand IncrementSelectedCommand { get; }
        public ICommand ClickCommand { get; }
    
        public void IncrementSelected()
        {
            Item1.IncrementSelected();
            Item2.IncrementSelected();
            Item3.IncrementSelected();
        }
    
        public void SelectOrDeselect(Item item)
        {
            item.IsSelected = !item.IsSelected;
        }
    }


    Теперь сама сложная часть - View. Сложная она только тем что я хочу максимально близко оставить вашу разметку.

    Для начала определим простой стиль который будет менять цвет фона у кнопки:

    <Style x:Key="selectableBtn" TargetType="Button">
        <Style.Triggers>
            <DataTrigger
                Binding="{Binding IsSelected}"
                TargetType="Button"
                Value="True">
                <Setter Property="BackgroundColor" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>


    Пока все просто - как только IsSelected становится равным True задаем установку свойства BackgroundColor в нужный цвет.

    Последний рубеж - сетка:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Label
            Grid.Column="1"
            FontSize="Large"
            HorizontalTextAlignment="Center"
            Text="I"
            VerticalTextAlignment="Center" />
        <Label
            Grid.Column="2"
            FontSize="Large"
            HorizontalTextAlignment="Center"
            Text="II"
            VerticalTextAlignment="Center" />
        <Label
            Grid.Column="3"
            FontSize="Large"
            HorizontalTextAlignment="Center"
            Text="III"
            VerticalTextAlignment="Center" />
        <Label
            Grid.Row="1"
            FontSize="Medium"
            HorizontalTextAlignment="Center"
            Text="{Binding BaseValue}" />
        <Button
            Grid.Row="1"
            Grid.Column="1"
            BindingContext="{Binding Item1}"
            Command="{Binding BindingContext.ClickCommand, Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type d:ContentPage}}}"
            CommandParameter="{Binding .}"
            Style="{StaticResource selectableBtn}"
            Text="{Binding Value}" />
        <Button
            Grid.Row="1"
            Grid.Column="2"
            BindingContext="{Binding Item2}"
            Command="{Binding BindingContext.ClickCommand, Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type d:ContentPage}}}"
            CommandParameter="{Binding .}"
            Style="{StaticResource selectableBtn}"
            Text="{Binding Value}" />
        <Button
            Grid.Row="1"
            Grid.Column="3"
            BindingContext="{Binding Item3}"
            Command="{Binding BindingContext.ClickCommand, Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type d:ContentPage}}}"
            CommandParameter="{Binding .}"
            Style="{StaticResource selectableBtn}"
            Text="{Binding Value}" />
        <Button
            Grid.Row="2"
            Grid.Column="3"
            Command="{Binding IncrementSelectedCommand}"
            Text="Add" />
    </Grid>


    Единственную хитрость здесь представляет установка BindingContext для кнопки чтобы реагировать на связанный элемент.

    И как вам уже подсказали чтобы из View передать информацию в VM можно использовать CommandParameter.

    И, завершающий штрих, установка BindingContext для содержимого:

    this.BindingContext = new MyContext();

    код выше можно поместить в конструктор для MainPage

    Напоследок, демонстрация работоспособности

    5f22d822d81b2087880445.gif

    Я намеренно не приводил код для классов ViewModelBase и RelayCommand - это стандартный классы реализации которых вы легко сможете найти.
    Например, тут и тут.
    Ответ написан
    1 комментарий
  • Какую архитектуру выбрать для приложения с централизованной БД?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Централизованной админке ничто не мешает быть реплицированной копией на всех серверах.
    2. Доступ к каждому серверу из центр. админки осуществляется с помощью двух факторов:
    2.1. Авторизация веб-клиента в админке (получение токена1)
    2.2. Аутентификация веб-клиента на сервере через API (получение токена2; сервер также сообщает его хеш админке напрямую)

    После получения двух токенов, админка может управлять нужным сервером от имени авторизованного веб-клиента (ну или любого другого), подписывая запросы к админке хешем этих двух токенов на стороне клиента.

    Данные (файлы фронта и сам php-скрипт) - также можно реплицировать и управлять этим через ту же админку.
    Базу - никто не мешает Вам вынести на отдельный сервер и создать к ней RESTful API, через которое можно будет обращаться с любой площадки из своих скриптов. А там уже: и шифрование трафика, и защита данных.
    И, разумеется, не забыть создать кеш-систему для RESTful API от центральной БД на каждой площадке (Redis - уже не подойдёт, т.к. тут не прямой коннект, а RESTful..).

    Админку можно разместить рядом с БД (на одном сервере/хостинге), НО! под другим аккаунтом, т.к. доступ к базе - она будет получать всё равно через RESTful API с токеном площадки, поэтому, риска доступа к БД со стороны (кроме работников самого хостера!) - никаких нет.
    Ответ написан
    Комментировать
  • Аутентификация и авторизация в net core что используете?

    @yuopi
    C# developer
    JWT + RefreshToken отдельным сервисом

    https://gist.github.com/zmts/802dc9c3510d79fd40f9d...
    Ответ написан
    Комментировать
  • Как запретить html и js теги в textarea?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега HTML
    Руководитель frontend направления, предприниматель
    Это обычно делают на уровне бэкенда, в движки и фреймворки это просто зашито на уровне безопасности. Но вот копнуть можно тут.

    А если надо вставлять текст на уровне JS, то достаточно будет вставлять его, как textNode, с помощью innerText, вместо innerHTML. Вот это надо проверить, так как я таким крайне редко страдаю.
    Ответ написан
    Комментировать
  • Как создать снимок установленной на программы для дальнейшего распространения на компы пользователей?

    Zoominger
    @Zoominger Куратор тега Системное администрирование
    System Integrator
    Ну, раз вы не посчитали нужным уточнить программу или хотя бы контейнер, в котором она поставляется, то давайте потыкаем 21-ым пальцем в Б-жье небо.

    Если программа в формате exe, то попробуйте погуглить "myprog.exe cmd keys" - обычно такие поддерживают ключи без проблем, причём установщики универсальны для всех программ и вы сможете автоматизировать галочки и параметры, которые задаются в процессе установки.
    Для разливки засуньте exe в msi (вы же умеете гуглить?) и разлейте через GPO.

    Если программа в msi, то тупо делаете для неё шаблон со всеми настройками и льёте через GPO.

    Если программа ни то, ни сё, то копируете её каталог со всеми настройками и разливаете по GPO скриптом на ПоверЩели, там же делаете ярлык.

    Вопросы?
    Ответ написан
    1 комментарий
  • На какие особенности языка JavaScript следует обратить внимание при его изучении после C#?

    Stalker_RED
    @Stalker_RED
    Особенности с замыканиями и this, прототипы вместо классов, и приведение типов местами способно удивить, ага.
    Ответ написан
    Комментировать
  • Что надо знать для написания софтов на C#?

    GavriKos
    @GavriKos
    Ну конкретно к вот тем двум задачам - еще надо изучить работу с сетью, GET/POST запросы, скорее всего работу с проксями всякими, не лишним - использование библиотек.
    Ну и не увидел в списке ничего про алгоритмы. А без них например найти нужный элемент в DOM-дереве при написании условного парсера вы не сможете.

    Забыл - ну и предметную область знать же. Если пишете парсер веб-страниц - надо понимать как они устроены, как на них генерится контент (js/ajax) и вот это всякое
    Ответ написан
    2 комментария
  • Что такое ссылка?

    alekseyHunter
    @alekseyHunter
    Android developer
    Ссылка в стеке для объекта будет представлять адрес на место в куче, по которому размещен данный объект.
    Ответ написан
  • Как превратить VM в "крепость"?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    а вот внутрь залезть - нимоги!

    Довольно странно использовать опенсорсную вещь, принципиально не имеющую таких механизмов защиты - для таких целей.
    Потенциально может помочь шифрование дисков и запароленный граб, но Вы же сами понимаете - на всякую хитрую #опу находится свой МПХ с левой резьбой :) Хотя скрипт-киддисов это отпугнет.
    Но при наличии физического доступа к машине вопрос "не дать доступа" не стоит. Стоит вопрос "максимально усложнить его получение", потому что время на его получение будет прямо пропорционально умению юзера и желанию туда попасть.
    Как при загрузке VM проверить целостность некоторых директорий/файлов?

    Требовать доступ в тырнет и сверять чексуммы файлов с чексуммами на Вашем сервере, при несовпадении рушить систему. Этот момент лучше отразить в договоре :) При обновлении ВМ (если оно предполагается) конечно же не забывать обновить чексуммы.
    Конечно, все это все равно не поможет :) Вы фактически хотите сделать то же, что гугл с андроидом - давать пользоваться, но не давать рута. Сколько уже способов получения рута придумало благодарное хитро#опое человечество?
    Ответ написан
    Комментировать