Задать вопрос
  • Как сессию с whatsappweb перенести на другой пк?

    OCTAGRAM
    @OCTAGRAM
    Использовать расширение типа Cookie-Editor или что помощнее, вроде https://sessionbox.io/
    Ответ написан
    Комментировать
  • Почему все так ненавидят паскаль?

    OCTAGRAM
    @OCTAGRAM
    Ответ написан
    Комментировать
  • Какой учебник по Turbo Pascal лучший?

    OCTAGRAM
    @OCTAGRAM
    Этот объявленный устаревшим ООП зачем так нужен? Мне кажется, что времена, когда писатели дорвались до инфраструктуры коммерческого книгопечатания и платёжеспособного спроса, были временами, когда было достоверно известно, что развитие в дальнейшем (в Delphi) пошло по другому пути. Имело смысл писать о вечном, о записях и массивах, но не об ООП заброшенном. В Delphi 7, если написать object, это warning.

    Можно делать задания на ООП для Delphi в старом синтаксисе.

    Имена старых классов имеют семантику значения, а если нужно работать с указателем, то нужно явно указывать указатель в имени типа. Где в Delphi TList, там в TP7 PList = ^TList. New для обычных указателей было расширено для объектов вызовом конструктора. И у Dispose аналогичное расширение было. Это вместо Create и Destroy. Указатель на метод обратного вызова взять нельзя. У объектов нет принудительного общего корня вроде TObject, поэтому полиморфные штуки типа TList работают с Pointer. Неявные метаклассы отсутствуют, так что никаких TClass и class of. Свойств нет.

    Extended syntax {$X+}, насколько я помню, позволяет не разыменовывать указатели на записи при обращении к их полям, и это распространяется и на методы тоже, так что кареток дополнительных в тексте будет не так уж много.

    Отсутствие исключений в языке накладывает такой отпечаток, что конструктор без исключений писать тяжело, и чтоб это побороть, добавлена псевдопроцедура Fail, про которую надо почитать.
    Ответ написан
    Комментировать
  • Чем отличаются друг от друга функции, процедуры и операторы(на примере FreePascal)?

    OCTAGRAM
    @OCTAGRAM
    Процедуры не возвращают результат, функции — возвращают.

    $X (eXtended syntax)
    Эта разница осложняется тем, что Паскаль после Вирта чаще портят, чем делают лучше. И, например, сделали возможным выбрасывать результат функции и вызывать функцию как процедуру. В Delphi это регулируется директивой $X (eXtended syntax), который паровозом меняет сразу много всего, и нельзя по отдельности только запретить выбрасывать результат. Паровозом становится нельзя образаться к результату по имени переменной Result. Казалось бы, можно пользоваться Exit(значение), но компилятор начинает глючить, когда тип значения record с управлением владением. И буфер символов array[0 .. 1023] of Char становится сложнее превратить в строку. Также становится обязательно использовать каретку для разыменования указателей. Смешались в кучу кони, люди. Куча синтаксических отличий переключается одной директивой, и сделано так, что с выключенной директивой толком жить не получается. Может быть, в FPC иначе, там свои глюки.


    Что касается операторов, в русском языке есть путаница переводов слов, которые в английском языке сильно не похожи. Хорошие переводчики разрешили эту путаницу таким образом, что statement = оператоР, а operator = операЦИЯ. Но не все переводчики согласовали глоссарий.

    Оператор (statement) — это:
    • пустой оператор
    • присваивание
    • вызов процедуры
    • составной оператор begin оператор; оператор; … end;
    • прочие операторы, как goto, raise, try, if, for, while, repeat


    Операция (operator) — это:
    • сложение, вычитание, умножение, деление
    • сравнения
    • логические и побитовые операции and, xor, or, not
    • битовые сдвиги shl, shr
    • явные и неявные приведения типов


    В Delphi 2006 и выше для объявления собственных операторов используется синтаксис class operator. У Free Pascal тоже был свой синтаксис собственных операторов.

    Здесь может быть путаница, потому что в Pascal не все операторы являются честными операторами, как должно быть. Например, Exit, Break и Continue не являются синтаксически простыми операторами, а являются операторами-вызовами процедуры, и расположены эти специальные процедуры в модуле System, так что полное имя System.Exit тоже сработает.

    Автор учебника, наверное, думает, что Read и ReadLn, наоборот, являются простыми операторами. Но нет. Это процедуры из модуля System, на которые навешана магия компилятора, чтоб они принимали разные параметры, но эта магия не делает из них операторы. Хотя вызов процедуры — это формально оператор.
    Ответ написан
    Комментировать
  • RC4 почему не полный результат?

    OCTAGRAM
    @OCTAGRAM
    Вместо Chr, который возвращает не понятно, что, для аналогии нужен Char. Или это какая версия Delphi? В старых (2007 и старше) для аналогии это WideChar.

    Посмотрел, а на чём прерывается версия Delphi. В JavaScript это \u0000. Напрашивается мнение, что Delphi отработала как надо, а проблема в системе отображения, которая закодирована на устаревшем языке программирования с устаревшей системой кодирования длины строки встроенным в конец строки нулевым символом. Поменяйте тот кусок, где режется, и строка сохранится во всей полноте.
    Ответ написан
    6 комментариев
  • Как организовать выплату налогов с цепочки Gumroad > PayPal > ИП в 2021 году?

    OCTAGRAM
    @OCTAGRAM
    В российском PayPal запрещены переводы с корпоративного на корпоративный счёт, а, как правило, все автоматиченские выплаты производятся с корпоративного, так что деньги вам просто послать не смогут с Gumroad. Только на личный счёт пройдёт оплата, ну а с личного счёта PayPal и вывод только на банковский счёт физлица сейчас работает.

    Гипотетически, можно платежи на Gumroad пробивать по курсу ЦБ РФ, а потом выведенные из PayPal средства второй раз в налогах не учитывать. Я не знаю, чем рискует ИП, используя личные счета в PayPal и банке, но выплачивая все налоги. Схема выглядит кислой.

    Известные мне случаи наезда налоговой выглядят так, что человек вообще не открывал ИП, поэтому налоговая усмотрела незаконное предпринимательство, и по умолчанию вменила НДФЛ и ОСНО с сответствующими страховыми взносами, и за неуплаченные по такому расчёту налоги добавила штраф 40%. Что бывает, если ИП с УСН открыто, предприниматель всячески пытается соблюсти приличия, а просто финансовая инфраструктура немного неправильная, для меня пока загадка.

    Если бы платили сразу на PayPal, то я пользуюсь Rocketr, и он сразу считает суммы в рублях и отбивает чеки на кассе. Но у вас сложнее, как я понимаю.
    Ответ написан
  • В чем разница halt(0) и halt(1)?

    OCTAGRAM
    @OCTAGRAM
    Если запустить из bash:

    ./MyProgram && echo True || echo False

    То для Halt(0) сработает echo True, а для Halt(1) сработает echo False

    Ещё так можно в bash писать:

    set -e
    ./Generate_ORM ...
    gprbuild ...
    7z a ...
    sftp ...
    ssh ...


    Здесь set -e устанавливает режим нетерпимости к ошибкам. Каждый перенос строки или точка с запятой работают как два амперсанда. В этой цепочке если что-то не отработало нормально, дальше исполнение не продолжается. Если исходники не сгенерились, нет смысла их компилировать, а если не скомпилировались, то нет смысла упаковывать скомпилированное, а не если не упаковалось, то нет смысла заливать на сервер, а если не залилось на сервер, то нет смысла удалённо перезапускать сервер. Как правило, кодом завершения процесса программа сообщает, что она не справилась.
    Ответ написан
    Комментировать
  • Как скопировать данные с ексель?

    OCTAGRAM
    @OCTAGRAM
    Можно средствами OLE сохранить весь документ или его часть в формат CSV, а его уже читать быстро
    Ответ написан
    Комментировать
  • Какие среды разработки приобрести и подешевле?

    OCTAGRAM
    @OCTAGRAM
    Качаем эту бесплатную студию: https://www.adacore.com/download

    Там улучшенный Паскаль, называется Ада, и компилятор C++ тоже есть, для сборки устаревшего кода. Система сборки и IDE поддерживают смешанные проекты. Это обеспечит первые два-три пункта. Что касается Embarcadero, их бесплатные версии поддерживают только один из языков. Не помню, можно ли на один компьютер сразу две студии поставить, для Delphi и для C++. Тут могут быть проблемы.

    Но есть ещё у них просто транслятор, без IDE: https://www.embarcadero.com/ru/free-tools/ccompiler Его-то точно можно держать вместе с Delphi Community Edition
    Ответ написан
    1 комментарий
  • Правильный ли цикл для точек в области?

    OCTAGRAM
    @OCTAGRAM
    С точки зрения математика подобный цикл делается так: берём массив точек и идём по нему циклом, перебирая все рёбра. Аккумулятор угла инициализируем нулём. В каждой итерации цикла добавляем в аккумулятор арксинус угла между лучами из выбранной точки в вершины рёбер, знак которого зависит от направления поворота. По окончании цикла, если выяснилось, что в аккумуляторе ±2π, значит, точка внутри фигуры. Также, если одна из вершин точно совпала с точкой или если во время аккумуляции был скачок ±π (арксинус минус единицы), это значит, что точка на границе. Если точка снаружи, то аккумулятор как накопится, так и разрядится поворотами в противоположную сторону, и минус с плюсом уравновесятся.

    С точки зрения программиста такую математику воплощать как есть рискованно. Вместо натурального логарифма программист по возможности возьмёт двоичный логарифм. И вместо проблемного арксинуса хочется взять что-то такое же по смыслу, но с меньшим накоплением ошибок. Я бы назвал это квадратный арксинус. Замеряет прогресс не по единичной окружности вокруг точки, а по единичному квадрату. На вход получает две пары координат, на выходе даёт число, которое в случае полного оборота накапливается не в ±2π, а в ±8.

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

    Если требуют цикл, придётся разобраться хотя бы с арксинусами. А если нет, то условие принадлежности к границе в общем виде выглядит так:

    if ((? = ?) and // строгое равенство для проверки принадлежности линии
        (? <= ?) and (? >= ?)) or // два неравенства, чтоб линию обрезать с двух сторон и превратить в отрезок
    
       // второй отрезок
       ((? = ?) and // строгое равенство для проверки принадлежности  линии
        (? <= ?) and (? >= ?)) or // два неравенства, чтоб линию обрезать с двух сторон и превратить в отрезок
    
       // третий отрезок
       // …
    then
    begin
      // сообщить о том, что на границе
      // …
      Exit;  
    end; // if


    Удобно сначала проверить принадлежность границе и выйти по Exit, а только потом проверять принадлежность толще.

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

    Принадлежность точки выпуклому многоугольнику определяется конъюнкцией неравенств для каждого ребра. Для выпуклого четырёхугольника:

    (? <= ?) and (? <= ?) and (? <= ?) and (? <= ?)

    Для треугольника:

    (? <= ?) and (? <= ?) and (? <= ?)

    Соединяем то и другое через or и получаем результат. Можно пойти и в другом направлении, не объединять множества точек, а вычитать. Глядя на рисунок, можно разглядеть объемлющий прямоугольник, из которого вычтена внутренность угла 135°. Внутренность угла можно задать двумя неравенствами

    (? <= ?) and (? <= ?)

    И объединить через and not:
    (… внутри прямоугольника …) and not (… внутри угла …)
    Ответ написан
    Комментировать
  • Есть ли отличия в асинхронном и многопоточном коде в контексте Python?

    OCTAGRAM
    @OCTAGRAM
    На настоящей многопоточности можно полностью параллельно исполнять не-Python код, например, долго работающие вызовы математических библиотек. Или адапторы к базе данных часто не имеют асинхронной версии. С другой стороны, настоящие потоки довольно дорогие с точки зрения таких ресурсов, как стек и объекты ядра, что ограничивает их количество примерно 1000, но вообще лучше не более 50 без необходимости
    Ответ написан
    Комментировать
  • Совместное использование C++ и Golang: возможно ли, насколько удобно, применяли ли вы в проектах?

    OCTAGRAM
    @OCTAGRAM
    Я совместно использовал Delphi и Ada в одном процессе с помощью COM. Думаю, и в вашем случае это могло бы помочь. COM задаёт однозначно понимаемую политику владения объектами и прочую рутину.

    просто смотрю на вакансии, что там требуют

    Вакансии, конечно, расстраивают
    Ответ написан
    Комментировать
  • Какие существуют адекватные способы предотвратить сбрасывание SSH тунелей?

    OCTAGRAM
    @OCTAGRAM
    Я прописал исполнять удалённую команду
    while sleep 0.5; do echo -n .; done
    Также сам plink крутится в вечном цикле:
    for /l %%i in () do plink -batch "SomeVPS Tunnel"
    Ответ написан
    Комментировать
  • Как правильно закрыть программу?

    OCTAGRAM
    @OCTAGRAM
    Во-первых, безопаснее и переносимее вместо прямого вызова Free делать FreeAndNil. Во-вторых, убирайте немедленно

    Self.Free;
    Ответ написан
    Комментировать
  • Возможна ли работа с файлами в pascal онлайн?

    OCTAGRAM
    @OCTAGRAM
    Я бы посмотрел в сторону Oxygene и Fire:

    https://www.elementscompiler.com/elements/oxygene/

    Можно ещё School Pak вспомнить
    Ответ написан
    Комментировать
  • Как исправить ошибку E2066?

    OCTAGRAM
    @OCTAGRAM
    TSet = (Sorted, Reversed, Random);

    Это объявление сделало Random константой с более высоким приоритетом видимости, чем System.Random.

    Варианты решения:

    В новых Delphi можно написать (в начале кода)

    {$SCOPEDENUMS ON}

    и заменить

    if ArrType = TSet.Sorted then
    // …
    else if ArrType = TSet.Reversed then


    Тогда TSet.Random не сможет пересекаться с System.Random

    Можно, наоборот, при использовании System.Random указывать полностью квалифицированный идентификатор:

    ArrI[i] := System.Random(Row);

    Либо можно просто переименовать TSet.Random во что-то, что не в точности Random
    Ответ написан
    Комментировать
  • Как подключить Alipay и Wechat на сайт?

    OCTAGRAM
    @OCTAGRAM
    У Покупо то и другое работает через PayMaster. Если своя касса есть, наверное, лучше напрямую PayMaster. А если нет, то однозначно Покупо. Уже платежи идут.

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