Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all 517897 articles
Browse latest View live

Проектирование проекта и реализация бизнес логики - Node.js

$
0
0
Добрый день
Вопрос болше теоретический нежели практический. Ищу совета как реализовать построение бизнес логики.
Итак. У меня есть следующего вида структура app.ts->route.ts->fetch.ts
Собственно вопрос в Deno/Node при HTTP запрсах route отрабатывает корректно но при каждом запросе index.html, main.css, ua.js он каждый раз проходит по route и соответственно по функциям, а функция fetch каждый раз отрабатывает. Тоесть есть ли какой то проектирование при котором такого нет. Допустим не из route вызывать, а как то по другому (да можно как будто мне кто то запрещает) так скажем по умному чтобы была читаемость поддержка кода.
На данным момент реализовано что в параментр в fetch если он не строка то и выходит с нулл.
Мне еще тут посоветовали использваоть "Разделение" типа controllers, modals, services. В контроллер это промежуточный вариант где идет вызов из route тоесть является носителем HTTP запросов и уже из него идут в сервисы тоесть в fetch. Но это не решает вопроса про повторные вызовы, опять же делать какие то заглушки как с fetch.
Поделитесь пожалцйста своим опытом.

После клонирования харда с одного пк на другой (windows 7), не работает мышь + клавиатура - Windows 7

$
0
0
Всех приветствую. После клонирования харда с одного пк на другой (windows 7), не работает мышь + клавиатура
Вероятнее всего из-за отсутствия драйверов на юсб
Где взять дрова на юсб, мать h610mk
И как их лучше подкинуть ?
PS/2 портов нету
Буду очень благодарен за помощь

Обработчики JS событий внутри своего модуля - 1С Битрикс

$
0
0
Всем привет!

Подскажите, как правильно писать обработчики событий для JS если я разрабатываю собственный модуль? Обычные обработчики событий пишутся в install/index.php с помощью метода registerEventHandler, а вот как быть, если я хочу написать обработчик JS события?

Хочу отловить событие открытия окна задачи в CRM Bitrix24. То есть когда пользователь либо открывает уже существующую задачу, либо нажимает кнопку "Создать", чтобы создать новую задачу в CRM.

Хочу чтоб обработчик Ajax-запросы подтягивал данные с внешнего ресурса, и я бы эти данные уже вставлял в форму создания новой задачи.

Подскажите пожалуйста, куда копать?

Скриншоты прикрепил

Изображения
Тип файла: png 1.png (113.7 Кб)
Тип файла: jpg 2.jpg (51.3 Кб)

Графика игры на Python - Python: GUI, графика

$
0
0
Здравствуйте.

разьясните плиз как реализовать графику на питоне. тоесть упращённо говоря нарисовать шахматную доску и фигуры по ней двигать.?? знаю что графика не самое сильная сторона питона, но всё же.

Вертикальная рулетка - JavaScript для начинающих

$
0
0
надо реализовать нечто похожие на то что на картинке.

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

Пока на ум приходит вариант с канвасом. может есть вариант без него?

Добавлено через 1 минуту
скрин

Драйвер ввода/вывода usb устройства - C/C++: WinAPI

$
0
0
Помогите подправить код драйвера на c++ KMDF, драйвер должен выводить в программе Dbgview название устройства который был подключен через usb порт, а если устройство отключено то соответственно выводить сообщение "USB устройство отключено".

Ошибки следующие: в 28 строке C2220 следующее предупреждение рассматривается как ошибка ругается на "Driver", и Driver: неиспользованный формальный параметр.

:

#include <ntddk.h>
#include <wdf.h>
#include <usb.h>
#include <usbioctl.h>

#pragma warning(disable: 4201) // Отключение предупреждения о безымянных структурах/объединениях

// Декларация функций
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD MyEvtDeviceAdd;
EVT_WDF_DEVICE_PREPARE_HARDWARE MyEvtDevicePrepareHardware;
EVT_WDF_DEVICE_D0_ENTRY MyEvtDeviceD0Entry;
EVT_WDF_DEVICE_D0_EXIT MyEvtDeviceD0Exit;

// Основная функция входа драйвера
NTSTATUS DriverEntry(
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
) {
    WDF_DRIVER_CONFIG config;
    WDF_DRIVER_CONFIG_INIT(&config, MyEvtDeviceAdd);

    return WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE);
}

// Обработчик добавления устройства
NTSTATUS MyEvtDeviceAdd(
    _In_ WDFDRIVER Driver,
    _Inout_ PWDFDEVICE_INIT DeviceInit
) {
    WDFDEVICE device;

    // Создание устройства
    NTSTATUS status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &device);
    if (!NT_SUCCESS(status)) {
        return status;
    }

    // Установка типа устройства и IO
    WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_USB);
    WdfDeviceInitSetIoType(DeviceInit, WdfDeviceIoBuffered);

    return status;
}

// Обработчик подготовки оборудования
NTSTATUS MyEvtDevicePrepareHardware(
    _In_ WDFDEVICE Device,
    _In_ WDFCMRESLIST ResourcesRaw,
    _In_ WDFCMRESLIST ResourcesTranslated
) {
    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(ResourcesRaw);
    UNREFERENCED_PARAMETER(ResourcesTranslated);

    return STATUS_SUCCESS;
}

NTSTATUS MyEvtDeviceD0Entry(
    _In_ WDFDEVICE Device,
    _In_ WDF_POWER_DEVICE_STATE PreviousState,
    _In_ WDF_POWER_DEVICE_STATE TargetState
) {
    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(PreviousState);
    UNREFERENCED_PARAMETER(TargetState);

    DbgPrint("USB устройство подключено\n");
    return STATUS_SUCCESS;
}

NTSTATUS MyEvtDeviceD0Exit(
    _In_ WDFDEVICE Device,
    _In_ WDF_POWER_DEVICE_STATE TargetState
) {
    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(TargetState);

    DbgPrint("USB устройство отключено\n");
    return STATUS_SUCCESS;
}

ПРОКСИ не получается отправить даже базовый HTTPS запрос - C++: Сети

$
0
0
Всем доброго дня.

Пытаюсь научится отправить https запросы через прокси, с использованием библиотеки libcurl. Но речь даже не о ней и с++. С ней у меня опыт работы есть и его достаточно, чтобы это сделать, но все никак не получалось, проходили пустые ответы. Я решил просто сначала научится отправлять запросы через curl в терминале.

Для тестирования выбрал списки бесплатных прокси серверов. Отправляя http запросы практически все http прокси отрабатывали хорошо. Но вот https никак не могу заставить работать. Пытался гуглить и задавал вопросы GPT, все вертится вокруг устаревшего SSL и TLS или самоподписанных сертификатов со стороны прокси сервера и то curl не может с ним установить соединение, то соединение устанавливается, но уже потом сам прокси не может установить соединение с конечным сайтом. В общем не знаю, что думать, либо все бесплатные прокси (а я их несколько сотен с разных сайтов перебирал) га*но, либо я что-то делаю не так.

Помогите разобраться)

Вот примеры запросов которые я отправлял в терминале и ошибки:

:

curl --socks5 109.237.224.30:1080 https://example.com
curl: (7) Failed to connect to 109.237.224.30 port 1080 after 80 ms: Couldn't connect to server


:

curl --socks5 44.218.183.55:80 https://example.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.


:

curl -x https://115.127.31.66:8080 https://example.com
curl: (35) LibreSSL/3.3.6: error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version


:

curl --tlsv1 -x https://115.127.31.66:8080 https://example.com
curl: (35) LibreSSL/3.3.6: error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version


:

curl -x https://102.132.57.174:8080  https://example.com
curl: (35) LibreSSL/3.3.6: error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version

Печать листов из списка таблицы в Excel - Python: Решение задач

$
0
0
Доброго времени уток уважаемые форумчане и начинающие (или уже гики) кодеры!

К сути дела:
Есть таблица excel со списком адресов (адреса домов), каждый адрес с новой строки.

Задача:
Напечатать каждый адрес отдельно на новом листе А4 (вертикальная ориентация/горизонтальная ориантация) в определенном месте (прямоугольная область в нижнем правом углу)

Как это реализовать?!

Тестовые данные:
10 строк с адресами (любым текстом) можете создать сами.
Вложение 1509471

Мои мысли: создать вторую книгу в док-те, сделать её шаблоном, брать данные из строки Лист1 А1 (допустим), подставлять в !Лист2 (необходимая область), ну допустим выбрать ячейку которая на печати будет в нужном месте, убрать границы текста и как-будто бы должно все сработать, по идеи. Далее скриптом от A1 до A10 циклом запустить.
Как вызвать функцию печати и автоматизировать процесс мыслей нет пока-что...

Под спойлером пример печати и размеры:
Кликните здесь для просмотра всего текста

Изображения
Тип файла: jpg photo_2025-04-30_04-50-09.jpg (55.4 Кб)
Тип файла: jpg photo_2025-04-30_04-50-13.jpg (59.0 Кб)
Тип файла: png Безымянный.png (8.0 Кб)

Ищу программистов и дизайнеров для разработки ОС на базе ядра Linux с финансированием посредством краудфандинга - Проекты

$
0
0
Приветствую. Я ищу системных программистов и дизайнеров для разработки ОС на базе ядра Linux и различных opensource компонентов.

Если коротко, то суть проекта в том, чтобы разработать ОС, которая бы имела следующие качества:
  1. Стандартизированный опыт взаимодействия: графический интерфейс; командная строка; принцип установки программ, приложений и драйверов с помощью установочных пакетов с графическим установщиком, без зависимости от интернет-репозиториев; директории программ, приложений и различных конфигураций; документация и справка.
  2. Стандартизированная компонентная база: системные утилиты, пакетный менеджер, графический стек и окружение рабочего стола, и т.д.
  3. Встроенные графические утилиты и функции, аналогичные Windows: диспетчер устройств, средство восстановления системы от повреждений, функция безопасного режима, средство дефрагментации диска, средство настройки сетевых устройств и брандмауэра, и т.д.
  4. Графические утилиты для диагностики и настройки оборудования, например аналоги MSI Afterburner и CPU Tweaker.

Система должна существенно отличаться от существующего спектра дистрибутивов Linux, характеризующихся высокой степенью однородности и ограниченной функциональностью для полноценного использования на десктопе. Требуется создание целостной операционной системы, а не сборки из разнородных компонентов. Выбор ядра Linux обусловлен его адекватной поддержкой широкого спектра оборудования и программного обеспечения.

В перспективе планируется внедрение нейросетевых функций в пользовательский интерфейс, обеспечивающих управление командной строкой посредством визуального программирования и обработки запросов на естественном языке.

Проект предполагает финансирование посредством краудфандинговых кампаний, приуроченных к выпуску новых релизов системы. Каждая последующая кампания будет связана с внедрением значимых инноваций и расширением функциональности, обеспечивая поэтапное развитие проекта. Собранные средства будут направлены на оплату труда команды разработчиков, а также на поддержание инфраструктуры проекта. Если кого-то заинтересовало данное предложение, то напишите мне на почту compositelinux@tutanota.com, мы обсудим все детали.

FlowPanel : доступ к элементам - Lazarus

$
0
0
Добрый день

Имеется FlowPanel, в которую программно добавляются другие TPanel. Каждая добавляемая TPanel имеет в своем составе TLabel, TImage, TButton. Как получить доступ к элементам TLabel, TImage при нажатии на TButton соответствующей панели TPanel?

Вложение 1509475

:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Contnrs, Graphics, Dialogs, ExtCtrls,
  StdCtrls, ComCtrls;

type

  { TMyPanel }

  TMyPanel= class(TPanel)
    MyLabel : TLabel;
    MyButton : TButton;
    MyImage : TImage;
    private

    public
      constructor Create(aParent : TWinControl; const aLabelCaption : string; NumImage : integer);
      destructor Destroy; override;
      property OnClick;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    Button1 : TButton;
    Button2 : TButton;
    FlowPanel1 : TFlowPanel;
    ImageList1 : TImageList;
    Panel1 : TPanel;
    procedure Button1Click(Sender : TObject);
    procedure Button2Click(Sender : TObject);
    procedure Button3Click(Sender : TObject);
    procedure MyButtonClick(Sender : TObject);
    procedure FormCreate(Sender : TObject);
    procedure FormDestroy(Sender : TObject);
  private
    Num : Integer;
    ObjList : TObjectList;
  public
  end;

var
  Form1 : TForm1;

implementation

{$R *.lfm}

{ TMyPanel }

constructor TMyPanel.Create(aParent : TWinControl;
  const aLabelCaption : string; NumImage : integer);
begin
  inherited Create(Owner);
  Parent := aParent;
  Height := 150;
  Width := 400;
  Color := clWhite;
  BevelColor := clDefault;
  BorderStyle := bsNone;
  BevelInner := {bvNone} bvRaised;;
  BevelOuter := bvNone;
  BorderSpacing.Around := 2;

  MyButton := TButton.Create(Self);
  MyButton.Parent := Self;
  MyButton.Left := Width - 155;
  MyButton.Top := Height - 37;
  MyButton.Height := 32;
  MyButton.Width := 150;
  MyButton.Tag := NumImage;
  MyButton.OnClick := @Form1.MyButtonClick;

  MyLabel := TLabel.Create(Self);
  MyLabel.Parent := Self;
  MyLabel.Caption := aLabelCaption;
  MyLabel.Left := 150;

  MyImage := TImage.Create(Self);
  MyImage.Parent := Self;
  MyImage.Height := 128;
  MyImage.Width := 128;
  MyImage.Images := Form1.ImageList1;
  MyImage.ImageIndex := NumImage;
end;

destructor TMyPanel.Destroy;
begin
  inherited Destroy;
  MyButton.Free;
  MyLabel.Free;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender : TObject);
var
  i : Integer;
  aPanel : TMyPanel;
begin
  for i := 0 to 19 do
    begin
      aPanel := TMyPanel.Create(FlowPanel1, 'Программа № ' + i.ToString, i);
    end;
end;

procedure TForm1.Button2Click(Sender : TObject);
var
  aPanel : TMyPanel;
begin
  aPanel := TMyPanel.Create(FlowPanel1, 'Программа № ' + Num.ToString, Num);
  Inc(Num);
end;

procedure TForm1.Button3Click(Sender : TObject);
begin
  ShowMessage('Сработало');
  //FlowPanel1.ControlList.Items[0].Control.OnClick Control.Width
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  Num := 0;
  ObjList := TObjectList.Create;
end;

procedure TForm1.FormDestroy(Sender : TObject);
begin
  ObjList.Free;
end;

procedure TForm1.MyButtonClick(Sender : TObject);
begin
  if (Sender is TButton) then
    begin
      ShowMessage('Получилось');
      ShowMessage(IntToStr((Sender as TButton).Tag));
      ShowMessage(IntToStr(FlowPanel1.ControlList.Items[(Sender as TButton).Tag].Index));
    end
  end;
end.


Вложения
Тип файла: zip FlowPanel.zip (505.3 Кб)

Ноутбук MSI Katana gf76 не включается - Ремонт ноутбуков

$
0
0
Здравствуйте, ноутбук MSI Katana GF76. Не включается, мигает три раза светодиод на кнопке включения, на акб нет напряжения, акб вскрыл, на самих банках есть напруга, но, на самой платке (с той стороны не видно) либо ключ закрыт, на выход напряжение не поступает. На сайте msi прочитал, что три моргания индиатора включения свидетельствует о неисправном акб. Подскажите,пожалуйста, без акб ноут должен запускаться, как старые ноуты, или нет?

Подключение к mariadb через интерфейс mysqli - PHP для начинающих

$
0
0
Всем доброго времени суток. Извиняюсь за мат, но к этой бл#дине (mariadb) можно как-то подключиться?
По долгу службы работаю в основном с PostgreSQL. Встала задача, для которой mariadb вполне подойдёт...
В качестве рабочей станции использую Debian 6.1, PHP 8.2.28 (Zend Engine 4.2.28), Apache 2.4.62.
Со времён студентчества подключался через интерфейс mysqli.
Решил использовать его. При подключении ошибка - Fatal error: Uncaught Error: Call to undefined function mysqli()
В php.ini раскомментирована строка extension = mysqli.
Библиотека физически присутствует - /usr/lib/php/20220829/mysqli.so.
Дал на библиотеку полный карт-бланш. Ошибка осталась.
Прописывал относительный путь до библиотеке - ошибка осталась.
Качал через менеджер пакетов mysql и mysqli (на удивление ОС давала установить данные пакеты) - ошибка осталась
Для справки... Перед установкой выше указанных пакетов функция extension_loaded возвращала True,
после False ))) смешно...
И ещё интересный вопрос...
Включил вывод предупреждений и ошибок, но скрип выводит только фатальные ошибки...
Если запускать скрипт через консоль (sudo), можно увидеть сообщение, что php не может найти библиотеку...

Изображения
Тип файла: jpg 2025-04-27_19-45-36.jpg (94.2 Кб)
Тип файла: jpg 2025-04-28_08-30-15.jpg (101.8 Кб)
Тип файла: jpg 2025-04-29_16-13-20.jpg (148.0 Кб)
Тип файла: jpg 2025-04-29_16-14-58.jpg (124.9 Кб)
Тип файла: jpg 2025-04-29_16-25-11.jpg (141.6 Кб)

Как вывести в обработке исключений в сплывающем окне только сообщение, которое нужно вывести, без сообщений об ошибке? - Oracle

$
0
0
Добрый день!
Как вывести в обработке исключений в сплывающем окне только сообщение, которое нужно вывести, без сообщений об ошибке?

Вот к примеру в примере ниже выведется сначала ошибка, которая пишется в gcAppMsgE, потом сообщение и потом снова ошибка с указанием строки, где эта ошибка.

:

EXCEPTION
    WHEN OTHERS THEN
        raise_application_error(gcAppMsgE, 'SQL выражение уже существует ID = '||vIdSQL);
  END;

А я хочу вывести в окне только 'SQL выражение уже существует ID = '||vIdSQL

Аллокатор памяти, ошибка Fatal glibc error: malloc assertion failure in sysmalloc - C++

$
0
0
Добрый день.
Я попытался написать свой аллоктор памяти (первый раз в жизни). Конечно он работает не так как ожидалось, поэтому появился примерно 1 миллион вопросов.
Собственно вот мой код
:

#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <timer.h>
#include <linearallocator.h>

struct ass_i;

const long ALL = 400;
LinearAllocator<ass_i> *_alloc = new LinearAllocator<ass_i>(ALL);

struct ass_i
{
    int a{};
    double dub{};
    void *operator new(size_t v) noexcept
    {
        return _alloc->allocate(&v);//malloc(v);
    }

    void operator delete(void *v)
    {
        _alloc->deallocate(static_cast<ass_i*>(v),16);
    }
};

int main()
{
    std::vector<ass_i*> _vec{};
    while(true)
    {
        Timer t;
        for (long x = 0 ; x < ALL ; x++)
        {
            ass_i *a = new ass_i();
            a->a = x;
            _vec.push_back(std::move(a));
        }
        _alloc->drop();
    }

    return 0;
}

и файл аллоктора

:

#ifndef LINEARALLOCATOR_H
#define LINEARALLOCATOR_H

#include <cstdlib>
#include <iostream>
#include <ostream>

template <typename T>
class LinearAllocator
{
    void *chanck = nullptr;
    inline static long pos {};

public:
    using value_type = T;
    explicit LinearAllocator(long size)
    {
        chanck = new char[(sizeof(T) * size)];
        pos = 0;
        std::cout << (sizeof(T) * size) << " " << sizeof(chanck) << " " << pos << std::endl;
    }
    T* allocate(std::size_t *size)
    {
        T* ret = static_cast<T*>(::new(&chanck + (sizeof(T) * pos)) T());
        pos ++;
        //std::cout << "pos  " << pos << std::endl;
        return ret;
    }
    void deallocate(T* p,std::size_t)
    {
        delete p;
        //pos--;
    }
    void drop()
    {
        pos = 0;
    }

};

#endif // LINEARALLOCATOR_H

1) вот тут строчка inline static long pos {}; , если сделать её просто long pos {}; , то она не будет прирастать тут pos++ , непонятно почему
2) если поставить const long ALL = 400; то вроде как работает, а если const long ALL = 100; то сразу вылетает ошибка
:


10:18:14: Starting /home/vabela/build-Test09-Desktop-Debug/Test09...
1600 8 0
0.01369
0.00454
Fatal glibc error: malloc assertion failure in sysmalloc: (old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)
10:18:14: /home/vabela/build-Test09-Desktop-Debug/Test09 crashed.

не до конца понятно, что это значит.

В целом, я пытаюсь написать некое подобие линейного аллоктора (не копирую чужой код и не подсматриваю в гугл, ну просто чтобы понять как это делать).
Но видимо у меня еще и ошибка в логике самого алгоритма.
Буду признателен за любые советы.

Нужны помощь с чтением файла с данными - Visual C++

$
0
0
Дорбрый день, есть файл, формата ключ - значения, длина строки 32 байта.
Первые 12 байт - ключ. Потом записаны 5 значений (может, 3, но ОЧЕНЬ маловероятно) - v1, v2, v3, v4, v5, где v1 с v4, v2 c v5 имеют одинаковый формат (похоже, что на каждые два значения приходится 7 байт, те два идентичных по структуре блока в файле), c v3 все известно - 1 байт 14;
13, 15, 16, 17, 1F - константы, они одинаковы во всех строках. Наглядная схема в приложении.
Нужно прочитать остальные (или только v1) или хотя бы понять смещение откуда начинается запись (те, где биты первого значения, где второго в отдельном блоке).
Декомпилированный код:
:

std::_Tree<std::_Tmap_traits<void*, `anonymous namespace'::_Mutex_count_pair,std::less<void *>,std::_Crt_allocator<std::pair<void * const,`anonymous namespace'::_Mutex_count_pair>>, 0 >> ::find(
    a1,
    v38,
    &v20);

v80 = *(double*)(std::_Tree_iterator < std::_Tree_val < std::_Tree_simple_types < std::pair<void* const, `anonymous namespace'::_Mutex_count_pair>>>>::operator->(v38)
    + 16)
    * 100.0;
v81 = std::_Tree_iterator < std::_Tree_val < std::_Tree_simple_types < std::pair<void* const, `anonymous namespace'::_Mutex_count_pair>>>>::operator->(v38);
v6 = std::_Tree_iterator < std::_Tree_val < std::_Tree_simple_types < std::pair<void* const, `anonymous namespace'::_Mutex_count_pair>>>>::operator->(v38);


ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>>::Format(
    v18,
    L"v3=%d v1=%.1lf%% v2=%.1lf%%",
    *(unsigned int*)(v6 + 8),
    *(_QWORD*)(v81 + 24),
    v80);


Изображения
Тип файла: png untitled.png (6.9 Кб)

В 2D платформере персонаж не меняет гравитацию в конце прыжка - Unity, Unity3D

$
0
0
Нужно, чтобы гравитация менялась в конце прыжка, а не в начале.
То есть, чтобы персонаж прыгнул с обычной гравитацией, достигая пиковой точки по оси Y, и приземлился быстрее с изменённой гравитацией, чем с обычной.
Сейчас персонаж прыгает на крайне небольшое расстояние вверх при движении влево или вправо.
Пробовал и массу вместо гравитации изменять таким же способом, то же самое получается.
А ещё иногда персонаж не может прыгнуть, находясь на поверхности, при движении влево или вправо.

:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private float moveSpeed = 3f;        // Скорость движения
    [SerializeField] private float jumpForce = 10f;        // Сила прыжка
    [SerializeField] private Vector2 centerPt = new Vector2(1000, 0); // Точка отсчёта для ограчения скорости
    private static Rigidbody2D rb;
    private bool isGrounded;            // Индикатор того, что персонаж стоит на земле
    private bool flag = false; 

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();               
    }
   
    private void Update()
    {
        CheckKeyUp();
    }
    private void LateUpdate()
    {
        Movement();
    }
    void FixedUpdate()
    {
        Gravity();
        Jump();
    }

    void Flag()
    {   
        flag = false;
        Debug.Log("False");     
    }
    void Gravity()
    {
        if (!isGrounded && (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A)) && flag == true)
        {
            rb.gravityScale = 1f;
        }
        else if (!isGrounded && (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A)) && flag == false)
        {
            rb.gravityScale = 7f;
        }
        else if (isGrounded || (isGrounded && (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A))))
        {
            rb.gravityScale = 1f;
        }
        else
        {
            rb.gravityScale = 1f;
        }
    }
    void CheckKeyUp()
    {
        if (Input.GetKeyUp(KeyCode.D) || Input.GetKeyUp(KeyCode.A))
        {
            rb.linearVelocity = Vector2.zero; // Заставляем персонажа резко остановиться при отпускании клавиши движения
        }
    }
    void Movement()
    {
        if (Input.GetKey(KeyCode.D))
        {
            Vector2 vector2 = new Vector2(transform.position.x * moveSpeed, 0);
            Vector2 newPos = transform.position.x * vector2;
            PostMovement(-newPos, -centerPt);
        }
        else if (Input.GetKey(KeyCode.A))
        {
            Vector2 vector2 = new Vector2(transform.position.x * moveSpeed, 0);
            Vector2 newPos = transform.position.x * vector2;
            PostMovement(newPos, centerPt);
        }     
    }
    void PostMovement(Vector2 newPos, Vector2 centerPt)
    { 
        Vector2 offset = newPos - centerPt;

        rb.linearVelocity = Vector2.ClampMagnitude(offset, moveSpeed); // Ограничиваем максимальную скорость передвижения
        rb.AddForce(offset * Time.fixedDeltaTime); // Передвижение
    }
   
    void Jump()
    {     
        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
        {         
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
            flag = true;

            Invoke("Flag", 0.5f); // Вызываем примерную задержку для смены гравитации в верхней точке по оси Y после прыжка
            Debug.Log("Прыжок");
        }     
    }

    // Когда персонаж вступает в физическую связь с объектом
    void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.CompareTag("Floor")) // Предположим, пол обозначен тегом "Floor"
        {
            isGrounded = true;
        }
    }

    // Когда персонаж прекращает контакт с объектом
    void OnCollisionExit2D(Collision2D col)
    {
        if (col.gameObject.CompareTag("Floor"))
        {
            isGrounded = false;
        }
    }
}

Причины изменения файла конфига - 1С: Типовые и стандартные решения

$
0
0
Немогу разобратся в причине изменения структуры файла конфига после каких то манипуляций с конфигурацией програмистами 1с. Дело в том что на sql мы парсим фалы конфигурации с целью определения перечислений (так как их нет в структуре хранения). Баз много, парсер один. И вот в один прекрасный день на одной из баз парсер сломался. Начали разбиратся, увидели, что дерево конфы структурно изменилось. Никто из прогеров 1с не может понять какое событие повлекло изменение. Недолго погуглив я понял, что в конфу перечислений добавились владельцы(регистраторы), но ведь у перечислений ведь не может быть владельцев? Помогите разобратся в связи с чем появилось изменение. Посоветуйте: пробовать менять конфу в прежнее состояние или менять логику парсера.
Скрины одного и того же перечисления до и после изменения прикладываю.

Изображения
Тип файла: jpg Было.jpg (61.1 Кб)
Тип файла: jpg Стало.jpg (56.8 Кб)

На чем сейчас собирают простые админки? - JavaScript: Vue.js

$
0
0
Требуется собрать админку для энтерпрайза. Много огромных 30 столбичных таблиц с разными данными, много списков с возможностью поиска. Нужно, чтобы все смотрелось максимально компактно, сухо, строго, скучно. Этакий 1С в браузере, с адаптацией под мобилу. То есть условный vuetify с анимашками, большими отступами в боксах и плавными переходами будет вызывать отторжение у пользователей.

Что посоветуете?

Nginx proxy - Nginx

$
0
0
Добрый день, коллеги!
Решил переехать на веб сервер Nginx c Apache. Использую там proxypass и заметил такую особенность. Apache умеет разрешать конечным узлам получать сертификаты SSL Letsencrypt, через Nginx я не могу это настроить.

У меня за веб сервером находится synology, которому так же нужны сертификаты для работы(Synology Drive, cam) часть пользователей работают локально с ним. Раньше я получал сертификаты на веб сервере Apache, далее на синолоджи и все корректно работало и обновлялось. После переезда на Nginx синолоджи не может получит сертификаты.

Заметил еще такую особенность, пока Nginx не получил сертификат SSL, то на синолоджи спокойно я могу получить сертификат, как только получил его на веб сервере Nginx, то синолоджи уже не получает сертификат.

Подскажите как поправить конфиг Nginx что бы прокси пасс пропускал запросы на выдачу сертификата, но и при этом сам автоматом обновлялся?

Гипнотерапия и дюже крутый инфобизнесмен - Социальные сети

$
0
0
Сабж.
Раньше мне в фб и ютуб часто приходила с ним реклама.

Вебинары вел, инфо курсы.
Гипнотерапевт.
Или русский или украинец.

В одной из своих реклам он кричал, что женщина есть первая в мире копировальная машина.
(запомнилось :) )

Может кто подскажет, как звать чувака?
Viewing all 517897 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>