Задать вопрос
  • При цикле while постоянно вылетает Unity. Как исправить?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    число float хранит двоичные дроби и конечное кол-во цифр.
    например 1/3 в 10-чной записи это 0.3333333333 и так до бесконечности.
    если мы запретим хранить бескочечное кол-во цифр (комп просто так не умеет), то 1/3 будет записана с погрешностью, т.к. в десятичной записи ее невозможно так отобразить
    допустим мы говорим х = 1/3
    давайте будем скдалывать х пока не получим 1
    а мы никогда не получим 1
    мы получим 0.9999999, которая не равна 1 и пойдем дальше
    аналогично с двоичной системой исчисления, 1/5, 1/10 не возможно выразить за 23 цифры, а float хранит только 23 двоичные цифры (double - 53 цифры)
    но даже если у тебя не будет арифметической погрешности, ловить точное равенство это так себе. обычно условие завершения цикла это знак больше или меньше, но не точное равенство.

    ну и еще так по мелочи, я не проводил эксперимент как это на производительности сказывается, но вектор это 3 числа, а х - одно число. зачем прибавлять к вектору другой вектор, если вам достаточно к иксу добавить какую-то величину. может быть 0 прибавляется очень быстро, но даже если мы забудем про производительность, просто к иксу прибавлять число это же наверное код будет изящнее. хотя у вас читаемость кода так себе. что такое gr, что такое WH, совсем неясно. и название controll - это попытка в адекватные названия, но совсем не ясная. controll наверное относиться к управлению, но тут я не вижу никакого управления. подумайте что делает этот скрипт и вычеркните слово controll из своих мыслей. ааа это control 1. значит есть и control 2. это совсем нейминг от бога.

    !!!!! обновил:
    что кстати значит "вылетает"?
    работа программы прекращается с отчетом об ошибке?
    или просто останавливается, зависает на 0 fps
    у тебя скорее всего второе. функция update вызывается на каждом кадре, если в в update делать бесконечный цикл, то программа остановится на этом бесконечном цикле, ошибки не будет просто игра встанет (наверное, я на такие ошибки не напарывался).
    если в update поместить что-то громоздкое, то у тебя fps сильно просядет
    общая рекомендация: тебе вряд ли в скриптах нужны циклы, в юнити есть свои циклы событий.
    Ответ написан
    Комментировать
  • Почему public вектор не отображается в инспекторе?

    GavriKos
    @GavriKos Куратор тега Unity
    Микропетпроджект - домашнее облако homeCloud
    Потому что инспектор не работает с Property, а работает только с Field. Наверное :-)
    Ответ написан
    3 комментария
  • Как сделать так чтоб ты доходил до определённого места и там включился диалог, юнити 2д игра?

    GavriKos
    @GavriKos
    Микропетпроджект - домашнее облако homeCloud
    Коллайдер-триггер
    Ответ написан
    Комментировать
  • Есть ли аналоги корутин Unity в языке c# и как их использовать?

    На сколько я знаю, корутины в Unity реализованы через IEnumerator и объекты WaitForSeconds.

    IEnumerator и IEnumerable - это стандартные интерфейсы, которые используются для реализации перечислений/коллекций и итераторов.

    А вот ожидание в C# ты можешь получить через метод Thread.Sleep (в синхронных методах) или await Task.Delay (в асинхронных методах).
    Ответ написан
    9 комментариев
  • Как повысить фпс в сцене с кучей статичных объектов?

    GavriKos
    @GavriKos Куратор тега Unity
    Микропетпроджект - домашнее облако homeCloud
    Уменьшить дальность отрисовки.
    Использовать LOD-ы.
    Подключить профайлинг и смотреть им.
    Ответ написан
    Комментировать
  • Какой стек технологий выбрать для разработки экосистемы проектов?

    GavriKos
    @GavriKos
    Микропетпроджект - домашнее облако homeCloud
    Ну как бе команда спецов у вас есть - пусть и решает.

    Под ваше ТЗ подходят любые ЯП - потому что ТЗ говно.
    Ответ написан
    4 комментария
  • Можно ли заменить стандартные исходящие порты 80,53,443 на другие?

    Ziptar
    @Ziptar
    Поисковый гном 80-ого уровня
    Послушай, уважаемый, ты не тем занимаешься. Во-первых, интернет, на усреднённом роутере на базе лини, мало связан с доступом к роутеру и доступом роутера куда-либо. Цепочка forward не пересекается с цепочками input и output. Кроме того, само оперирование понятиями "входящие" и "исходящие" требует осознания того, к чему ты эти понятия применяешь - к пакетам, или к соединениям, потому что это разные вещи, и на разных роутерах эти разные вещи могут называться одинаково.
    Что касается "можно ли заменить" - да, принципиально можно. Да, на большинстве роутеров можно. Нет, не на всех роутерах это можно сделать предусмотренным производителем путём. И интернет тут, как правило, вообще ни при чём. Но самое главное - это не нужно. Безопасности это не добавляет.
    Ответ написан
    8 комментариев
  • Почему занятого места на диске больше, чем файлов?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    Скорее всего, где-то остались удаленные, но не закрытые файлы - какие-то программы их держат.
    Их можно найти командой
    lsof -X / | grep deleted
    Если совсем лень разбираться, можно просто перезагрузить систему
    Ответ написан
    6 комментариев
  • Как корректно получить данные из SqliteDataReader?


    sqlCommandText = "SELECT * FROM table WHERE id='"+Id+"'"; // Смущает +Id+, так вроде не пишут, нужно @?


    Правильно, что смущает.
    1. SELECT * лучше не писать. Лучше писать конкретные поля, которые тебе нужны
    2. Вместо конкатенации следует использовать параметризованные запросы. При использовании EF Core и Dapper их можно делать через интерполяцию, но тут придётся ручками добавлять параметры в свойство Parameters

    using var command = new SqliteCommand
    {
        CommandText = "SELECT id, txt, floating_point, raw_bytes FROM table WHERE id=$id",
        Parameters = {
          new SqliteParameter("$id", 123)
        },
        Connection = new SqliteConnection() // Тут стоит подставить настоящий connection
    };
    
    using var reader = await command.ExecuteReaderAsync(); // Вместо async-await можно использовать и синхронные методы
    var data = new List<(int id, string text, double floatingPoint, byte[] blob>(); // Вместо кортежа можно нормальный тип
    while (await reader.ReadAsync())
    {
      var id = await reader.GetFieldValueAsync<int>(0); //integer
      var text = await reader.GetFieldValueAsync<string>(1); //text
      var value = await reader.GetFieldValueAsync<double>(2); // real
      var blob = await reader.GetFieldValueAsync<byte[]>(3); // blob
      data.Add((id, text, value, blob));
    }
    Ответ написан
    4 комментария
  • Какие есть идеи по акциям, если нет цен на сайте?

    PROInteriorDesign
    @PROInteriorDesign
    Дизайн интерьера: PROID.studio
    Акцией может являться дополнительный бонус или подарок. Что-то другое. Не сама скидка в %.
    Зависит от тематики сайта.
    Ответ написан
    2 комментария
  • Как удалить все кавычки из строки c#?

    Adler_lug
    @Adler_lug
    .Replace("\"","")

    Что вы лезете в то Unity, когда основ C# не знаете?
    Ответ написан
    1 комментарий
  • Как правильно оформить права на код?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Во первых составить лицензию. Для коммерческого использования и не коммерческого. Во вторых оформить юридическое лицо в третьих добавить кнопку покупки
    Ответ написан
    Комментировать
  • Как сохранять значения переменных?

    GavriKos
    @GavriKos
    Микропетпроджект - домашнее облако homeCloud
    В файл, в БД

    https://metanit.com/sharp/tutorial/6.5.php

    на закрытии программы записываете все свои переменные в файл или в БД. На открытии - читаете из файла в том же порядке. Все функции для этого доступны при быстром гуглеже.

    Для красоты лучше конечно сериализацию целыми классами делать. Вот так и можете гуглить- serialize class in c#
    Ответ написан
    5 комментариев
  • Тип с точностью до 4 знаков C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Есть. Называется int. Вам надо хранить количество десятитысячных в числе. Иными словами, вы вместо x храните в int x*10000. При выводе делите на 10000 (и установите выводить 4 знака).

    Такие числа можно просто складывать и вычитать. При умножении надо будет результат поделить нацело на 10000 (или округлить к ближайшему, делящемуся на 10000 и потом отбросить 4 нуля). При делении - наоборот. Надо сначала домножить числитель на 10000, а потом поделить нацело на знаменатель (возможно стоит подумать об округлении к ближайшему целому).

    Upd: И вообще, раз уж разговор о C++, то можно реализовать свой класс. Там можно даже отдельно хранить целую часть и 4 знака после запятой. Если вам встроенной точности int/int64_t не хватает. Все математические операции можно переопределить и работать, как со встроенным типом. Вообще, по-умному, это называется fixed point numbers.
    Ответ написан
    Комментировать
  • Почему возникает ошибка при использовании оконной функции?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Проблема в том, что после группировки поля исходных таблиц недоступны, если они не включены в выражение группировки.

    Правильно:

    SELECT "Items"."itemId", sum(price) / sum( sum(price) ) OVER ()
    FROM "Items"
    INNER JOIN "Purchases" USING("itemId")
    GROUP BY "Items"."itemId"


    Т.е. оконная функция применяется не к исходному полю, а к агрегатной функции.
    Ответ написан
    2 комментария
  • Как получить все дома на определённой улице?

    ZERGeich
    @ZERGeich
    Гуглите ключевые слова: "КЛАДР", "ФИАС"
    Ответ написан
    Комментировать
  • Что использовать для сравнения двух CSV файлов?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    допустим у нас есть файлы file1.csv и file2.csv
    $ cat file1.csv
    kpi1,kpi2,kpi3,kpi4,kpi5
    1.23,5.67,2.21,3.45,4.44
    
    $ cat file2.csv
    kpi1,kpi2,kpi3,kpi4,kpi5
    0.23,5.67,2.22,3.45,2.44

    где согласно условию: "Заголовки одинаковые, возможны вариации в значениях."

    cat file1.csv | head -1 | tr ',' '\n' > file3_1.csv
    cat file1.csv | tail -1 | tr ',' '\n' | paste file3_1.csv - > file3_2.csv
    cat file2.csv | tail -1 | tr ',' '\n' | paste file3_2.csv - > file3_3.csv

    в итоге получим
    $ cat file3_3.csv
    kpi1	1.23	0.23
    kpi2	5.67	5.67
    kpi3	2.21	2.22
    kpi4	3.45	3.45
    kpi5	4.24	2.44

    для удобства можно ввести 4-й столбец где укажем разницу между вторым и третим
    cat file3_3.csv | awk '{print $0"\t"$2-$3}' > file3_4.csv

    $ cat file3_4.csv
    kpi1	1.23	0.23	1
    kpi2	5.67	5.67	0
    kpi3	2.21	2.22	-0.01
    kpi4	3.45	3.45	0
    kpi5	4.24	2.44	1.8

    а заодно добавим заголовки
    echo -e 'name\t$2\t$3\t$2-$3' | cat - file3_4.csv > file3_5.csv

    $ cat file3_5.csv
    name	$2	$3	$2-$3
    kpi1	1.23	0.23	1
    kpi2	5.67	5.67	0
    kpi3	2.21	2.22	-0.01
    kpi4	3.45	3.45	0
    kpi5	4.44	2.44	2

    пример того как в консоли выделить красным цветом строки где разница между вторым и третим столбцом больше нуля:
    cat file3_5.csv | awk '$4>0{print "\033[41m"$0"\033[0m"}$4<=0{print}'


    для красивого оформления в консоли можно использовать утилиту csview
    $ csview -t file3_5.csv
    ┌──────┬──────┬──────┬───────┐
    │ name │ $2   │ $3   │ $2-$3 │
    ├──────┼──────┼──────┼───────┤
    │ kpi1 │ 1.23 │ 0.23 │ 1     │
    │ kpi2 │ 5.67 │ 5.67 │ 0     │
    │ kpi3 │ 2.21 │ 2.22 │ -0.01 │
    │ kpi4 │ 3.45 │ 3.45 │ 0     │
    │ kpi5 │ 4.44 │ 2.44 │ 2     │
    └──────┴──────┴──────┴───────┘

    пример покраски значения в таблице:
    csview -t file3_5.csv | awk '$8>0{print "\033[41m"$0"\033[0m"}$8<=0{print}'

    636a486564c22703960926.png

    для перекидывания в markdown используем ключ -s, --style
    $ csview -t -s Markdown file3_5.csv
    | name | $2   | $3   | $2-$3 |
    |------|------|------|-------|
    | kpi1 | 1.23 | 0.23 | 1     |
    | kpi2 | 5.67 | 5.67 | 0     |
    | kpi3 | 2.21 | 2.22 | -0.01 |
    | kpi4 | 3.45 | 3.45 | 0     |
    | kpi5 | 4.44 | 2.44 | 2     |
    Ответ написан
    1 комментарий
  • Почему Clang (с -O3) не векторизует данный цикл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В первом варианте был массив четверок int или массив 128 битных элементов.
    Во втором случае - два независимых массивка 64х битных элементов которые в памяти
    расположены достаточно далеко и для них скорее всего не нашлось такой векторной
    команды которая-бы адресовалась к паре 64 + 64.
    Ответ написан
    9 комментариев
  • Как правильно продавать свой код?

    1. Код продать невозможно
    2. Но ты можешь заключить лицензионный договор.
    Вот в этом договоре ты и указываешь, кто, кому, за что, в каком порядке, и когда что передаёт и каким способом.
    Там-же указываешь, какие права имеет приобретатель (например на изменение и использование в таких-то целях).
    Указываешь, какая лицензия должна быть у производных (чтобы, например, приобретатель не мог собрать из твоего кода программу, которую бы потом продавал, например)
    А также указывается, что точно нельзя (например передавать третьим лицам)

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

    Ну и да - бумажка ничего не значит, если ты не готов самостоятельно бегать по судам, чтобы доказывать, что кто-то твой договор нарушил.
    Ответ написан
    Комментировать