• Как задать русский язык для Date Range Picker?

    @aabweber
    locale: {
                format: 'DD.MM.YYYY',
                "applyLabel": "Ок",
                "cancelLabel": "Отмена",
                "fromLabel": "От",
                "toLabel": "До",
                "customRangeLabel": "Произвольный",
                "daysOfWeek": [
                    "Вс",
                    "Пн",
                    "Вт",
                    "Ср",
                    "Чт",
                    "Пт",
                    "Сб"
                ],
                "monthNames": [
                    "Январь",
                    "Февраль",
                    "Март",
                    "Апрель",
                    "Май",
                    "Июнь",
                    "Июль",
                    "Август",
                    "Сентябрь",
                    "Октябрь",
                    "Ноябрь",
                    "Декабрь"
                ],
                firstDay: 1
            }
    Ответ написан
    1 комментарий
  • В чем отличие оператора -> от .(точки)?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    a->b это более короткая запись для (*a).b

    То есть, стрелка сочетает в себе разименовывание указателя и обращение к методу.

    Ну и если a - это класс, то оператор стрелка может быть в нем определен по желанию автора класса.
    Ответ написан
    Комментировать
  • Как защититься от спама asterisk?

    sptm
    @sptm
    software developer / DevOps engineer
    Защититься от такого спама — а заодно и от bruteforce-атак — поможет Fail2Ban.
    Ответ написан
    Комментировать
  • Как читать с stdout и, не дожидаясь окончания, перенаправлять вывод?

    romesses
    @romesses Автор вопроса
    Backend инженер
    Решил вопрос при помощи io.Pipe():
    https://play.golang.org/p/fGL2uBKuog8

    код
    package main
    
    import (
    	"bufio"
    	"fmt"
    	"io"
    	"log"
    	"os"
    	"os/exec"
    )
    
    var done chan bool
    
    type Executor struct {
    	wr io.Writer
    }
    
    func (e *Executor) SetStdout(w io.Writer) {
    	e.wr = w
    }
    
    func (e *Executor) Exec() error {
    	cmd := exec.Command("ls", "/etc")
    	cmd.Stdout = e.wr
    	err := cmd.Run()
    	return err
    }
    
    func send(lines []string) {
    	w := bufio.NewWriter(os.Stdout)
    	for i := 0; i < len(lines); i++ {
    		w.WriteString(lines[i] + "\n")
    	}
    	w.Flush()
    }
    
    const cnt = 3
    
    func main() {
    	// create a pipe
    	reader, writer := io.Pipe()
    
    	e := &Executor{}
    	e.SetStdout(writer)
    
    	go func() {
    		lines := make([]string, 0, cnt)
    		scanner := bufio.NewScanner(reader)
    		linesCnt := 0
    		for scanner.Scan() {
    			line := scanner.Text()
    			// fmt.Println(`out:`, line)
    
    			lines = append(lines, line)
    
    			linesCnt++
    			if linesCnt >= cnt {
    				linesCnt = 0
    				send(lines)
    				lines = lines[:0] // clear
    			}
    		}
    
    		if err := scanner.Err(); err != nil {
    			fmt.Fprintln(os.Stderr, "reading standard input:", err)
    		}
    
    		if len(lines) > 0 {
    			send(lines)
    		}
    	}()
    
    	err := e.Exec()
    	if err != nil {
    		log.Fatal(err)
    	}
    	log.Println("Exec finished!")
    }


    Спасибо Евгений Мамонов за наводку с bufio.NewScanner.
    Ответ написан
    Комментировать
  • Как записывать stdout в буфер и считывать оттуда построчно?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Вы всё верно понимаете, горутину можно не использовать.

    Вы можете сделать что-то типа такого
    работающий вариант

    package main
    
    import (
        "bufio"
        "bytes"
        "fmt"
        "io"
        "log"
        "os/exec"
    )
    
    type Executor struct {
        wr io.Writer
    }
    
    func (e *Executor) SetStdout(w io.Writer) {
        e.wr = w
    }
    
    func (e *Executor) Exec() error {
        cmd := exec.Command("ls", "/etc")
        cmd.Stdout = e.wr
        err := cmd.Run()
        return err
    }
    
    type BufferedBrokerWriter struct {
        buffer  bytes.Buffer
        scanner *bufio.Scanner
    }
    
    func NewBufferedBrokerWriter() *BufferedBrokerWriter {
        bw := &BufferedBrokerWriter{}
        bw.scanner = bufio.NewScanner(&bw.buffer)
        return bw
    }
    
    func (bw *BufferedBrokerWriter) Write(p []byte) (int, error) {
        return bw.buffer.Write(p)
    }
    
    func (bw *BufferedBrokerWriter) ReadLines(cnt uint) ([]string, error) {
        lines := make([]string, 0, cnt)
        linesCnt := uint(0)
    
        for bw.scanner.Scan() {
            line := bw.scanner.Text()
            err := bw.scanner.Err()
            if err != nil || line == `` {
                return lines, err
            }
    
            lines = append(lines, line)
            linesCnt++
            if linesCnt >= cnt {
                return lines, nil
            }
        }
    
        return nil, io.EOF
    }
    
    func main() {
        // подключаетесь к вашему брокеру сообщений,
    
        bw := NewBufferedBrokerWriter()
    
        e := &Executor{}
        e.SetStdout(bw)
    
        err := e.Exec()
        if err != nil {
            log.Fatal(err)
        }
    
        for {
            lines, err := bw.ReadLines(2)
            if err == io.EOF {
                break
            }
            fmt.Printf("Lines:\n%+v\n\n", lines)
        }
    }


    если возникнут сложности с реализацией - напишите, помогу
    Ответ написан
  • Почему не отрабатываются запросы net/http или как увеличить listen queue?

    @rustler2000
    погромист сикраш
    Потому что race condition.
    Используй ```atomic.AddUint64(&cnt, 1)```

    И да - необработанные запросы по стате ab смотреть надо.
    Ответ написан
    Комментировать
  • Почему оператор сотовой связи предоставил ip адрес не по местоположению?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    Базы данных GEOIP являются спекулятивными и неточными.

    Нет никакого регламента, который привязывает IP к географии.

    Более того, абоненты сотовой связи получают серые адреса из внутренней сети оператора, а уж где физически сеть оператора гейтуется в Интернет - знает только оператор.

    Так что может быть и так, что вам все правильно показывает - и машина-гейт с таким IP физически находится в Хабаровске
    Ответ написан
    Комментировать
  • Как лучше отдавать связанные данные через rest api laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Можно вместо ресурсов Лары использовать Fractal, там третий вариант поддерживается из коробки.
    Ну или вообще GraphQL использовать.
    Ответ написан
    Комментировать
  • Как организовать запись звонков в Asterisk?

    anton99zel
    @anton99zel
    29а класс средней школы №7
    exten => s,1,MixMonitor(/myrecords/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav,v(2),/usr/bin/lame --preset standard /myrecords/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav /myrecords/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.mp3 && rm -f /myrecords/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav && curl -F document=@"/myrecords/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.mp3" https://api.telegram.org/bot108766227:AAEDbS90ZrvHgOINvf-cnow_I04N12BH7RY/sendDocument?chat_id=25128888 && rm -f /myrecords/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.mp3)

    У меня такая строчка перед Background
    Требуется установка # apt-get install lame
    Суть - Записать файл, конвертировать в mp3, после звонка отправить файл в телеграм, удалить файл на сервере.
    Также для исходящих.
    5fc50870ac868052384986.jpeg
    Ответ написан
    3 комментария