• Облом, или как провалился любимый ИТ-проект
    0
    А что по этому поводу говорит Минский SoftClub, это же их профиль?
  • Язык программирования Mash
    –2
    Использовать двоеточие ":" для начала блока — на мой взгляд плохая идея. Было бы логичнее использовать ключевое слово, например «do».
  • Разработка веб-сайта на паскале (backend)
    0
    Не совсем понял, на Паскале и шаблонах сделан только сайт, или форум тоже?
  • Прекратите использовать Else в ваших программах
    0
    Напомню, что изначально речь шла о стеке и цепочке вызовов. И я на примере классического backend показал, что длинные цепочки вызовов усложняют отладку.

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

    То есть, первый уровень отладки — это проверка входящих-выходящих данных каждого сервиса, чтобы определить, в каком сервисе проблема и на каких исходных данных. И уже потом лезть в конкретный сервис, ставя брейкпоинты и ассерты на конкретный тип данных.

    В этом случае не придется изучать сотни запросов в дебагере. И не придется каждый раз перезапускать после сеанса отладки всю монолитную систему, достаточно перезапускать только конкретный сервис. Сфабриковать и подсунуть тестовые данные (mock) тоже проще в отдельный компонент системы, чем монолитную систему.
  • Прекратите использовать Else в ваших программах
    0
    Ниже ответил, на примере классического backend: habr.com/ru/post/478158/#comment_20963624
  • Прекратите использовать Else в ваших программах
    –1
    Согласен насчет java, там все хорошо с отладкой. А что вы называете архитектурой? Свойства языка, железа или дизайн программы? Судя по дальнейшему тексту — свойства языка, платформы разработки.

    стектрейс и дебаг вот вообще никак не связаны. Стектрейс описывает проблему и выдаёт данные, которые догодался запросить программист (в виде сообщения исключения)

    Стектрейс это часть дебага, важный инструмент. Без него все намного сложнее. Позволяет видеть истоки проблемы, откуда она пришла.

    Насчет отладки распределенной архитектуры. Простой пример: отдельно сервис (или сервер) БД, сервис HTTP и сервис приложения. В этом случае не нужно забивать голову деталями БД и HTTP при отладке приложения, это отдельные «черные ящики». В случае сбоя в БД или HTTP достаточно перезапустить только отдельный сервис, и область поиска причины сбоя значительно сужается. А представьте, что будет, если HTTP и БД обрабатываются в одном приложении, в одной цепочке вызовов? Малейший сбой уронит всю систему. Какой бы хороший ни был язык программирования, проблема будет в дизайне системы.
  • Прекратите использовать Else в ваших программах
    –2
    Может вы и правы. Когда-то разбирался в тонкостях работы асинхронных вызовов, а сейчас уже забыл. Потому что перестал их использовать и ломать голову над асинхронностью однопоточного по сути приложения.
  • Прекратите использовать Else в ваших программах
    –2
    Меньше вложенных функций приходится изучать и держать их контекст в голове.
  • Прекратите использовать Else в ваших программах
    –1
    Угу. А чтобы избежать ошибок достаточно их не совершать. Все просто! =) Но ошибку все-таки совершили и catch в нужном месте не поставили. Да и не всегда try… catch помогает поймать проблему, обычно ловится уже последствие, факт поломки. Например, когда образовался dead pointer, вроде все работает, но ломается где-то при закрытии программы. Или в конце «всплытия» из длинной цепочки вызовов. А ограничивая длину цепочки вызова, гораздо проще локализовать проблему.
  • Прекратите использовать Else в ваших программах
    –2
    Это если классический синхронный event loop и message queue, как в винде. А в Андроиде, например, таймеры и activities стреляют не дожидаясь завершения предыдущего вызова, как будто в новом потоке. Да и JS вроде тоже. В винде проблемы возникали при банальном переключении визуальной иконки по таймеру. Вроде все нормально работает, а через час падает. А когда смотришь через профилировщик, то виден постоянный рост стека и поглощение какого-то ограниченного ресурса, например, дескрипторов в Windows. Потому что где-то стоял WaitForMultipleObjects, который не блокировал event loop, а тупо ждал выхода из какой-то функции.
  • Прекратите использовать Else в ваших программах
    –2
    Дело не в формате стекстрейса, а в его размере, глубине. И это сильно влияет на качество и скорость отладки, а также на устойчивость системы при незначительных сбоях.

    Например. Настолькое приложение. Форма ввода с кнопкой ОК, выполняются какие-то проверки, вычисления, записи, чтения, и в итоге выполняется COMMIT в базу данных. Если происходит исключение где-то между ОК и COMMIT, то оно всплывает аж на уровень кнопки ОК, то есть обработчика событий GUI. И не факт, что перехватывается и обрабатывается должным образом. В результате, в программе проблема, но о ней могут не догадываться долгое время, а на поиск и исправление уйдет уйма времени.

    А если внутренняя архитектура разбита на несколько коротих «конвееров» команд, то все намного проще и надежнее. Например, нажатие ОК не выполняет какой-то код, а только кладет команду и данные формы в очередь. Отдельный обработчик берет данные из очереди, проверяет и передает в следующую очередь. Затем следующий обработчик берет данные из очереди, производит вычисления, помещает результат в следующую очередь. Казалось бы, так все намного сложней и медленней. Но на деле, такая «микросервисная» архитектура намного проще в отладке, устойчивей и производительней на многозадачном железе. Исключение всегда всплывает на уровень консьюмера конкретного конвеера, значительно уменьшая размер контекста, сужая область и глубину поиска причины сбоя. Особенно ценно это в хардкорном продакшене, где нет доступа для отладки и приходится работать по продиктованному голосом адресу исключения. Даже не всегда есть возможность посмотреть логи и стектрейс.
  • Прекратите использовать Else в ваших программах
    –3
    Например, по асинхронному таймеру происходит вызов функции не дожидаясь выхода. При высокой нагрузке такие вызовы накапливаются. Конечно, тут вопросы к проектированию такого решения, но ведь в нормальных условиях все работает.
  • Прекратите использовать Else в ваших программах
    –2
    Дамп стектрейса при сбое давно изучали?
  • Спасение интернета: создатель WWW представил свой глобальный план
    0
    Допустим, есть такая технология. Что вы с ней будете делать, как использовать? Готовы ли вы за нее платить и кому? Готовы ли вы к тому, что не только вы можете связаться с любым человеком без всякого контроля, но и любой человек может связаться с вами и предложить censored?
  • Нетоксичное лицемерие
    0
    А этот хороший человек или коллектив готовы нести материальную или уголовную ответственность за выполненную работу?
  • Спасение интернета: создатель WWW представил свой глобальный план
    0
    Предлагается, грубо говоря, 9 заповедей:
    Правительствам:
    1. Дать каждому доступ в интернет
    2. Весь интернет доступен в любое время
    3. Уважать и защищать основные права и безопасность данных людей в интернете
    Компаниям:
    4. Делать интернет доступным всем и каждому
    5. Уважать и защищать права и безопасность данных людей в интернете, строить систему доверия
    6. Разрабатывать технологии, которые поддерживают хорошее и мешают плохому.
    Гражданам:
    7. Творить и помогать другим в Сети
    8. Строить сильные сообщества, которые уважают чужое мнение и человеческое достоинство
    9. Бороться за Сеть
  • Глава Сбербанка назвал себя виноватым в утечке данных клиентов
    0
    То есть, это Греф лично сделал на сайте сбербанка форму для входа в «личный кабинет» по номеру паспорта и коду SMS, чтобы зэки могли имитировать «колл-центр банка»?
  • Эксперты оценили вероятность отключения интернета в России в случае массовых протестов
    +1
    А вы не боитесь, что у вас в кармане появится пакетик с веществом или оружейный патрон? =)
  • Введение в SSD. Часть 1. Историческая
    +1
    В 1997 даже готовились к производству, а я в то время обучался в техникуме для работы на том самом заводе, и нам показывали, как это работает на примере голографических сувениров, выжженых лазером в акриле.

    Мировой рынок готовится к появлению нового поколения информационных носителей DVD. Массовый их выпуск ожидается весной. Тем временем в России разворачивается проект, который в случае успеха сделает DVD технологией вчерашнего дня. Проект под названием «Трехмерная память» попал под контроль правительства РФ: с подачи Егора Строева Виктор Черномырдин подписал распоряжение о промышленном производстве в России сначала опытных образцов, а затем и серийном выпуске принципиально нового носителя информации — трехмерной оптико-электронной памяти. Производство должно развернуться на родине Егора Строева — в Орле.


    185.147.37.91/doc/171853
  • Введение в SSD. Часть 1. Историческая
    +1
    Microsoft и Warner Bros. представили новую технологию хранения фильмов, которые теперь могут быть записаны на кварцевое стекло размером 75x75 мм и толщиной 2 мм. Первым фильмом, который был использован для создания кварцевой и почти вечной копии, стал оригинальный «Супермен» 1978 года. Данная технология является частью Project Silica от Microsoft Research, в ней используются специальные лазеры и искусственный интеллект для создания элемента хранения данных в кварцевом стекле.

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

    habr.com/ru/news/t/474616
  • На старой виниловой пластинке рок-группы обнаружили компьютерную программу на Бейсике
    0
    Ясен пендель, в метаданных современных форматов можно что угодно спрятать.
  • Новый алгоритм поиска пути в Factorio
    0
    Точно так же. Принцип ведь простой, разбить карту на узлы, вычислить проходимость между соседними узлами, построить оптимальный маршрут. А тут это в два этапа делается, сначала маршрут по крупным «клеткам», потом внутри каждой клетки маршрут «по пикселям».
  • Я в одиночку отрефакторил 15 тысяч строк легаси. Это были худшие две недели в жизни
    0
    Легаси было на шарпах.

    Опа, сишарп уже легаси. =8-[ ]
  • C++ против C#
    +1
    Из справки Delphi 7:
    Delphi is a high-level, compiled, strongly typed language that supports structured and object-oriented design. Based on Object Pascal, its benefits include easy-to-read code, quick compilation, and the use of multiple unit files for modular programming.

    Насчет ISO Pascal все понятно, это документированный стандарт, эталон. Как ANSI C.

    Всякие Delphi, ObjectPascal, TurboPascal, VirtualPascal, FreePascal, PascalABC и прочие — диалекты, в которых что-то добавлено. Но в целом, ObjectPascal это ISO Pascal + OOP. Как C++, у которого тоже разные диалекты.
  • C++ против C#
    0
    Формально — да. Хотя, разница между ObjectPascal и Delphi только в автоматическом разыменовывании типизированных указателей. То есть, можно не ставить @ и ^ во многих случаях.

    В Lazarus и FreePascal это просто опция компилятора.
  • C++ против C#
    0
    Тогда почему у файлов Delphi расширение .pas? =)
  • C++ против C#
    +3
    Есть мнение, что компьютер должен помогать человеку, а не человек компьютеру.
    Нет ничего сложного привязать функции к типу, например, по типу первого параметра. Компилятору без разницы, что там — str.split() или split(str), машинный код будет одинаков. А человеку удобнее и понятнее str.split().
  • C++ против C#
    –2
    Lazarus и Delphi это IDE. А язык называется Pascal. По возможностям он не отличается от C/C++, а по безопасности и удобству близок к C#. Производительность кода ограничена только качеством компилятора. Впрочем, можно прямо в коде использовать ассемблер, не полагаясь на компилятор.
  • Усложнение C++ неизбежно. И не только C++
    0
    Но вскоре мир за окном опять поменяется. Вы обнаружите, что ПК по своим возможностям уже обходят ваш мини-компьютер, ваши техники давно жалуются, что ваше железо пора менять. И узнаете, что с экономической точки зрения вам выгодно заменить одну мини ЭВМ на десяток ПК, объединенных в сеть.

    Раз выгодно, то о чем спор? Раньше бухгалтерия предприятия со всеми своими вычислительными машинами занимала целый этаж, а сейчас это пара человек на десяток предприятий. Ради такого прогресса можно хоть каждый год весь софт переписывать.
  • Усложнение C++ неизбежно. И не только C++
    0
    Если вы имеете в виду перевод string на unicode, то это не особо серьезная проблема. Где в string были буквы — работает как прежде и даже лучше. А у кого в string были байты — сами виноваты. Исправляется легко.

    Для мобильных платформ стринги сделали 0-based, а AnsiString вообще забанили.
  • Усложнение C++ неизбежно. И не только C++
    +1
    Обратная совместимость потерялась только на приложениях под мобильные платформы (Android и iOS). И не настолько сильно потерялась, можно включить режим обратной совместимости.

    На самом деле Delphi не умер. Microsoft сманил к себе его автора, а фирму-разработчика вынудил в итоге отказаться от Delphi. Сейчас Delphi в хороших руках и постепенно восстанавливает свои позиции. Кроме того, есть полностью опенсорсный бесплатный аналог — FreePascal + Lazarus, который тоже неплохо развивается.
  • 10 принципов самодокументируемого кода
    0
    Ну так используйте систему говорящих имен для асинхронных методов. И в комментарии напишите, куда и чем оно стреляет, название мишени.
  • 10 принципов самодокументируемого кода
    0
    У вас под рукой десятки проектов с сотнями похожих файлов? =)
  • 10 принципов самодокументируемого кода
    0
  • 7 привычек высокоэффективных программистов
    +3
    Однажды я попросил очень опытного водителя научить меня правильно водить машину. А он говорит:
    — Едь как в автошколе учили, не нарушай правила.
    — Ну это понятно. А как быстро разгоняться и проходить повороты, как выходить из заноса?
    — Если будешь ехать по правилам, то не будет разгонов и заносов. И с машиной меньше хлопот.
    — А если…
    — Если скучно нормально ездить — иди с парашютом прыгай.

    Ну, вот я отмотал мильон километров и написал мильон строк кода. Да, все так. Чем спокойнее едешь, тем меньше износ (машины и организма), тем больше можешь проехать. Больше внимания уделяется маршруту, цели поездки. Чем аккуратнее пишешь код (с говорящими именами, соблюдением стиля и правил безопасности), тем легче его читать и дорабатывать, тем больше кода и крупнее проекты можно поддерживать. То есть, код сам по себе перестает быть проблемой, можно сосредоточиться на решаемых задачах, взаимосвязях, архитектуре.
  • Как мы собираем ТВ-приставки
    +1
    То, что железо все стандартное и одинаковое на десяток моделей и брендов, а разница лишь в корпусах — это даже хорошо. Потому что все эти российские бренды живут год, максимум два, до первой налоговой проверки. А потом внезапно исчезают, остается глючный сайт с глючными прошивками, которые некому исправлять
  • История интернета: ARPANET — зарождение
    0
    Разница в менталитете начальников. В 50..60 годах была весьма развита техническая школа связи, были свои «телеграфные интернеты» у правительства, у почты и у силовиков. А машины для автоматической передачи и приема изображений (аналог факса) были и вовсе с 30-х годов. В 60..70 годах были проекты цифрового интернета от Китова и Глушкова. Погуглите, там много интересного. Бюллетени технических достижений СССР можно найти в библиотеках США. Но в самом СССР распространение информации строго контролировали, «как бы чего не вышло». А распространителей наказывали.
  • Есть мнение: IPv6 провалился — кто и почему так считает
    –2
    Ну, пусть будет 500к маршрутов, что странно для иерархичной системы по 64к на уровень. Поиск по хешу или по дереву это уже давно не проблема. И даже поиск по 100500к записей не проблема.
  • Есть мнение: IPv6 провалился — кто и почему так считает
    0
    Достаточно было перейти на «телефонную» адресацию, делов-то.
  • Библиотека OmniThreadLibrary — простая многопоточность в среде Delphi
    +1
    За эти 6 лет мое мнение о типизации и Python несколько поменялось. Типизация нужна, и чем строже, тем лучше. Но безопасный способ ее обойти (без жесткого typecast) тоже бывает нужен. Что-то вроде variant с поддержкой классов, когда можно попытаться вызвать какой-то метод наугад, и это приведет не к segfault, а к цивильному исключению несовпадения типа.

    Дженерики и анонимные методы я так ни разу и не использовал в Delphi. В Java и Kotlin так и не привык к анонимным процедурам, очень портят структуру кода.