Que base de datos usar en un sistema c# a la que acceden varias pc?

Tengo una aplicacion escritorio hecha en c# usa entity framework y ahora esta funcionando con sql server de manera local, pero quiero que la aplicacion se instale en varias pc que accedan a la misma base de datos. Tengo que guardar imagenes asi que deberia permitir mas o menos 20gb de almacenamiento. ¿Que base de datos puedo usar en este caso?

Sistema de barra de busca para meu site com HTML, CSS, e JavaScript

Olá eu estou montando um site em html

e eu queria fazer um Sistema de busca

que quando a pessoa digitasse, a barra recomendassse os nome de itens da lista,

tbm com estilo em css

por exemplo, o usuário iria buscar por um jogo, ai essa barra iria retornar todos os itens que tivesse o que o usuário perguntou

Botão em sistema web para que quando acessado via Samrtphone, crie atalho na áres de trabalho

estou fazendo um sistemas ASPNET C#(WebForms) e quero que na tela de login, tenha um botão ou link para que quando o usuário acesso de smartphone, este botão ao ser clicado crie um atalho na área de trabalho.

php – Como posso melhorar a segurança do meu sistema de manter o usuário conectado?

Partindo da ideia de que o usuário digitou o login e senha corretamente na página de login, irei salvar um cookie para autenticar o usuário para que o login permaneça ativo e o usuário consiga se conectar a outros dispositivos sem ser deslogado na sessão anterior.

Para isso comecei criando uma tabela no banco de dados com as seguintes características:

CREATE TABLE `manter_login` (
  `id` int(11) NOT NULL,
  `id_user` int(11) NOT NULL,
  `login_history` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`login_history`))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `manter_login`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id_user` (`id_user`);

ALTER TABLE `manter_login`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
COMMIT;

E criando as seguintes funções:

define("USER2", 'root');
define("PASS2", '');
define("NAME2", 'users');

//conexão area de login
try {
    $db2 = new PDO("mysql:host=".HOST.";dbname=".NAME2.";charset=utf8", "".USER2."", "".PASS2."");
    $db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db2->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $db2->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e2) {
    echo $e2->getMessage();
}

// Função basica para gerenciamento PDO
function sql2($db2, $q, $params, $return) {
  // Prepare statement
    $stmt = $db2->prepare($q);
  // Execute statement
    $stmt->execute($params);
  // Decida se deseja retornar as linhas ou apenas contar as linhas
    if ($return == "rows") {
        return $stmt->fetch();
    }elseif ($return == "rowsall") {
        return $stmt->fetchAll();
    }elseif ($return == "count") {
        return $stmt->rowCount();
    }elseif( $return == "lastid"){
        return $db2->lastInsertId();
    }elseif( $return == "fake"){
        //fake sem nada
    }
}

function salvarDadosLoginCookie($user_id, $removeSeletorLogin = 0){
    global $db2;

    $contar_registros = sql2($db2, "SELECT id FROM manter_login WHERE id_user = ?", array($user_id), "count");
    $pega_ip = filter_input(INPUT_SERVER, 'HTTP_CF_CONNECTING_IP', FILTER_VALIDATE_IP);
    $seletor = base64_encode(random_bytes(9));
    $autenticador = random_bytes(33);
    $meu_token = $seletor.':'.base64_encode($autenticador);
    
    //Array com as informações do usuario para podermos autenticar mais tarde
    $novoArray = (
        'ip' => $pega_ip,
        'seletor' => $seletor,
        'autenticador' => hash('sha256', $autenticador),
        'data' => date('Y-m-d h:i:s', time())
    );
    
    //Se a variavel removeSeletorLogin for diferente de zero, e porque a função foi chamada apos validar o hash_equals, então precisamos dar update no array e remover o seletor, para que não possa ser mais usado
    if($removeSeletorLogin !== 0){
        $lrdados = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($user_id), "rows");
        $gerarNovoArrayRemovendoSeletor = removeArrayLogin($removeSeletorLogin, $lrdados('login_history'));

        sql2($db2, "UPDATE manter_login SET login_history = ? WHERE id_user = ?", array($gerarNovoArrayRemovendoSeletor, $user_id), "fake");
    }
    
    //Se não houver registros iremos inserir um novo com o array de informações, Se ja exister um registro, o mesmo será modificado e iremos acrescentar um novo indice de array a ele, Esse Array poderá ter ate 5 indices, ou seja iremos permitir o uso da conta de um usuario a 5 dispostivos
    if($contar_registros > 0){
        $ldados = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($user_id), "rows");
        $gerarNovoArray = updateArrayLogin($ldados('login_history'), $novoArray);
        
        //Inciaremos esse session para poder fazer logout desse seletor mais tarde
        $_SESSION('seletor_login_atual') = $seletor;
        
        sql2($db2, "UPDATE manter_login SET login_history = ? WHERE id_user = ?", array($gerarNovoArray, $user_id), "fake");
    }else{
        //Array Inicial
        $novoArrayInsert = array($novoArray);
        sql2($db2, "INSERT INTO manter_login(id_user, login_history) VALUES (?, ?)", array($user_id, json_encode($novoArrayInsert)), "fake");
    }
    
    // Cookie com token e id do usuario, esse id será usado para validar se existe um seletor para um usuario, se houver um seletor pra ele, iremos permitir o login, se não houver o login e recusado
    setcookie('user_valid', json_encode(array( 'user_id' => $user_id, 'token' => $meu_token)), time() + (86400 * 7), "https://pt.stackoverflow.com/", null, true, true);
}

function autenticarLogin(){
    global $db2;

    // Verificamos se o cookie existe
    if (!isset($_COOKIE('user_valid')) || empty($_COOKIE('user_valid'))) {
        return false;
    }

    // Verificamos se o cookie e valido
    if(!$cookie_login = @json_decode($_COOKIE('user_valid'), true)) {
        return false;
    }

    // Verificamos se os parametros estão corretos
    if (!(isset($cookie_login('user_id')) || isset($cookie_login('token')))) {
        return false;
    }

    // Verificamos o tamanho do cookie 
    if(strlen($_COOKIE('user_valid')) > 1500){
        return false;
    }
    
    // Verificamos se o separador existe
    if ((strpos($cookie_login('token'), ':') !== false) === false) {
        return false;
    }
    
    $id_user_by_cookie = abs($cookie_login('user_id'));

    // Verificamos se existe algum registro com o id do usuario no banco de dados
    $contar_registros_user = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($id_user_by_cookie), "count");

    if($contar_registros_user === 0){
        return false;
    }

    if (empty($_SESSION('user_logado_id')) && !empty($_COOKIE('user_valid'))) {
        list($seletor, $autenticador) = explode(':', $cookie_login('token'));
        
        $registro_atual = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($id_user_by_cookie), "rows");
        $encoda_login_history = json_decode($registro_atual('login_history'), true);

        // definido inicialmente como 0, se no foreach houver um seletor igual ao cookie, iremos definir o valor pra 1
        $verifica_existencia_seletor = 0; 
        $captura_autenticador = '';
        $captura_ip = '';
        $captura_seletor = '';
        
        //Vamos descobrir se os seletores do usuario pesquisado e igual ao que está no cookie
        foreach($encoda_login_history as $hlogin => $data) {
            if($data('seletor') == $seletor){
                //Seletor Foi encontrado então iremos alterar o valor pra 1
                $verifica_existencia_seletor = 1;
                //Passamos o valor do token autenticador pra variavel
                $captura_autenticador = $data('autenticador');
                //Passamos o ip para uma variavel externa para podermos validar tbm
                $captura_ip = $data('ip');
                //Pegamos o seletor
                $captura_seletor = $data('seletor');
                
                //vou limitar a vida de um cookie a 7 dias, ja que geramos um novo sempre que o session leva update
                if(calculaDiferencaData($data('data')) >= 7){
                    //Removemos o Indice do array que tem o seletor gerado a mais de 7 dias
                    sql2($db2, "UPDATE manter_login SET login_history = ? WHERE id_user = ?", array(removeArrayLogin($seletor, $registro_atual('login_history')), $registro_atual('id_user')), "fake");

                    //Nesse caso o seletor deixou de existir, então voltaremos o valor dele para zero
                    $verifica_existencia_seletor = 0;
                }
            }
        }

        //Verificamos se o seletor foi encontrado
        if($verifica_existencia_seletor === 0){
            setcookie('user_valid', null);
            return false;
        }

        $pega_ip = filter_input(INPUT_SERVER, 'HTTP_CF_CONNECTING_IP', FILTER_VALIDATE_IP);
        
        //Se os ips do banco de dados e o ip da maquina do usuario forem diferentes não iniciaremos a sessao de login
        if($captura_ip !== $pega_ip){
            return false;
        }

        //Validamos o hash - se estiver tudo ok, podemos iniciar a session
        if (hash_equals($captura_autenticador, hash('sha256', base64_decode($autenticador)))) {
            //Inciaremos a session com id do usuario
            $_SESSION('user_logado_id') = $registro_atual('id_user');
            
            //Agora que o login foi bem sucessido, iremos re-criar o cookie e deletar o seletor do array, para que ele não possa ser utilizado novamente
            salvarDadosLoginCookie($registro_atual('id_user'), $captura_seletor);

            return true;
        }
    }

    if(isset($_SESSION('user_logado_id'))){
        return true;
    }
}

//Função destinada para deslogar o dispositivo que o usuario ta logado
function deslogarDispositivoAtual(){
    global $ta_logado, $db2;
    
    if($ta_logado === 1){
        $contar_registros_logout = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($_SESSION('user_logado_id')), "count");
        
        if($contar_registros_logout > 0){
            $registros_logout = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($_SESSION('user_logado_id')), "rows");

            sql2($db2, "UPDATE manter_login SET login_history = ? WHERE id_user = ?", array(removeArrayLogin($_SESSION('seletor_login_atual'), $registros_logout('login_history')), $_SESSION('user_logado_id')), "fake");
        }
    }
    
    session_destroy();
    setcookie('user_valid', null);
}

//Função para usar quando o usuario mudar a senha
function deslogarDeTodosDispositivos($id_deslogar){
    global $db2;
    
    sql2($db2, "DELETE FROM manter_login WHERE id_user = ?", array($id_deslogar), "fake");
    
    session_destroy();
    setcookie('user_valid', null);
}

function calculaDiferencaData($DataEvento){
    $hoje = new DateTime();
    $diferenca = $hoje->diff(new DateTime($DataEvento));
    return $diferenca->days;
}

function updateArrayLogin($arrayAtual, $novoArray){
    
    $arrayAtual = json_decode($arrayAtual, true);
    
    if(!is_array($arrayAtual)){
        $arrayAtual = array();
    }
    
    $arrayAtual() = $novoArray;
    
    $arrayNovo = array_filter($arrayAtual, function($value) {
        return is_array($value);
    });

    if(($quantidade = count($arrayNovo)) > 5){
        $arrayNovo = array_slice($arrayNovo, $quantidade - 5, 5);
    }
    
    return json_encode($arrayNovo);
}

function removeArrayLogin($seletor, $arrayEdit){
    
    $arrayEdit = json_decode($arrayEdit, true);

    if(!is_array($arrayEdit)){
        $arrayEdit = array();
    }
    
    foreach($arrayEdit as $arrayE => $data) {
        if($data('seletor') == $seletor){
            unset($arrayEdit($arrayE));
        }
    }
    
    return json_encode($arrayEdit);
}

e por fim iniciando as funções para verificar se o usuário está logado

$ta_logado = 0;

//Se o session user_logado_id não existe, iremos verificar se uma possivel sessão pode ser iniciada
if(!isset($_SESSION('user_logado_id')) || empty($_SESSION('user_logado_id'))){
    autenticarLogin();
}
//Se ja existir user_logado_id, iremos chamar os dados no banco de dados
if(isset($_SESSION('user_logado_id')) && !empty($_SESSION('user_logado_id'))){
    
    //Porem antes vamos validar e ver se o usuario não mudou a senha. Pois quando o usuario mudar a senha o registro no banco de dados e deletado.
    $contar_registros_user_atual = sql2($db2, "SELECT * FROM manter_login WHERE id_user = ?", array($_SESSION('user_logado_id')), "count");
    
    if($contar_registros_user_atual === 0){
        session_destroy();
        setcookie('user_valid', null);
    }else{
        $verificaDados = sql2($db2, "SELECT * from usuarios WHERE id = ?", array($_SESSION('user_logado_id')), "rows");
        if(isset($verificaDados('usuario')) && !empty($verificaDados('usuario'))) {
            $ta_logado = 1;
        }
    }
    
}

Como posso melhorar a segurança do meu sistema?

¿Cómo Calcular Logaritmos Sin Funciones del Sistema?

Estoy haciendo una calculadora que funciona con sumas, restas, multiplicaciones, divisiones y raíces cuadradas de largadas exageradas y de momento hasta aquí bien…
Mi Pregunta es la Siguiente: ¿Cómo Calcular el residuo de los Logaritmos con los operadores ( Métodos ) que ya tengo programados ( sumas restas multiplicaciones, divisiones y raíz cuadrada )?.
Estoy haciendo la función de logaritmos de cualquier base y saco los que son enteros correctamente ( enteros sin residuo ) pero no logro saber como continuar-la.
Aquí os muestro mi código hasta aquí:

Public Function Logaritm(ByVal NumBase As String, ByVal NumLog As String, Optional ByVal ReIterations As Integer = 128) As String
        Logaritm = StringCero
        On Error Resume Next

        Dim Cuenta As String = StringCero
        Dim Restante As String = NumLog

        Do Until PolCalculator.IsMayor(NumBase, Restante) = True
            ' Primero Voy Haciendo Divisiones Para 
            ' Conseguir la Parte Entera del Logaritmo
            Restante = BigNumbers.Divide(Restante, NumBase, ReIterations)
            Cuenta = BigNumbers.Sumar(Cuenta, StringUno)
        Loop

        ' Hasta Aquí Va Bien, Pero ¿Cómo Lo Hago Para Tratar con el Residuo?

        Dim Resultado As String = Cuenta
        If BigNumbers.IsMayor(Restante, StringCero) = True Then
            ' Si entro aquí es que el logaritmo contiene residuo
            Restante = BigNumbers.Divide(Restante, NumBase, ReIterations)
            Resultado = BigNumbers.Sumar(Cuenta, Restante)
        Else
            Resultado = Cuenta
        End If

        Return Resultado

    End Function

Sistema de Factura básico en C

tengo un proyecto para el miércoles en Lenguaje C de como hacer un Sistema de facturas. Les dejo el enunciado pero hasta ahora los unicos recursos que tenemos para lograrlo son estos.

1- while
2- for
3- lectura de datos
3- condicionales simples y dobles

La verdad no se si sea suficiente con eso me gustaría que me ayudaran con este problema ya que no logro del todo hacer que funcione como quiero.

Enunciado: la empresa Super Tecnomarkeck3001A lo contrata a usted para que desarrolle un software que permita realizar el proceso de facturación de los productos que ellos venden, para realizar dicha factura debe primero solicitar los datos personales del cliente (nombre, cédula, dirección y forma de pago) luego solicitar los departamentos a los que pertenecen los productos que desea comprar, la empresa posee 4 departamentos, perfumería(venta de jabones, desodorantes, perfumes) farmacia ( venda de acetaminofén y diclofenaco) tecnología (teléfonos, computadoras, smartwatch) jardinería (pico, pala, abono, semillas) para luego mostrar la lista de productos y se puedan seleccionar la cantidad de productos que desea llevar, cada producto debe poseer un precio y si el cliente elige varios deben sumar su valor para dar un subtotal al que luego debe agregarle el 16% de IVA y finalmente imprimir en pantalla la factura con los datos personales del cliente, los productos que ha seleccionado el precio de cada uno, el subtotal y el total con el IVA incluido todo esto relacionado en moneda nacional Venezolana.

node.js – (API propria privada nodejs + sistema web React) Consigo esconder minhas rotas no codigo fonte do html?

Vou ser especifico:
Estou criando um sistema completo onde o backend todo estou fazendo uma API que seria privada ao sistema web em React, ou seja, os usuários interagem com o sistema web, e o sistema web interage com essa minha API, e a as rotas da API nao pode ser acessada de outro jeito, e para saber se alguém esta logado ou nao, estou usando o JWT nos headers da requisição.
O problema é: nos componentes do react, um botão por exemplo, minha rota da API privada fica exposta no codigo fonte HTML? Ou o React esconde essa rota de algum jeito? (eu não entendo muito de React foi mal)
eu olhei nos códigos por exemplo do facebook (num exemplo: o botão de curtir) que esse botão é uma div onde não tem nenhuma rota vinculada a ela (nenhuma tag de link, nem de form) , e quando a pessoa clica, esse curtir é contabilizado lá no banco de dados obviamente, então o React esconde essas rotas por principio? ou o facebook que é extremamente profissional (e obvio que é) ??
Meu sistema, por exemplo, quando fosse renderizar a pagina de logado, apareceria outros usuários e teria um botão para por exemplo curtir uma postagem de alguém, e esse curtir seria contabilizado no banco de dados (uma tabela de posts de pessoa que curtiu para pessoa que é curtida) só que essa rota de levar os dados de quem esta curtindo, e quem é curtido, tem de ser necessariamente através de um form/input? ou o React faz esse trabalho sem mostrar nem os dados nem o input?
Lembrando que: o React esta consumindo uma API de certa forma externa mas que é exclusivamente para o sistema e nada mais, então alguém logado, puxaria os dados dele, e das pessoas q ele pode curtir por exemplo, eu consigo guardar os dados da própria pessoa logada no JWT, mas nao dos outros, e preciso da segurança na rota dessas outras pessoas
por favor, salvem minha pátria.

javascript – erro no botão de (próximo) do sistema de sorteio . Alguém consegue me ajudar?

nomes = ()

function receberNomes(){
 
    nomes.push(document.getElementById("inputNomes").value)
    document.getElementById("inputNomes").value = ""
    document.getElementById("numPess").innerHTML = nomes.length + 1
}

function sortear(){

    esc = Math.floor(Math.random(nomes) * nomes.length)
    document.getElementById("sorteado").innerHTML = nomes(esc)
    
}

function iniciar(){
  
  document.getElementById("sorteado").innerHTML = "Sorteando..."
  setTimeout(sortear, 1500)
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  width: 100%;
  color: #fff;
  background-image: url(/fundo-fosco.jpg);
}

#sorteado {
  margin-top: 55px;
}

#inputNomes {
  color: #fff;
  font-weight: bold;
  font-size: 17px;
}

#inputNomes:hover {
  border: 4px solid rgba(255, 255, 255, 0.788);
}

.container {
  width: 100vw;
  height: 100vh;
  align-items: center;
  display: flex;
  flex-direction: row;
  justify-content: center;
}

.conteudoIput {
  width: 500px;
  height: 450px;
  border: 1px solid white;
  box-shadow: #fff 0 0 0.7em;
  border-radius: 10px;
  text-align: center;
  font-weight: bold;
}

h1 {
  padding: 30px;
  font-size: 60px;
  font-family: Verdana, Geneva, Tahoma, sans-serif;
}

.conteudoIput > h3 {
  padding-bottom: 30px;
  font-size: 25px;
}

.conteudoIput input {
  width: 80%;
  height: 40px;
  border: none;
  border-radius: 7px;
  margin-bottom: 40px;
}

.conteudoIput input:focus {
  background-color: #333333;
}

.botao {
  width: 30%;
  height: 35px;
  cursor: pointer;
  padding: 5px;
  margin-left: 10px;
  margin-right: 10px;
  border: none;
  border-radius: 5px;
  font-weight: bold;
  font-size: 15px;
}

.botao:hover {
  background: rgba(10, 10, 10, 0.596);
  color: #fff;
  font-weight: bold;
  border: 1.5px solid white;
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="https://pt.stackoverflow.com/style.css" media="screen" />
    <title>Sorteios</title>
  </head>
  <body>
    <div class="container">
      <div class="conteudoIput">
        <h1>Sorteio</h1>
        <h3>
          Nome dos participantes ou numero <span id="numpass">( 1</span>° )
        </h3>
        <input id="inputNomes" type="text" nome="nomes" />
        <div class="botoes">
          <button class="botao" onclick="receberNomes()">PRÓXIMO</button>
          <button class="botao" onclick="iniciar()">SORTEAR</button>
        </div>
        <h2 id="sorteado"></h2>
      </div>
    </div>
    <script type="text/javascript" src="script.js"></script>
  </body>
</html>

Como posso fazer esse sistema em C?

Obrigado por contribuir com o Stack Overflow em Português!

  • Certifique-se de responder à pergunta. Entre em detalhes sobre a sua solução e compartilhe o que você descobriu.

Mas evite

  • Pedir esclarecimentos ou detalhes sobre outras respostas.
  • Fazer afirmações baseadas apenas na sua opinião; aponte referências ou experiências anteriores.

Para aprender mais, veja nossas dicas sobre como escrever boas respostas.

Como o kernel do sistema operacional é acordado para executar o algoritmo de escalonamento Shortest Job First preemptivo?

Nos livros de sistemas operacionais, nos capítulos de algoritmos de escalonamento, há a descrição do Shortest Job First preemptivo (SRTF). Em todos os livros que li e videoaulas no youtube que assisti, é dito que a chegada de um novo processo na fila dos prontos, que possua tempo de CPU inferior ao processo atual em execução irá causar a sua preempção. Mas como o kernel é acordado para colocar o escalonador em execução e consequentemente fazer a escolha do menor processo? Não há menção a time-slice, quantum ou interrupção do timer. Obrigado.