Задать вопрос
  • Как перенести из sqlite3 в Postgresql?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Экспортируй данные из sqlite в формате CSV, и импортируй в postgresql.
    Но перед этим в postgresql надо создать схему вручную - инструментов для миграции не знаю (разве что liquibase, но это уже оверхед на мой взгляд)
    Ответ написан
    1 комментарий
  • Какие крупные компании России работают с C#?

    newross
    @newross
    Product owner
    А вы хотя бы hh.ru открывали?
    Компании, которые постоянно набирают .Net разработчиков:
    - банки Deutsche Bank, Tinkoff, Промсвязьбанк;
    - продуктовые компании Custis, Abbyy, периодически у Яндекса вакансии мелькают и еще куча других компаний;
    - интеграторы Техносерв, Астерос, Nvision и другие.
    - аутсурсеры, десятки их.
    Ответ написан
    Комментировать
  • Какие есть инструменты для написания интерфейса для терминала?

    C++

    Rust

    Это из того, что у меня в закладках. Так-то ищите по тэгу TUI (text user interface, в оппозицию к GUI) - и будет вам счастье.
    Ответ написан
    Комментировать
  • Простым языком о замыканиях?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. Для чего замыкание существуют?
    Для инкапсуляции данных.
    В ООП есть модификаторы доступа (private, protected), которые закрывают доступ к данным извне класса, но позволяют обращаться к ним из методов.
    В ФП для этой задачи используют замыкания, закрывая данные внутри функции. Из вне данные недоступны, но вложенные функции имеют к ним доступ.

    2. В каких условиях они создаются?
    Когда вложенная функция обращается к переменным внешней функции.

    Хоть и просили без примеров, но на примере показать проще:
    // makeCounter - внешняя функция
    function makeCounter(initialValue) {
      var value = +initialValue || 0;
      // counter - внутренняя функция
      // она использует переменную value из внешней функции
      // что-бы это было возможным, для counter создается замыкание,
      // в котором хранится переменная value
      // переменная initialValue функции counter не нужна, поэтому ее можно "забыть"
      return function counter() {
        return value++;
      };
    }
    
    // у нас 3 экземпляра функции counter
    var counter1 = makeCounter();
    var counter2 = makeCounter();
    var counter3 = makeCounter(100);
    // и для каждой есть своя переменная value
    console.log(counter1()); // 0
    console.log(counter1()); // 1
    console.log(counter2()); // 0
    console.log(counter1()); // 2
    console.log(counter3()); // 100
    
    // а вот получить как-то напрямую переменную value мы не можем
    // инкапсуляция нам не дает поломать данные
    Ответ написан
    Комментировать
  • Как работает сборщик мусор с колбеками Promise?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Сборщики мусора (далее GC) бывают разные, в том же v8 используется сразу 3 типа GC в зависимости от поколения объектов (упрощенно молодое, старое и сложные случаи), но в большинстве своем принцип работы сводится к просчету достижимости из некоторого корня в дереве объектов (например глобального объекта, но не только его). v8 не является исключением, и его GC содержит C++ api для создания таких корней. Из JS мы данным api можем воспользоваться лишь косвенно, через сущности языка предоставляемые либо самим v8 либо платформой (браузером, node.js, deno и т.д.)
    Чтоб было понятно давайте рассмотрим простой пример:
    const h = 'Hello world!';
    const n = 'nothing';
    setTimeout(() => {
      console.log(h);
    }, 1000);
    У нас есть строковые переменные h и n. Переменная n нигде больше не используется и ее память очистится при ближайшей работе GC. А вот переменная h оказалась в замыкании созданном стрелочной функцией. И хотя в JS мы не можем достучаться до h имея ссылку на эту функцию, сама функция все таки имеет ссылку на h, а значит h не может быть уничтожена пока не будет уничтожена сама функция. В терминах GC ссылка на h будет серой, то есть сама ссылка на h недоступна из корня напрямую, но сейчас мы проверяем объекты, которые на нее ссылаются и истина будет зависеть от них (подробнее можете погуглить "mark black white and gray memory in gc").
    Давайте посмотрим на саму стрелочную функцию, которая держит h в замыкании. Из кода видно, что мы ее передаем в функцию setTimeout, о которой известно, что это api предоставленное платформой (а значит вероятно какая-то часть написана на C++), а так же, что она асинхронная. Платформе реализующей setTimeout наша функция понадобится после асинхронного ожидания и никто платформе не сможет гарантировать, что во время этого ожидания не будет работы GC, поэтому ей ничего не остается, кроме как запросить у v8 создание нового корневого дерева объектов, в которое и будет положена ссылка на данную функцию.
    После же выполнения таймаута платформе больше не нужна наша функция, поэтому ссылка на нее будет удалена из дерева объектов. А так как других ссылок на функцию нет, и она больше не доступна ни из одного корня - GC удалит из памяти и функцию и строку связанную h, которая так же стала недоступна из корня.

    Посмотрим на пример из вопроса. У нас есть стрелочная функция, которая удерживает на себе инстанс компонента через this ссылку (так как стрелочные функции замыкают this). Саму функцию в памяти удерживает промис порожденный вызовом loader('url'), так как мы отдали её в метод then. Других ссылок на данную функцию нет, а значит и сама функция и ее замыкание (инстанс компонента) будут "жить" не менее "жизни" промиса.
    Скажем был отправлен запрос на сервер, но потом компонент в котором был объявлен промис и колбек был удален.
    И после удаления приходит ответ от сервера, и он выполнит колбек. Это значит что колбек остался в памяти со всеми переменными контекста
    Если других ссылок не осталось, то инстанс компонента будет удерживаться от очистки через промис.

    Теперь стоит разобраться с самим промисом. У него может быть 3 состояния - pending, resolved или rejected. После перехода в состояния resolved или rejected промис может выполнить сохраненные колбэки в ближайшем микротаске, а после он удалит на них ссылки из себя, в следствии чего, память удерживаемая замыканием колбэка может быть очищена (при отсутствии на нее других ссылок, достижимых из какого-либо корня).
    В состоянии pending промис может потенциально находится бесконечно долго, при этом ссылаясь на все колбэки переданные ему в методы then, catch или finally, а значит так же косвенно ссылаясь на их замыкания. И тут все зависит от того, кто ссылается на данный промис, и достижим ли он из корня. И да, промис вполне может быть удален из памяти так и не дождавшись своего завершения.
    интересное умозаключение
    Если Promise - это обещание, то в данном случае оно будет нарушено?


    В комментах к вопросу есть еще один интересный пример:
    function getSomething(){
      return new Promise((resolve, reject)=>{
        if(sys_condition){
           resolve();
        } 
      })
    }
    
    function testPromise(){
      let config = {....}
      getSomething().then(()=>{
         #use config
         goOn(...config)
      })
    }
    
    testPromise();
    У нас есть вызванная 1 раз функция testPromise, которая получает из функции getSomething промис, в который с помощью метода then сохраняет колбэк, удерживающий в замыкании переменную config. Сам промис она нигде не сохраняет, что здесь очень важно.
    В функции getSomething мы просто возвращаем промис созданный через его конструктор, который как мы уже знаем нигде больше не сохраняется. И на этом могло бы все и закончится, без вызова колбэка независимо ни от чего. Но конструктор промиса выполняет свой колбэк синхронно, а кроме того он передает в него 2 функции - resolve и reject, которые в своем замыкании ссылаются на только что созданный промис (а это уже 2 ссылки на него, хотя мы то его никуда не сохраняли). Переменная reject никак не используется, а значит спокойно может быть удалена после завершения колбэка. Переменная resolve просто вызывается как функция внутри условия, но более тоже никак не используется и никуда не сохраняется, а значит так же может быть удалена.
    В этом примере. если sys_condition = false и resolve не вызовется, это значит что создается утечка памяти
    Нет, утечки памяти не будет. Колбэк созданный в testPromise будет удален вместе с замыканием, так и не вызвавшись ни разу.
    Ответ написан
    3 комментария
  • В чем превосходство Typescript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Как бы это странно не звучало, но одно из главных преимуществ TypeScript - это ускорение разработки в несколько раз. Да, когда еще ничего нет - разработка незначительно замедлится, так как помимо логики нужно описать еще и типы. Но это только в начале. И это не только возможность писать большую часть кода с помощью автодополнения. Поддержка существующего кода занимает в десятки раз больше времени, чем его начальное написание. Стоит ли вложить несколько лишних часов на старте, чтоб сэкономить в последствии месяцы? Как по мне стоит.

    Еще одним огромным плюсом является возможность проектировать на типах. Познав дзен TypeScript'а я перестал пользоваться UML, так как типы дают мне ту же наглядность, но при этом еще и сокращают время, так как типы - это уже код. Ну и источник правды остается один. Бизнес требования выраженные в типах не дают отклонится от них при написании логики, исключая возможность неправильной трактовки задачи. Перенеся задачу в типы, я могу обсудить ее с коллегами и исправить неточности еще до написания кода, что опять же сильно экономит время.

    Ну и отвчечу на некоторые Ваши сомнения:
    TSLint в VSCode прям жутко тугой
    TSLint официально deprecated, вместо него стоит использовать плагин к eslint, заодно можете мой конфиг попробовать.

    Типы? Есть JSDOC
    JSDoc в плане типов не умеет и 10% того, что умеет TypeScript. Кроме того, никто в здравом уме не пишет JSDoc на приватную логику, а значит проверки типов там не будет. JSDoc не гарантирует корректность рефакторинга, а вот благодаря TypeScript я, опять таки, точно не забуду обновить JSDoc.

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

    Поддержка браузерами скомпилированного кода? Да какбы почти весь JS имеет поддержку 95%+, тот же Babel уже забыл когда использовал.
    Вообще это не основная задача компилятора TypeScript, а опциональная возможность. И babel + preset-env с ней справляются гораздо лучше. И никто не мешает использовать их вместе. А еще думаю вопрос времени, когда кто-то напишет оптимизатор кода использующий информацию о типах из TS.

    Примерно в каждой второй есть инстансы, на которые смотришь - и чешешь репу - а как называется тип этой переменной в @types/?
    import {someObject} from 'some-library';
    
    type TypeFromValue = typeof someObject;
    const valueCopy: TypeFromValue = {
        ...someObject,
        type: 'overrides',
        with: 'type check',
    };
    и кстати, вот пример того что JSDoc типы не умеют.

    //@ts-check
    и почти везде останется бесполезный any.

    P.S. удачи такие типы на JSDoc описывать
    P.P.S. Еще прелести современного TypeScript невозможные у...
    Ответ написан
    8 комментариев
  • Почему некоторые программисты на GO работают с бд на голом SQL без ORM?

    Не гошник, но расскажу в целом.
    1. На 1 уровень абстракции меньше. При работе с ORM нужно думать одновременно и об особенностях твоей ORM-ки и об особенностях базы.
    2. На сыром SQL некоторые вещи сделать проще, чем с ORM-ками.
    3. Лучше сырой SQL, чем тупая ORM-ка.
    4. Некоторые ORM-ки могут негативно влиять на производительность.

    Если тебе приходится при работе с ORM писать куски SQL-я (например для WHERE), передавать названия колонок в параметрах, и при этом ты не можешь использовать специфику твоей базы не опускаясь до уровня сырого SQL, то это плохая ORM.

    Нормальная орм-ка должна упрощать код и при этом не увеличивать пространство для ошибок.
    На сколько я знаю, Go не позволяет хорошую ORM-ку создать чисто из-за своего синтаксиса и системы типов.

    Нормальные ормки я пока видел только:
    1. В C# из-за Linq
    2. В Rust из-за макросов.
    Ответ написан
    8 комментариев
  • Как задетекировать изменение вероятности успеха в испытаниях Бернулли?

    Maksim_64
    @Maksim_64
    Data Analyst
    Если одним словом то тестирование гипотез:
    Например Cumulative Sum (CUSUM) Control Charts.
    1. https://www.ncss.com/wp-content/themes/ncss/pdf/Pr...

    2. https://www.osti.gov/servlets/purl/1374023 (с vpn)

    3. https://en.wikipedia.org/wiki/Sequential_probabili...

    4. Чего нибудь байесовое обязательно тоже имеется (погуглить)
    5. Огромное семейство Likelihood тестов тоже подойдет, p-это всего лишь параметр (погуглить).

    Будешь работать с CUSUM (это моя рекомендация для решения проблемы) там тоже тест статистика для кумулативный суммы и т.д. В конечном счете все сводится к тестированию гипотез.
    Ответ написан
    1 комментарий
  • Зачем нужны DTO, когда есть типы и интерфейсы в языках программирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    DTO объекты часто пересекают границы Языков (Java/JavaScript/GWT) и сетевых протоколов (Rest/Graphql/SOAP/Avro).

    И эти объекты могут нести на себе семантику только чистых данных. Вы не сможете через сеть
    из Java в C# например передать интерфейс или объект с методами.

    И многие фреймворки искусственно ограничивают DTO как раз для того чтобы эти объекты однозначно
    декодировались всеми сторонами-участниками протокола взаимодействия. А фреймворки - обычно
    предоставляют средства кросс-компилляции этих DTO.
    Ответ написан
    Комментировать
  • Странные запросы на сервер. Они представляют опасность?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    смогут ли они таким макаром выполнить все эти команды?
    Если у вас какая-нибудь дыра, которую они эксплуатируют, открыта, то смогут. Но вероятность этого не очень велика. Обновляйтесь вовремя и следуйте основным инструкциям по безопасности для ваших инструментов.
    Ответ написан
    Комментировать
  • Странные запросы на сервер. Они представляют опасность?

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

    Tkreks
    @Tkreks
    Системный инженер
    Node-Red
    Можно развернуть в докере. Множество дополнительных нод доступно в палитре.
    Есть возможно писать свой код на JS из коробки, или с помощью дополнительных нод из палитры на python
    Ответ написан
    Комментировать
  • Как решить disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'timeout'?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как решить disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'timeout

    Научиться пользоваться переводчиком. Изучить основы языка. Прочитать документацию к библиотеке, хотя бы основной туториал.

    Отсылая к высказыванию классика Vindicar: "Боты это не просто".

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Какой-то конкретной цели, объясняющей для чего мне это надо, пока что нет.

    - Скажите пожалуйста, куда мне отсюда идти?
    - А куда ты хочешь попасть? - ответил Кот.
    - Мне все равно... - сказала Алиса.
    - Тогда все равно куда и идти, - заметил Кот.
    - ...только бы попасть куда-нибудь, - пояснила Алиса.
    - Куда-нибудь ты обязательно попадешь, - сказал Кот. - Нужно только достаточно долго идти.

    Льюис Кэрролл
    Ответ написан
    1 комментарий
  • Имитация веб-камеры - как автоматизировать на python (linux)?

    Vindicar
    @Vindicar
    RTFM!
    Извини, а у тебя ничего не ёкнуло вот тут?
    sudo apt install v4l2loopback
    pip install v4l2loopback
    Ты понимаешь разницу между этими двумя командами?
    Первая - задействует системный менеджер пакетов для дистрибутивов на базе debian (deb-пакетов).
    Вторая - задействует встроенный менеджер пакетов питона.
    Это совершенно разные вещи, и они работают с совершенно разными репозиториями.
    Установить deb-пакет в систему, на которой будешь тестить, достаточно будет один раз.
    Прописать мод можно в /etc/modules, но можно и тупо делать modprobe при загрузке системы.
    И то и то, я полагаю, можно сделать хоть на живой системе, хоть внутри докера.

    После этого в автотесте запускаешь ffmpeg, можно даже тупо через subprocess вместо питоновских модулей. Сюрприз, сюрприз! Они все, насколько я знаю, именно так и делают под капотом. Я не видел модуля, который бы имел интегрированный ffmpeg.
    Ответ написан
    3 комментария
  • Простое решение для десктопа?

    @alexalexes
    Из моего опыта без глубокого погружения легко накидать формочку с парой textbox/combobox и кнопочкой, а потом вывести какую-то графику в Chart - это в C#. Из сохранений данных нужно научиться сериализовать объект и писать его в файл. Если нужна простенькая база данных, то можно прикрутить SQLite.
    Из неудобств при запуске на другом компе - нужно ставить пакет .NET той версии или выше, в которой скомпилирован проект.
    Для Chart и ходовой штуки как LINQ (очень упрощает жизнь, если перебирать массивы/множества/коллекции), нужно ставить .NET минимальной версии 3.5 и выше.
    Ответ написан
    2 комментария
  • Банят аккаунты в телеграмме при использовании библиотеки telethon. Кто-то находил решение?

    Не нужно нарушать ToS и делать вообще что-то подозрительное.
    API для обычных пользователей (не ботов) предназначен для создания приложений, которыми будут пользоваться люди.

    Если тебе нужно что-то типа аккаунта для бизнеса, то тогда посмотри в сторону ботов для бизнеса
    Ответ написан
    Комментировать
  • Какой ресурс более качественный, для изучения языка c#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Если мы говорим, про C#, то грубая кривая такая:
    1. Проходишь метанит - поверхностное понимание C#
    2. Проходишь ULearn - уже более менее норм владеешь (все 2 курса)

    Нас в вузе по юлерну учили, он нам полностью заменял и пары и дз (отметки по нему ставили)

    Но ты указал еще Unity. Я не unity разраб, но:
    1. Приступай к нему ПОСЛЕ освоения C# (всех шагов выше)
    2. Можешь видео у Романа Сакутина посмотреть (+ он книгу выпустил, но не знаю можно ли советовать)

    PS: C и C# - это совершенно разные языки
    PPS: столько красных флагов в одном вопросе - simplecode и itvdn как основа, странное преподношение материала на ulearn, unity сразу после основ C#. Как по мне это все надо инвертировать и получится более менее полезные советы
    Ответ написан
    3 комментария
  • Где я могу найти "точно" описанную документацию Python?

    LaRN
    @LaRN
    Senior Developer
    Что-то типа такого?
    https://docs.python.org/3/library/functions.html
    Или это не достаточно локонично.
    Ответ написан
    6 комментариев
  • Где я могу найти "точно" описанную документацию Python?

    @Everything_is_bad
    https://docs.python.org/3/

    Почему документация написана таким неточным языком?
    это твое субъективное мнение, не понятно где ты там увидел "неточным языком". Ну возьми тогда учебники по языку и выбери более тебе понятно написанный.

    Можно ли где-то найти точное описание?
    "более точное" это уже исходники https://github.com/python/cpython
    Ответ написан
    9 комментариев