• Какие знания нужны в 2020 году, чтобы устроиться аналитиком?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Для аналитика нужно не столько знания, сколько навыки.
    Навыки анализировать информацию. Вот вы почему-то не смогли это сделать, хотя собираетесь сделать это основной профессией, а ведь несложно проанализировать вакансии и указанные требования.

    Аналитику нужно разбираться в предметной области. Если идти в банк - разбираться в банковском деле, понимать бизнес процессы, которые решает разрабатываемый софт.
    Математику учат для того, чтобы мозг приобрел необходимые навыки - оценивать, считать, упорядочивать, видеть закономерности, поэтому для аналитика хорошая математическая база означает что у него также есть и практические навыки, без которых что-либо изучить сложно.
    Ответ написан
    Комментировать
  • Может ли Golang заменить C/C++ в написании программ для железа?

    У вас вопрос про программы "близкие к железу" и тут же намешано машинное обучение и стандартный софт для десктопа, определитесь.

    Для железа go использовать будет менее удобно, чем C/C++
    Для машинного обучения go использовать можно
    Для десктопного софта, если имеется ввиду графический интерфейс, go тоже будет использовать неудобно.
    Ответ написан
  • Как оптимизировать Symfony внутри Docker?

    @sl0
    Подозреваю, что проблема не в симфони, а в докере на маке.
    Известная проблема в Docker-е под маком - дополнительная задержка, возникающая из-за разных файловых систем. На symfony проекте, например, эта задержка доходит до ~5-10сек на открытие одной страницы. Данную проблему отлично решает утилита docker-sync.


    1) - sudo gem install docker-sync
    2) - Создает docker-sync.yml файл со следующим содержимым (все последующие комманды должны выполняться из папки с проектом-):
    
    version: '2'
    
    options:
      verbose: true
    
    syncs:
      #название volum-а
      app-sync:
        src: '.'
        sync_excludes: ['var', 'node_modules', 'tests']
    
    
    3) в файле docker-compose-dev.yml вносим следующие изменения:
    
    volumes:  
      app-sync:
        external: true
    
    Меняем код
    
    services:  
      #...
    
      php:
        #...
        volumes:
          # ...
          - ./app:/var/www/app
    
    
    На
    
    services:  
      #...
    
      php:
        #...
        volumes:
          # ...
          - app-sync:/var/www/app
    
    То есть, чтобы php контейнер смотрел на наш новый volum
    4) Далее создаем volum коммандой:
    
    docker volume create app-sync
    
    
    5) Выполняем команду
    
    docker-sync start
    
    
    6) И запускаем
    
    docker-compose -f docker-compose-dev.yml up
    
    Для того чтобы не вводить команды с 4-6 каждый раз, можно создать Make файл со следующим содержимым:
    
    OS := $(shell uname)
    
    start_dev:  
    ifeq ($(OS),Darwin)  
        docker volume create --name=app-sync
        docker-compose -f docker-compose-dev.yml up -d
        docker-sync start
    else  
        docker-compose up -d
    endif
    
    stop_dev:           ## Stop the Docker containers  
    ifeq ($(OS),Darwin)  
        docker-compose stop
        docker-sync stop
    else  
        docker-compose stop
    endif
    
    
    И использовать команду
    
    make start_dev
    Ответ написан
    1 комментарий
  • Как скопировать файлы используя Ansible и регулярные выражения?

    LeganSV
    @LeganSV Автор вопроса
    IT
    Задача решилась.
    Необходимо добавить в блок с поиском delegate_to: localhost
    - name: Prepare list of packages to copy
            find:
              paths: "/srv/test_files/"
              patterns: '(^((?!.*dbg).)*arm64.*$)'
              use_regex: yes
            register: file_list
            delegate_to: localhost
    Ответ написан
    Комментировать
  • Почему Service Locator это зло и что использовать вместо?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Все эти страшные слова - они на самом деле всегда про одно и то же - про связность. Когда ты хардкодишь внутри класса вызов какого-то конкретного сервиса - ты намертво к нему привязываешься. И чтобы поменять сервис на другой, ты будешь вынужден поменять код класса. Окей, поменял. И тут же в другом месте, где этот же класс использовался, что-то сломалось! И что теперь? Делать два класса, которые различаются одной строчкой? Нет конечно. А как тогда использовать один и тот же класс для обработки разных входящих данных (или одних и тех же данных, но разными способами)? Сделать его поведение изменяемым. То есть сделать изменяемыми те инструменты, которыми он пользуется - т.е. его зависимости.

    Поэтому все зависимости обычно передаются через конструктор (и поэтому и называются инъекция зависимостей.)

    Таким образом мы можем менять поведение класса, не меняя его код

    Но тут надо понимать, что всё это работает только при правильном применении ООП. А точнее просто при применении ООП. Потому что 98% "ООП" кода, который пишется на РНР - это голимая процедурщина, даже если она обёрнута в классы и методы. Если у тебя метод класса представляет из себя стену кода, которую ты тупо перенёс из файла, инклюдившегося в любимое похапешное спагетти - то это не ООП. Это та же процедурщина, вид сбоку. И смысл использования dependency injection ты с ним не почуствуешь. Будешь конечно применять, но в качестве карго культа - потому что тебе это на тостере написали.
    А вот когда твой код начнет становиться действительно объектным - тогда стразу станет понятнее.


    Похожим на сервис локатор является сервис- или DI-контейнер. Используемый вручную, он является тем же самым сервис локатором. Поэтому вручную его никогда не надо вызывать - что и запрещается в симфоневских конроллерах - а только для автоматического создания классов. В МВЦ у тебя ведь очень многие объекты создаются автоматом - сущности, контроллеры. И вот для того, чтобы при автоматическом создании экземпляра класса у тебя были на руках все требуемые сервисы - и нужен контейнер.

    Соотвтственно, ответ на вопрос "что использовать?" очень простой:
    - при ручном создании экземпляра объекта, все зависимости передавать в него через конструктор, а не получать "из воздуха" в коде.
    - при автоматическом создании экземпляра объекта, использовать dependency injection container

    В этим смысле очень полезно освоить Симфони - строгий фрейворк, в котором нет сервис локатора и в котором запрещено пользоваться контейнером напрямую.
    Ответ написан
    4 комментария
  • Как работать с многоядерными процессорами в Python?

    @kazmiruk
    https://docs.python.org/2/library/multiprocessing.html - единственный известный мне способ утилизровать несколько ядер на питоне. GIL есть в обоих ветках питона, обойти никак (вроде, если я не ошибаюсь, написав экстеншн на С, Вы все равно будете вынуждены запускать его в тех же условиях).
    Ответ написан
    2 комментария
  • Как закодировать переменную, отправить в бд. Затем получить и раскодировать обратно?

    sam002
    @sam002
    Линуксойд, кодер, немного физик.
    Как бы из документации прям, второй пример: https://www.php.net/manual/en/function.openssl-enc...

    $c = base64_decode($ciphertext);
    $ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
    $iv = substr($c, 0, $ivlen);
    $hmac = substr($c, $ivlen, $sha2len=32);
    $ciphertext_raw = substr($c, $ivlen+$sha2len);
    $original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
    $calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
    if (hash_equals($hmac, $calcmac))//PHP 5.6+ timing attack safe comparison
    {
        echo $original_plaintext."\n";
    }

    Сохраняйте только весь $ciphertext
    Ответ написан
    9 комментариев
  • Нужен ли ID в базе mysql?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Не хочешь создавать не создавай. Это не безусловное правило. Если у таблице нет связей, данные и так уникальны, они не нужны.
    Ответ написан
    3 комментария
  • Как написать сайт с фронтендом и бэкендом?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    По бэкенду умею писать программы на go , которые умеют отправлять данные в базе данных по http запросам

    По фронтенду знаю React немного , JS и т.д

    Есть задание , есть сервер , надо написать сайт где в водишь имя и фамилию .

    Вы знаете всё необходимое.

    правда незнаю как заставить его работать с фронтендом

    незнаю как введённые данные отправлять в бэкенд

    То есть не знаете ничего, в предыдущих утверждениях обманули.
    Ответ написан
    Комментировать
  • Как правильно в go структуру из базы в шаблон html в gin?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Итерировать нужно слайс, а не структуру, т.е. []Users.
    Вот работающий пример.
    rows, err := conn.Queryx("SELECT id, name FROM users")
    if err != nil {
          log.Fatalln(err)
    }
    defer rows.Close()
    
    users := []User{}
    
    for rows.Next() {
        if rows.StructScan(&user) != nil {
          log.Fatalln(err)
        }
        users = append(users, user)
    }
    
    ctx.HTML(http.StatusOK, "users/index.tmpl",  gin.H{"values": users})
    Ответ написан
    Комментировать
  • Как запустить консольную команду с аргументами?

    command должно быть слайсом аргументов, а у вас это просто строка

    Нужно так:
    pwsh = "pwsh"
    command = []string{"-Command", "Send-MailMessage -SMTPServer localhost -Port 25 -To " + recipient + " -From " + user.Email + ` -Subject "` + subject + `" -Body "` + message + `"`
    output, err := exec.Command(pwsh, command...).Output()

    надеюсь, я верно понял синтаксис пауэршелла, основной принцип, думаю, понятен.

    P.S. Использовать powershell в Линуксе, это мсье, конечно, знает толк.
    Ответ написан
    Комментировать
  • Можно ли упростить функции?

    Adamos
    @Adamos
    Конечно. Например, первую функцию можно заменить на
    return ['tablename' => $table];
    Больше она все равно ничего не делает.

    А если вы, кроме unset, узнаете еще хотя бы об одной функции - array_fill, то и вторую функцию удастся сократить вполовину.
    Ответ написан
    1 комментарий
  • Соединение "Опасно! Ваш пароль мог получить злоумышленник". Как исправить?

    joeberetta
    @joeberetta
    Читай: https://epdf.pub/google-for-dummies.html
    дело не в паролях, а в http. Погуглите что такое ssl, https дальше сами разберетесь, думаю
    Ответ написан
  • Как узнать, что пользователь ещё не занесён в базу?

    @ghostiam
    На Go писатель, серверов пинатель.
    if errors.Is(err, mongo.ErrNoDocuments) {
    // документа нет
    }
    
    // если у вас Го до 1.13
    if err == mongo.ErrNoDocuments {
    // документа нет
    }


    https://github.com/mongodb/mongo-go-driver/blob/d7...
    Ответ написан
    Комментировать
  • Почему не работает Debug в GoLand?

    @PapaStifflera
    Родился, вырос...
    Потому, что ваше приложение падает при запуске. И даже ошибку выводит о том, что порт 8080 занят.
    Ответ написан
    1 комментарий
  • Как хранить в БД только 5 записей?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Операция удаления - очень дорогая. Вам точно нужно именно удалять? Может лучше выводить 5 последних?
    Ответ написан
    5 комментариев
  • Вопрос по каналам и блокировке?

    @quiex
    Изучите как работают каналы в go.

    В первом случае горутина заблокируется, т.к. никто не читает из небуферизированного канала.
    Во втором случае используется буферизированный канал, следовательно горутина заблокируется только тогда, когда (в вашем случае) вы попробуете записать в него 101-й элемент(читай: канал заполнится).
    Ответ написан
    4 комментария
  • Как реализовать правильную архитектуру кода?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    Комментировать
  • Как формируется Unix-время в PHP?

    DevMan
    @DevMan
    на что только не пойдут люди, лишь бы не использовать DateTime.

    $date = new DateTime('12:30');
    $date->add(new DateInterval('PT07H30M'));
    echo $date->format('H:i:s');
    Ответ написан
    4 комментария