Задать вопрос
  • Почему можно foo[len(foo):]?

    @iveronanomi
    Вы ошибаетесь, по поводу отсутствия документации на эту тему
    https://golang.org/ref/spec#Slice_expressions

    For convenience, any of the indices may be omitted. A missing low index defaults to zero; a missing high index defaults to the length of the sliced operand:


    a[2:]  // same as a[2 : len(a)]
    a[:3]  // same as a[0 : 3]
    a[:]   // same as a[0 : len(a)]
    Ответ написан
    Комментировать
  • Rust unsafe, какие есть подводные камни и как подходить к дизайну C API?

    vabka
    @vabka Куратор тега Rust
    Не пудри себе мозги и возьми уже готовую безопасную обёртку над raylib
    https://crates.io/crates/raylib

    А гайд по работе с unsafe - это rustonomicon

    unsafe сам по себе просто позволяет использовать сырые указатели + вызывать другие unsafe функции.

    Безопасная обётка - это когда ты при помощи типов и всяких валидаций гарантируешь корректное использование.
    Вот пример из того что выше:
    use raylib::prelude::*;
    
    fn main() {
        let (mut rl, thread) = raylib::init()
            .size(640, 480)
            .title("Hello, World")
            .build();
    
        while !rl.window_should_close() {
            let mut d = rl.begin_drawing(&thread);
    
            d.clear_background(Color::WHITE);
            d.draw_text("Hello, world!", 12, 12, 20, Color::BLACK);
        }
    }

    Если для вас это магия, то тогда нужно чуть глубже изучить Rust и посмотреть в исходники.

    На будущее: не пишите огромную портянку текста с кучей вопросов, а пишите только то что непосредственно относится к основному вопросу.
    Другие вопросы задавайте отдельно.
    Ответ написан
    Комментировать
  • Как узнать, онлайн ли человек в телеграм?

    Vindicar
    @Vindicar
    RTFM!
    > "status": "recently",
    Читаем доки.
    status (str, optional) – User’s Last Seen & Online status. Can be one of the following: “online”, user is online right now. “offline”, user is currently offline. “recently”, user with hidden last seen time who was online between 1 second and 2-3 days ago. “within_week”, user with hidden last seen time who was online between 2-3 and seven days ago. “within_month”, user with hidden last seen time who was online between 6-7 days and a month ago. “long_time_ago”, blocked user or user with hidden last seen time who was online more than a month ago. None, for bots.
    Ответ написан
    1 комментарий
  • Стоит, ли изучать delphi?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Лёгкость изучения сильно преувеличена, востребована только при поддержке старых проектов. Лучше посмотрите в сторону c# и visual studio
    Ответ написан
    2 комментария
  • Генератор логотипов для сайта бесплатный?

    VladimirARS
    @VladimirARS
    Ответ написан
    Комментировать
  • Есть ли примеры структуры go проекта с воркерами?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Есть смысл скомпилировать CLI приложение и запускать уже бинарник с нужными параметрами, например так
    yourprog worker1
    yourprog worker2

    Можно использовать вот эти библиотеки:
    https://github.com/urfave/cli (хороший и простой, советую начать с него)
    https://github.com/spf13/cobra (очень мощный, его использует Docker)

    Структура проекта у вас также немного изменится, в Go принято делать папочку cmd, типа так:
    cmd/
    cmd/worker1.go
    cmd/worker2.go

    Образец есть в каждой из библиотек, что я выше написал.

    По структуре проекта на Go уже был вопрос, вот тут хорошо описано Структура проекта на Golang?
    Ответ написан
    Комментировать
  • Структура проекта на Golang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Добрый день.

    Это попытка стандартизировать структуру проекта (многие ориентируются на неё)
    https://github.com/golang-standards/project-layout

    Go-Kit - очень грамотная структура, очень
    https://github.com/go-kit/kit

    И обязательно стоит посмотреть
    https://12factor.net/ru/

    Что касается "Т.е. в одном файле может быть сразу модель, сервис и репозиторий. Есть ли какие-то бестпркатики по этому вопросу?" - то это не совсем так, в одном пакете (папке) может быть и модель, и сервис, и репозиторий". Например вот так:
    yourpackage/service.go
    yourpackage/repo.go
    yourpackage/model.go
    И это всё будет доступно в рамках пакета.

    Лично я использую такую схему:
    cmd/ - команды исполняемого файла
    conf/ - конфиги приложения (env файлы)
    init/ - конфиги logrotated, nginx, systemd и т.д.
    pkg/ - публичные пакеты
    pkg/packagename/ - тут определяются интерфейсы (сервиса, репозитория и т.д.) в разных файлах
    pkg/packagename/endpoints/http - endpoint'ы для HTTP
    pkg/packagename/repo/mysql - реализация репозитория на MySQL
    pkg/packagename/repo/gorm - реализация репозитория на GORM (для примера)
    pkg/packagename/service/ реализация сервиса

    Я написал очень кратко, если что-то не понятно или есть вопросы - пишите, я опишу подробнее
    Ответ написан
    3 комментария
  • Есть ли разница между горутинами и await в C#?

    Tyranron
    @Tyranron
    Несмотря на то, что эти инструменты созданы для решения одних и тех же проблем, делают они это по-разному, как под капотом, так и в плане предлагаемых абстракций. Потому нельзя сказать что async/await в C# - это "просто обертка над горутинами".

    Горутины в Go - это концепция stackful coroutines (под капотом) + CSP (в абстракциях). Каждый раз, когда мы создаём горутину, под неё выделяется отдельный стек вызовов для её собственных нужд. При этом, когда происходит паника, то stack unwinding (размотка стека вызовов) происходит только в пределах этой горутины и не покидает границ её стека. Стек горутины полностью отвязан от стека её создания/вызова, потому горутина не может возвращать результат. Любое общение между горутинами выполняется либо посредством каналов, либо какой-то общей памяти.

    async/await в C# (то есть, Task'и) - это концепция stackless coroutines (под капотом) + futures (в абстракциях). Код с async/await'ами компилятор превращает в определенную стэйт-машину с yield point'ами. У них нет отдельного стека, они выполняются в том же стеке что и вызывающий их код. Соотвественно, есть возможность словить exception'ы (аналог panic'и) возникающие внутри асинхронного Task'а прямо в запускающем его коде. Так как выполнение идёт на том же стеке - Task нормально может возвращать результат и мы его можем считать в вызывающем коде без дополнительных примитивов/инструментов.

    При этом, если мы запустим Go с GOMAXPROCS=1, то мы получим однопоточный асинхронный код в Go (по умолчанию он многопоточный). Также и в C# мы можем выполнять Task'и как на одном потоке, так и на thread pool, получая аналогичные Go гарантии рантайма.

    С точки зрения абстракций/использования - это уже вкусовщина. Кому как больше нравится. У futures лучше дизайн в плане composability (их эргономичнее join'ить и select'ить), но они вынуждают писать везде async и await. У горутин надо постоянно городить чехарду с синхронизацией (попробуйте сделать аналог await для произвольной горутины), но если эту чехарду прятать под капот (как обычно и делают), то код вообще выглядит полностью синхронным и программисты радуются.
    Ответ написан
    4 комментария
  • Как отфильтровать массив по типу данных?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Проверяем, что возвращает оператор typeof:

    const strings = arr.filter(n => typeof n === 'string');
    const numbers = arr.filter(n => typeof n === 'number');
    const booleans = arr.filter(n => typeof n === 'boolean');

    Или, проверяем, что элемент и результат его преобразования в значение интересующего нас типа совпадают:

    const strings = arr.filter(n => n === `${n}`);
    const numbers = arr.filter(n => n === +n); // в отличие от typeof, отбрасывает NaN
    const booleans = arr.filter(n => n === !!n);

    Или, группируем массив по имени типа, а дальше извлекаем чего надо:

    const groupedByType = arr.reduce((acc, n) => {
      const type = n == null ? `${n}` : n.constructor.name.toLowerCase();
      (acc[type] = acc[type] || []).push(n);
      return acc;
    }, {});
    
    const strings = groupedByType.string;
    Ответ написан
    Комментировать
  • Почему указатель не меняет другой указатель в golang?

    currentNode — это переменная, существующая только в этой функции. Это указатель, вы присваиваете ему какое-то значение, а потом присваиваете ему nil. От этого ранее присвоенный объект не изменится, ибо вы меняете только указатель на этот объект.
    Ответ написан
    Комментировать
  • Как запускать приложение?

    shpaker
    @shpaker
    Вольный хлебопашец
    subprocess в помощь
    import subprocess
     
    args = ["ping.exe", "www.yahoo.com"]
    process = subprocess.Popen(args, stdout=subprocess.PIPE)
    data = process.communicate()
    print(data)

    Ссылка на доку https://docs.python.org/3/library/subprocess.html
    Ответ написан
  • Странный дизайн Rust?

    Rust это не C++. Почему он должен брать термины из C++?

    В Java вон тоже ссылки - это указатели в терминологии C++.

    Более того, ссылка от указателя отличается лишь абстракцией. В памяти это будут одинаковые ячейки, содержащие адрес.
    Ответ написан
    Комментировать
  • Как выбрать учителя по php?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Набор букв какой-то, и каша в голове, походу.

    На счет редактора, скажу так.
    Хоть на печатной машинке делай, если оно сделано красиво (читай, правильно, по стандартам).
    Крутость программиста никак не зависит от используемых инструментов.
    Это только удобство, упрощение работы.
    Ответ написан
    2 комментария
  • Какие статьи, книги прочитать по многофайловым проектам?

    @deliro
    MVC
    Макконнелл
    Fluent Python
    Ответ написан
    Комментировать
  • Можно ли в NODE.JS наблюдать пользовательский цикл событий?

    alex_keysi
    @alex_keysi
    Помог с решением? Отметь “правильный ответ”
    Может подписаться на них? И когда кто то эмитнул событие, то записать в массив что произошло событие. Когда кол бэк на событие выполнится, то удалить его из этого масива.
    Или у ноды может есть апи для считывания эвент лупа. Но там могут лежать и сторонние кол беки. От других библиотек. Всякие fs модули
    Может это тебе подойдет
    https://stackoverflow.com/questions/30757182/how-t...
    Там апи с libuv. Для считывание из евент лупа
    Ответ написан
    Комментировать
  • Нужна бесплатная субд для локального приложения. Какую использовать?

    2ord
    @2ord
    Реляционные СУБД:
    • SQLite
    • MySQL
    • Firebird
    • PostgreSQL
    • SQL Express Edition (есть ограничения)


    Есть нереляционные. Вот тут есть небольшой список: nosql-database.org
    Ответ написан
    Комментировать
  • Есть ли расширение, которое в списке вопросов на Тостере показывает рядом с вопросом автора и его статистику?

    @Koteezy
    Если кому то интересно

    Данные сохраняются в localStorage на один день, так что, при каждом переходе он запрашивать инфу не будет
    Ответ написан
    6 комментариев
  • Переменная GOPATH все время слетает, почему?

    nikonor
    @nikonor
    Программист go, perl
    Переходите на модули:-) И тогда GOPATH перестанет быть нужен.
    Ответ написан
    3 комментария
  • Что лучше использовать для анимаций css или js? И почему?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    но которую можно реализовать и с помощью css, и с помощью javascript...
    ваше мнение хотел услышать

    Мне самому нравится делать все на CSS, но... Если анимация должна быть интерактивной и нужно ее останавливать в процессе, откатывать в изначальное положение и.т.д., или некоторые ее части зависят от данных (в широком смысле - это и движение по сложной траектории, и построение графиков и.т.д.) и их проще рассчитать скриптом, чем подбирать коэффициенты в CSS keyframes, то JS будет лучшим выбором. Если это последовательность мало связанных между собой изменений, то опять же скрипты почти всегда будет проще реализовать. Если речь идет о CSS-анимациях с фильтрами (особенно SVG-фильтрами), то можно влететь в очень сильные проблемы с производительностью на слабом железе. И никакие хаки с GPU тут не помогут - все равно будет тормозить. В такой ситуации может иметь смысл не просто писать на JS, но и подключить WebGL и все делать руками на шейдерах.

    В остальных случаях стоит смотреть по ситуации - разные :hover / :focus эффекты обычно легко реализуются на CSS, и, если это так, то зачем что-то придумывать? CSS в последнее время очень даже неплох. Но если, например, в проекте вся анимация делается на JS, то может иметь смысл продолжать делать так же, сохраняя единообразие в коде.
    Ответ написан
    Комментировать