• Когда использование Cgo оправданно?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Основной недостаток использования Cgo - это снижение производительности.
    Вызовы C/C++ достаточно затратны по ресурсам, т.к. C ничего не знает о данных в Go и для вызова C необходимо полностью сохранять все регистры и переключать стек, за счёт этого и возрастают накладные расходы, соответственно снижается производительность.

    Использование Cgo имеет смысл, когда есть объёмные библиотеки написанные на C/C++, которые можно использовать. При этом написание кода на чистом Go намного затратнее, чем использование этих библиотек с Cgo.

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

    У меня был подобный кейс на Perl, но принцип тот же.
    При скачивании HTML страниц размер занимаемой RAM скриптом постоянно увеличивался и в итоге "съедал" всю память на сервере.

    Задача скрипта была скачивать HTML страницы, извлекать из них все ссылки на внешние ресурсы.
    Я принял решение и написал функцию на С, которая выкачивала страницу, извлекала ссылки, очищала память и возвращала в Perl уже готовый список ссылок. Скрипты перестали постоянно "пухнуть", их можно было запустить в несколько раз больше по количеству на том же сервере + производительность стала явно выше.

    В общем всё сильно зависит от задачи, но, думаю, более 90% кейсов будет связано с тем, что намного дешевле использовать готовую библиотеку C/C++ с Cgo, чем переписать эту библиотеку на чистом Go.
    Ответ написан
    Комментировать
  • Я придумал новый гениальный способ оптимизации игр?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    И движения камеры будут дерганные ппц потому что загрузка объекта будет сжирать ресурсы.
    А frustrum culling для рендера и так существует.
    Ответ написан
    Комментировать
  • Как подключиться к БД чужого сайта?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Никак.
    Ответ написан
    Комментировать
  • Правильная ли это топология?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Конечно, есть нюансы и исключения, но общее правило такое: в большенстве случаев корректной является топология из четырехугольников, иногда допустимы треугольники, если без них никак.
    В вашем случае, в примере 1, то что вы назвали "только одна грань" по сути восьмиугольнк. То что вершины (углы) расположены на одной прямой, ничего не меняет. Следовательно нужно делать как в 2, а для 3 должны быть веские причины.
    Ответ написан
    5 комментариев
  • Как проверить кроссбраузерность верстки?

    @pavelsha
    ДА
    ДА
    ДА

    Есть сборки для тестировщиков: Бандлы установщиков или образы виртуалок с разными браузерами.

    ИМХО, наиболее правильно верстать так чтобы было меньше костылей (селекторов, которые задают поведение в зависимости от версии браузера) и меньше проблем с совместимость по CSS/HTML/JS
    Ответ написан
    Комментировать
  • Почему JUnit 5 выполняет тесты в произвольном порядке?

    @Araya
    В BeforeEach наполняешь базу перед каждым тестом.
    Ответ написан
    4 комментария
  • Как запускать exe автоматически при попадании на ПК?

    @res2001
    Developer, ex-admin
    В такой постановке вопроса ответ - никак.

    Что бы любая программа запустилась, либо ОС должна знать, что ее надо запустить в какой-то момент, либо пользователь должен ее запустить руками.
    Для автозапуска можно использовать несоколько веток реестра, как пользовательских так и системных, так же можно использовать каталог sturtup в меню пуск (в вин10 его нет в явном виде в меню, но его можно найти в файловой системе) или же добавить Параметры->Приложения->Автозагрузка (это действие, по идее, добавляет записи вреестр).
    Еще вариант - добавить старт приложения в шедулер, повесив его на какой-либо подходящий триггер.
    После внесения соответствующих изменений и перезагрузки (или наступления триггерного события) приложение запустится.

    Так же можно запустить приложение удаленно, таких вариантов довольно много. Из встроенных средств можно использовать: wmic или powershell. Тот же psexec (о котором писал pavelsha ) и т.п. Но программа должна быть доступна на удаленном компьютере, по указываемому пути. Т.е. вы должны сначала скопировать программу на удаленный комп, а потом уже удаленно ее запускать. Как вариант - указывать сетевой путь, доступный удаленному компьютеру. Но нужно не забывать, что в случае сетевого пути, потребуется авторизация на сетевом ресурсе ... Проще скопировать локально.

    Кстати, редактировать реестр можно и удаленно. Для этого есть средства из коробки. Например команда reg add - умеет это делать. Но и тут есть своя специфика.
    Ответ написан
    Комментировать
  • Как принимать смс программно?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Операторы предоставляют телефонные номера с возможностью приёма входящих по протоколу SMPP. Как федеральные (11-значные), так и короткие. При этом исходящие сообщения (в сторону абонентов) можно отправлять только с коротких, на длинные можно только принимать входящие.

    Но стоит это довольно дорого. Один из операторов брал за федеральный номер 12 тыс. рублей в месяц, насколько помню. Короткие вообще безумно, мне даже страшно представить порядок цен.

    Но подключение по SMPP это лучший вариант с технической точки зрения. Альтернатива - это симка. Или у себя, или у сервиса, который предоставляет номера в аренду (типа sms-activate).
    Ответ написан
    3 комментария
  • Реально ли работать в одном IT-проекте (продуктовом) больше 5-ти лет и не деградировать профессионально?

    Jacen11
    @Jacen11
    Мой вопрос: реально ли развиваться в течение 5-ти лет и больше в одном продуктовом проекте и не деградировать?
    конечно возможно, почему бы и нет? Вот только человек со сменой работ будет прогрессировать быстрее и ему проще будет с этим
    Ответ написан
    3 комментария
  • Только PHP ли такой?

    Stalker_RED
    @Stalker_RED
    Вы конечно можете отдельно написать бек, а на фронт сделать на статическом HTML (потеряв при этом ряд возможностей, но представим, что они вам не нужны). Можете добавить на фронт js скриптов, которые будут что-то подгружать.
    Никто не заставляет вас использовать php как шаблонизатор.

    И нет, это не только php такой, практически в любом языке можно сделать такую-же кашу, просто в php эта возможность была изначально, и в первых версиях это был основной режим работы. А в других языках придётся это как-то включить, или написать промежуточный обработчик файлов.
    Ответ написан
    Комментировать
  • Только PHP ли такой?

    Вариант 1 - шаблонизаторы плюс рендер на стороне сервера
    Вариант 2 - RESTful API на PHP а рендер на фронте по полученным данным
    Ответ написан
    Комментировать
  • Почему не срабатывает нота при нажатии на клавишу?

    red-cat-fat
    @red-cat-fat
    Делаю игры
    Потому что метод aboba. Переименуй в Update и всё должно заработать
    Ответ написан
    Комментировать
  • Как прописать в договоре на создание сайта, что таким подобным проектом мы заниматься не будем?

    Данный пункт договора будет признан "нечтожным" любым судом.
    наложение обязательств на физ лицо - это рабство, а он в стране запрещено. Как Юр лицо я вообще плохо себе представляю такую форму договора по которому вы самограничите свои права предпринимательской детятельности выходящих за рамки текущего договора.
    Все договора должны работаь в разках закона РФ
    Закон напрямую вас не может ограничить в праве работать с любым подрядчиком.
    Так что с юристом составьте договор, но этот пункт будет нечтожен при любом варианте его написания.( так что смело можно тут же нарушать)
    Это требование с области "гардероб ответственности не несет" ( ответственное материальное хранение)
    Писать ты можешь че угодно но от закона это не спасет.
    В вашем случае этот пункт будет нечтожным.
    Ответ написан
    8 комментариев
  • Где большая часть места на диске С?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    В вашем случае настоятельно рекомендую переустановить ОС. Это избавит вас не только от проблем с местом на диске, но и решит другие проблемы, которые с большой вероятностью имеются на б/у компьютере. Не говоря уже о проблеме конфиденциальности.

    Потратьте ещё 500р и отнесите компьютер в сервис, пусть сбросят всё и установят вам чистую Win7.

    P.S. я не просто так сказал "сервис". Ни в коем случае не вызывайте "мастера" на дом.
    Ответ написан
    Комментировать
  • Где большая часть места на диске С?

    15432
    @15432
    Системный программист ^_^
    Автоматически найти все отжирающие место файлы поможет софт типа такого
    https://www.raymond.cc/blog/find-out-what-files-an...

    Вручную - включите отображение скрытых файлов и папок, а также защищенных системных файлов. Обычно самые прожорливые:
    - файл гибернации (в корне диска, размером с ОЗУ)
    - файл подкачки (в корне диска, размер настраивается в свойствах)
    - C/Пользователи/<имя юзера>/AppData/Local/Temp - временные файлы, часть удаляется сама фичей "Очистка диска"
    -C/Пользователи/<имя юзера>/AppData - в целом программы сюда класть всякое любят
    - Корзина - как ни странно, забывают про неё
    - Windows / Program Files - ну тут через удаление программ
    Ответ написан
    2 комментария
  • Как вывести самую длинную строку из массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const longestStr = arr.reduce((max, n) => max.length > n.length ? max : n, '');
    // или
    const longestStr = arr.sort((a, b) => b.length - a.length)[0];
    // или
    const longestStr = arr.reduce((acc, n) => (acc[n.length] = n, acc), []).pop();

    или, в более общем виде:

    function max(data, key = n => n) {
      const getVal = key instanceof Function ? key : n => n[key];
      let result = null;
    
      for (const n of data) {
        const val = getVal(n);
        if (!result || result[1] < val) {
          result = [ n, val ];
        }
      }
    
      return result?.[0];
    }
    
    
    const longestStr = max(arr, 'length');
    Ответ написан
    2 комментария
  • Сложно ли перейти с c++ на c#?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    C C++ будет довольно легко перейти на похожий (критерии я здесь намеренно опущу) язык вроде C# или там Java. Как бы странно не звучало, но и наоборот будет легко перейти, если использовать современное подмножество языка C++ и современные же практики разработки.

    Сложно может быть перейти с C++, скажем на что-то вроде Ruby/Pyhon, или JS, или что-нибудь функциональное вроде Scala. Но только при условии что у вас нет опыта с похожими языками и экосистемой вокруг них.

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

    Но с++ устаревший язык, да и вакансии мало(так говорят).

    Тут не совсем верно. C++ действительно старый язык и тянет за собой кучу "старья", от которого нельзя отказаться из-за политики обратной совместимости. Из-за этого есть куча проблем и с инструментами, и с экосистемой и с ABI, да и вообще много с чем. При этом, ни что (кроме старых проектов) не мешает пользоваться современным подмножеством языка и инструментами. Это всё равно ужасно, сравнивая с современными вещами и другими языками и их экосистемами, но хотя бы что-то.
    Насчёт вакансий, это как всегда зависит от места поиска (вероятно, города, где вы живёте) и сферы. В целом, я бы сказал, что вакансий на C# и правда больше чем на C++, вопрос только, какие из них вам придётся по душе. Ведь можно же и в каком-нибудь "кровавом энтерпрайзе", за вполне себе приличные деньги постоянно портировать код на новую версию фреймворка и больше ничем не заниматься. Что звучит так себе.
    Ответ написан
    1 комментарий
  • Сложно ли перейти с c++ на c#?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Очень сложно если ты недоджуниор, который и С++ еще не освоил. Просто потому что тебе собственно все еще надо учить все почти с нуля
    А если ты мид/сеньор, то ты таких вопросов и задавать не будешь.
    Ответ написан
    2 комментария
  • На какой библиотеке или фреймворке C можно написать ПО для автопилота самолёта?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Система автопилота - достаточно наворочена и разноуровнева, состоит из кучи модулей и подсистем и написана на разных языках. В топе - Ada, C, C++

    3f578.png

    А еще там есть веселые баги, когда определенные параметры посадочного курса вырубают нафиг все дисплеи в кабине:

    "All six display units (DUs) blanked with a selected instrument approach to a runway with a 270-degree true heading, and all six DUs stayed blank until a different runway was selected," noted the FAA's airworthiness directive, summarising three incidents that occurred on scheduled 737 flights to Barrow, Alaska, in 2019.
    Ответ написан
    1 комментарий