• Проброс портов virtualbox – windows 8 и ubuntu 14.04, как открывать локальные сайты из виртуалки?

    1nn0
    @1nn0
    Системный администратор\Фрилансер
    Если машина домашняя, я бы на Вашем месте настроил сетевой интерфейс в режим bridge (мост) с локальным интерфейсом хоста. После этого и хост и виртуалка будут доступны в локальной сети как 2 отдельные машины (не забудьте проверить настройки интерфейса в виртуальной машине, при необходимости внесите правки под Вашу локалку).
    Ну и как финал - настройте локальный ДНС для сайтов.
    Если машина не домашняя, то покажите конфиги, как попросил Назар Мокринский
    Ответ написан
    5 комментариев
  • Как оптимизировать работу PHP интеграции?

    @rPman
    Со своим сервисом - сделать batch запросы, позволяющие одним запросом выполнять несколько операций, например запрашивать/модифицировать информацию сразу по нескольким объектам. Но еще лучше, реализовать требуемую логику изменения объектов прямо на сервере, грубый пример - нужно сдвинуть координаты объектов на величину [dx,dy,dz], вместо того чтобы все с сервиса выгружать, менять координаты и загружать обратно, нужно сделать команду, которая на вход получит этот вектор и все сделает на сервере (это самый быстрый вариант)

    С чужими сервисами, либо искать api для batch операций, либо переделать код на параллельные запросы, надеясь что этот сервис оптимизирован на такую работу (не факт, и даже если есть, количество параллельных запросов могут быть ограничены). Если ни то ни другое не доступно, размести свой сервис территориально максимально близко к чужому сервису (так как очень часто задержки сетевых запросов вносят очень большую задержку), само собой сначала удостовериться что причина именно в этом а не тормозах сервиса
    Ответ написан
    3 комментария
  • Как в golang получение From из Header письма (imap)?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Тип заголовка, если я не ошибаюсь, должен быть MIMEHeader, т.е. это обычный map[string][], где ключ - это заголовок + методы Get, Values

    Вот так вы увидите то, что вообще там есть (все ключи и значения map)
    log.Printf("entity: %+v\n", entity.Header)

    А вот так можете получить первое значение заголовка
    log.Printf("entity: %+v\n", entity.Header.Get("From"))


    Или все значения заголовка
    log.Printf("entity: %+v\n", entity.Header.Values("To"))


    Подробнее о методах можно посмотреть тут https://godoc.org/net/textproto#MIMEHeader
    Ответ написан
    3 комментария
  • Как реализовать свой API на домене?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Можно.

    Регистрируете домен и прописываете в его настройках IP вашего сервера.

    Далее у вас два варианта.

    Если у вас всего один сервис на сервере - можете слушать сразу 80й порт, вместо 1234.
    И это уже заработает.

    Если доменов на сервере будет много -
    - cтавите веб сервер, например nginx, который слушает 80й порт на вашем IP
    - настраиваете в nginx виртуальный хост для нужного вам домена и там прописываете, чтобы запросы, перенаправлялись на ваш сервис IP:порт(1234)

    Пример конфига nginx (виртуальный хост)

    server {
        listen *:80;
        server_name тут_ваш_домен;
    
        location / {
            proxy_pass http://тут_ip_вашего_сервиса:1234;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    Ответ написан
    5 комментариев
  • Как получить файл из письма на GoLang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    package main
    
    import (
        "io"
        "io/ioutil"
        "log"
    
        "github.com/emersion/go-imap"
        "github.com/emersion/go-imap/client"
        "github.com/emersion/go-message"
    )
    
    func main() {
        log.Println("Connecting to server...")
    
        c, err := client.DialTLS("xxxxxxxxx", nil)
        if err != nil {
            log.Fatal(err)
        }
    
        log.Println("Connected")
    
        defer c.Logout()
    
        if err := c.Login("xxxxxxxxxxxxx", "xxxxxxxxxx"); err != nil {
            log.Fatal(err)
        }
        log.Println("Logged in")
    
        mbox, err := c.Select("INBOX", false)
        if err != nil {
            log.Fatal(err)
        }
    
        seqset := new(imap.SeqSet)
        seqset.AddRange(1, mbox.Messages)
    
        messages := make(chan *imap.Message, 10)
        done := make(chan error, 1)
        go func() {
            done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchRFC822}, messages)
        }()
    
        for msg := range messages {
            for _, r := range msg.Body {
                entity, err := message.Read(r)
                if err != nil {
                    log.Fatal(err)
                }
    
                multiPartReader := entity.MultipartReader()
    
                for e, err := multiPartReader.NextPart(); err != io.EOF; e, err = multiPartReader.NextPart() {
                    kind, params, cErr := e.Header.ContentType()
                    if cErr != nil {
                        log.Fatal(cErr)
                    }
    
                    if kind != "image/png" && kind != "image/gif" {
                        continue
                    }
    
                    c, rErr := ioutil.ReadAll(e.Body)
                    if rErr != nil {
                        log.Fatal(rErr)
                    }
    
                    log.Printf("Dump file %s", params["name"])
    
                    if fErr := ioutil.WriteFile("/tmp/"+params["name"], c, 0777); ferr != nil {
                        log.Fatal(fErr)
                    }
                }
            }
        }
    
        if err := <-done; err != nil {
            log.Fatal(err)
        }
    
        log.Println("Done")
    }

    Пример взял тут https://stackoverflow.com/questions/55203878/how-t...
    Ответ написан
    1 комментарий