Задать вопрос
  • Как вывести шесть нулей (000000) и прогнать их через цикл (000001, 000002 ...)?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    <?php
    $value = 0;
    for($i = $value; $i < 999999; $i++){
        echo sprintf("%06d", $i) . '<br>';
    }


    Искать в Google: "php вывод числа с ведущим нулём", "php число с ведущим нулём".
    Ответ написан
    2 комментария
  • Хорошо ли использовать id объекта стороннего сервиса как primary key в своей базе данных?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Вариантов несколько:
    1. Источник данных сомнительный и по id не всегда можно получить один объект, иногда бывает два и более - значит использовать его как primary не стоит, стоит сделать составной primary
    2. Планируется добавить другие источники - нужен составной primary
    3. Идентификаторы на источнике слишком большие и представляют собой не число, а строку со множеством заложенных в них данных - такой идентификатор не удобно использовать в привязке по своему коду, опять таки не факт что вам нужны все милионы объектов источника
    4. Планируется связывать объекты с другими объектами, в этом случае если идентификатор не удовлетворяет принятой концепции в базе то проще его продублировать собственным сохраняя связь с источником
    5. Если можно предположить что объекты будут так же вводить вручную (через админку или как-то ещё) или понадобится продублировать несколько объектов с чуть изменёнными свойствами то не понятно как сделать auto_increment такого primary key, в этом случае может произойти коллизия и по этому использовать сторонний ключ для primary не стоит


    В большинстве случаев - ответ "Нет", сторонний ключ в качестве primary использовать не стоит.
    Ответ написан
    Комментировать
  • Как заставить демона работать постоянно, а не только во время SSH сессии?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    user@server ~ $ nohup ./program

    Так же можно использовать


    Если задача запустить и потом лишь перезапускать то лучше supervisor, пример из adw0rd.com/2012/11/2/python-supervisor :
    [program:<project>_uwsgi]
    ; Имя программы в supervisor, например будет выводится в supervisorctl
    process_name=%(program_name)s
    ; Вы можете указать сколько таких процессов надо запустить, по умолчанию 1
    numprocs=1
    ; Путь до проекта (chdir)
    directory=/<project>
    ; Команда для запуска программы
    command=/<project>/venv/bin/uwsgi /<project>/uwsgi/production.ini
    ; Из под какого пользователя запускать программу
    user=<username>
    ; При загрузке самого supervisor запускать программу
    autostart=true
    ; Если программа аварийно завершилась, то перезапускать её
    autorestart=true
    ; Перенаправляет пришедший STDERR в ответ supervisor'у в STDOUT (эквивалент /the/program 2>&1)
    redirect_stderr=true
    ; Таймаут в секундах, после которого supervisor пошлет SIGKILL процессу,
    ; которому до этого посылал SIGCHLD
    stopwaitsecs=60
    ; Какой сигнал посылать для остановки программы
    stopsignal=INT
    ; Путь до error-лога
    stderr_logfile=/var/log/<project>/wsgi_err.log
    ; Путь до output-лога
    stdout_logfile=/var/log/<project>/wsgi_out.log
    ; Максимальный размер файла output-лога, после чего будет "rotate"
    stdout_logfile_maxbytes=100MB
    ; Количество файлов output-лога
    stdout_logfile_backups=30
    ; Размер буфера для output-лога
    stdout_capture_maxbytes=1MB
    Ответ написан
    Комментировать
  • [Большой txt ~1 гб] как обработать?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    1) удалить в txt последние 2 столбца (ибо не используются)
    - если есть возможность не обрабатывать данные которые не нужны то так и нужно поступить.
    2) загнать txt в sql -> обработать там.
    - бессмысленное занятие
    3) возможно есть что-то для больших файлов у c++.
    - суть разбора больших файлов (1, 10, 100, 1000 гигабайт на файл и больше) в том что бы читать его чанками по несколько байт (размер выбирается исходя из задачи) и анализ файла в поточном виде (не загружать его весь в память).

    Алгоритм:
    1. читаете поточно по N байт
    2. при нахождении \n считаете что началась новая строка
    3. как только собрали строку - делаете с ней что хотите, в данном случае разбиваете по-пробельно (explode(" ", $str); пример из php, но не суть)
    4. закидываете в некий результирующий массив третью ячейку в качестве значения и первые две ячейки в качестве ключа, если данные уже были то суммируете.

    Конечно это не спасёт от величины результирующего массива равного количеству уникальных ключей (ячейки x y). Для этого применяют mapReduce, но для вашей задачи он избыточен.

    Вариант как избавиться от большого результирующего массива:
    1. алгоритм прежний
    2. записываете значение в mysql или любую другую базу в виде
    INSERT INTO result_table
    SET
        key = ".$key.",
        value = ".$value."
    ON DUPLICATE KEY UPDATE value = value + ".$value."

    Где result_table.key PRIMARY KEY
    Ответ написан
    7 комментариев
  • Почему автоматически перекидывает с http на https?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Есть ещё один вариант при котором происходит автоматический "редирект" браузера с http на https
    Подробнее тут: habrahabr.ru/post/216751

    Настройка называется «HTTP Strict-Transport-Security» и в конфиге выглядит примерно так:

    add_header Strict-Transport-Security "max-age=31536000";


    Если надо что бы настройка использовалась так же и для поддоменов (субдоменов таких как xxx.example.com, xxx2.example.com и т.д.) указывается параметр includeSubDomains
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";


    max-age означает количество секунд в течении которых браузер помнит что для домена есть https и его нужно использовать принудительно. max-age=31536000 = 1 год.
    Ответ написан
    Комментировать
  • Как убрать дубликаты в mysql запросе?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    SELECT distinct to_id FROM messages WHERE from_id = 5
    SELECT distinct from_id FROM messages WHERE to_id = 5

    Почитайте более подробно тут: www.mysql.ru/docs/man/DISTINCT_optimisation.html

    Одним запросом можно сделать через UNION (объединение нескольких запросов)
    SELECT to_id as user_id FROM messages WHERE from_id = 5
    UNION
    SELECT from_id as user_id FROM messages WHERE to_id = 5

    Подробнее про UNION и DISTINCT с его участием тут: www.mysql.ru/docs/man/UNION.html

    Если не используется ключевое слово ALL для UNION, все возвращенные строки будут уникальными, так как по умолчанию подразумевается DISTINCT для всего результирующего набора данных. Если указать ключевое слово ALL, то результат будет содержать все найденные строки из всех примененных команд SELECT.

    И ещё один способ с обычным DISTINCT одним запросом:
    SELECT
        DISTINCT IF(to_id = 5, from_id, to_id) as user_id
    FROM messages
    WHERE from_id = 5
        OR to_id = 5


    Для тех кому лень читать ссылки: DISTINCT во многих случаях разворачивается в GROUP BY и использует временную таблицу. Вывод - если важно отфильтровать дубли только в какой-то конкретной колонке то:
    1. можно указать distinct у конкретного поля (distinct from_id), не для этого случаях, вспомнить подходящий с ходу не удалось
    2. можно указать GROUP BY и перечислить нужные поля не указывая DISTINCT


    Подсчёт дополнительной колонки unread и вывод даты последнего сообщения:
    SELECT
        IF(to_id = 5, from_id, to_id) as user_id,
        SUM(unread) as count_unread,
        MAX(create_date) as last_create_date
    FROM messages
    WHERE from_id = 5
        OR to_id = 5
    GROUP BY user_id


    Добавляем LEFT JOIN (хотя их использовать и не стоит)
    SELECT
        IF(m.to_id = 5, m.from_id, m.to_id) as user_id,
        SUM(m.unread) as count_unread,
        MAX(m.create_date) as last_create_date,
        u.name,
        u.login
    FROM messages as m
        LEFT JOIN users as u ON (u.user_id = m.from_id OR u.user_id = m.to_id)
    WHERE m.from_id = 5
        OR m.to_id = 5
    GROUP BY user_id
    Ответ написан
  • 2d движки на golang или как делать просчёт координат на сервере?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    По сути у вас две задачи:
    1. анимация перемещения
    2. взаимодействие с другими предметами/игроками

    Анимация делается на js отдельно, для этого серверу не требуетс каждые 100мс сообщать куда двигаться (конечно если не было изменение маршрута).
    А вот взаимодействие с другими предметами и игроками сложная штука, по сути там формула поиска пересечений траекторий объектов и принятие решений об изменении дальнейшей траектории или изменения состояний объектов. В некотором роде клиент и сервер дублируют эту задачу, просто делают это по разному.
    Ответ написан
    Комментировать
  • С чего начать программирование?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Запишись на курсы в школе, там будет Borland/Turbo Pascal и много аглоритмов... ну или Си/Си++ и опять таки много алгоритмических задачек. Но если хочешь быть странным и продвинутым школьником - начни с golang.org и изучения английского.
    Ответ написан
  • Как "наследовать метод" golang?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    То что вы сделали называется embed (встраивание). Можно отойти от него явно и не путаться.

    type Animal struct {
      Name string
    }
    
    type Rabbit struct {
      Ani Animal
    }
    
    func (this *Rabbit) Walk() *Rabbit{
      this.Ani.Walk()
      fmt.Println("...and Jump")
      return this
    }
    
    func (this *Rabbit) Say() *Rabbit{
      this.Ani.Say()
      return this
    }

    Как по мне использовать наименование this вездк где это подразумевается в Golang не лучший выбор, так как усложняется визуальное разделение между разными типами объектов.

    Так же можно не дублировть функции так:
    rabbit := Rabbit{ }
      rabbit.Ani.Name = "Кроль"
      rabbit.Ani.Walk()
      rabbit.Ani.Say()
      rabbit.Ani.Walk()
    Ответ написан
    2 комментария
  • Как сделать случайные отзывы на php?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Всегда отделяйте алгоритмы от шаблонов, иначе потом эту кашу замучаетесь править и проверять.

    У вас что все комментарии одинаковые что фотографии и заголовки можно тасовать как заблагорассудится?

    Предложу так: 3 не ассоциативные массивы, rand(0, count($array_title)-1) для получения индекса.
    <?php
        $array_title = ...
        $array_body = ...
        $array_photo = ...
    
        $title_id = rand(0, count($array_title)-1);
        $body_id = rand(0, count($array_body)-1);
        $photo_id = rand(0, count($array_photo)-1);
    
        $title = $array_title[$title_id];
        $body = $array_body[$body_id];
        $photo = $array_photo[$photo_id];
    
    ... передача этого всего в шаблон

    Но лучше всего когда комментарии живые (написанные человеком) и тогда по сути один массив каждый объект которого хранит в себе и заголовок и сообщение и фотографию... и тогда rand() нужен уже один.

    Хранить при этом можно как угодно. Например в CSV виде в обычном текстовом файле:)
    Ответ написан
  • Golang mysql: Invalid Connection?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Прослеживаем цепочку через документацию
    1. https://github.com/go-sql-driver/mysql используется совместно со стандартным https://golang.org/pkg/database/sql/
    2. находим в https://golang.org/pkg/database/sql/ функцию
    func (db *DB) Query(query string, args ...interface{}) (*Rows, error)

    3. видим что результат *Rows, находим эту структуру и изучая находим функцию
    func (rs *Rows) Close() error
    4. точно такую же функцию видим у Stmt
    func (s *Stmt) Close() error
    5. делаем вывод что надо закрывать соединения, в определённых случаях, принудительно

    Подобный вопрос был на toster.ru уже разва два.
    Вот тут можете прочитать дискуссию по поводу особенностей работы с MySQL в Golang: https://toster.ru/answer?answer_id=685014#comments...

    Полезные ссылки для тех кто хочет разобраться в вопросе:
    4gophers.ru/article/go-i-sql-bazy-dannyh
    go-database-sql.org/surprises.html
    Ответ написан
    1 комментарий
  • Си или Go для приложения по обработке сетевого трафика до 1.5М пакетов/с?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Для обработки сетевого трафика больше подойдёт модуль ядра Linux написанный на Си. Если кто-то умеет такое делать на Golang - дайте знать, с удовольствием послушаю, почитаю на эту тему... Агрегированные же данные (прилетающие от такого модуля) вполне хорошо обрабатывать на Golang (в этом случае можно не заморачиваться одной железкой, а поставить сразу несколько распределив по ним трафик).

    P.S. Возможно речь идёт не о linux, но в топике это как-то отдельно не оговаривалось.
    Ответ написан
    4 комментария
  • Можно ли писать server-side на нескольких языках одновременно?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Попробуйте микросервисы на обоих языках, а связь по REST API или net/rpc, протобуфер есть скорее всего под оба языка программирования.

    В продакшине наблюдаю в разных сочетаниях Golang/PHP/Node.JS/Bash/Си/Python и ничего, нормально.
    Ответ написан
    Комментировать
  • Как правильно загружать пакеты для Go?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Поставьте pkg-config стандартным установщиком в вашей операционной системе.
    В Gentoo это делается так:
    # emerge -pv pkg-config
    
    Calculating dependencies... done!
    [ebuild  N     ] dev-libs/libyaml-0.1.6  USE="-doc -examples -static-libs {-test}" 492 kB
    [ebuild  N     ] app-eselect/eselect-ruby-20131227  2 kB
    [ebuild  N     ] dev-util/ragel-6.7-r1  USE="-vim-syntax" 1,156 kB
    [ebuild  N     ] dev-lang/ruby-2.0.0_p647-r1:2.0  USE="berkdb gdbm ipv6 ncurses rdoc readline ssl -debug -doc -examples -rubytests -socks5 -xemacs" CPU_FLAGS_X86="sse2" 8,110 kB
    [ebuild  N     ] dev-lang/ruby-2.1.7:2.1  USE="berkdb gdbm ipv6 ncurses rdoc readline ssl -debug -doc -examples -rubytests -socks5 -xemacs" 9,154 kB
    [ebuild  N     ] dev-ruby/rubygems-2.2.5-r1  USE="-server {-test}" RUBY_TARGETS="ruby20 ruby21 (-ruby19)" 408 kB
    [ebuild  N     ] virtual/rubygems-10  RUBY_TARGETS="ruby20 ruby21 (-ruby19)" 0 kB
    [ebuild  N     ] dev-ruby/rake-0.9.6-r1  USE="-doc {-test}" RUBY_TARGETS="ruby20 ruby21 (-ruby19)" 121 kB
    [ebuild  N     ] dev-ruby/json-1.8.2-r1  USE="-doc {-test}" RUBY_TARGETS="ruby20 ruby21 (-ruby19)" 149 kB
    [ebuild  N     ] dev-ruby/racc-1.4.11  USE="-doc {-test}" RUBY_TARGETS="ruby20 ruby21 (-ruby19)" 111 kB
    [ebuild  N     ] dev-ruby/rdoc-4.0.1-r2  USE="-doc {-test}" RUBY_TARGETS="ruby20 ruby21 (-ruby19)" 457 kB
    [ebuild  N     ] dev-ruby/pkg-config-1.1.5  USE="{-test}" RUBY_TARGETS="ruby20 (-ruby19)" 19 kB
    
    Total: 12 packages (12 new), Size of downloads: 20,175 kB

    В других linux-операционках
    # apt get pkg-config
    # yim install pkg-config
    и так далее...

    Но главное научитесь читать что вам компьютер пишет при проблемах.
    pkg-cinfig: exec: "pkg-config": executable file not found in %PATH%

    Читается это так:
    запуск "pkg-config": исполняемый файл не найден в %PATH%

    Раз не найден - значит надо установить. Это известная программа сборщик для некоторого софта.

    Причина по которой Golang библиотека вдруг этого захотела - внутренний биндинг в ней или в какой-то другой которую она используется и которой пока не установлено на ваш компьютер. Про биндинги (склейка Golang и Си библиотек) почитайте отдельно.
    Ответ написан
    2 комментария
  • Какую книгу прочесть начинающему программисту?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Про процессор, программы и прочее - Ядро Linux, не само ядро, конечно, а книгу:) Их с таким названием может быть несколько, выберите на свой вкус с боле-менее академическим-публицистическим складом текста:) Лава например:) Ещё скучные книжки Таненбаума иной раз очень интересны в таком возрасте - тоже стоит почитать:) В общем классика. Там, если не откажется, можно и Кнута предложить почитать, а потом просто смотреть как делает успехи в жизни:)
    Ответ написан
    Комментировать
  • Какой тип данных должна принимать функция?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Учитесь читать документацию. https://godoc.org/github.com/tealeg/xlsx#File
    1. находите функцию с которой всё началось,
    func OpenFile(filename string) (file *File, err error)

    2. видите что она возвращает тип File, находите этот тип,
    type File struct {
        Date1904 bool
    
        Sheets []*Sheet
        Sheet  map[string]*Sheet
        // contains filtered or unexported fields
    }

    3. видите что в Sheets находится слайс *Sheet
    4. находите тип Sheet
    type Sheet struct {
        Name        string
        File        *File
        Rows        []*Row
        Cols        []*Col
        MaxRow      int
        MaxCol      int
        Hidden      bool
        Selected    bool
        SheetViews  []SheetView
        SheetFormat SheetFormat
    }

    5. изучаете... что где куда и зачем... https://godoc.org/ и исходный код вам в помощь. И больше не задавайте таких вопросов, а то ленивым помогать не хочется:)
    Ответ написан
    Комментировать
  • Как избавиться от надоедливой строки в MySQL?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Скопируйте данные в новую базу, хоть построчно хоть через mysqldump, весь вопрос в том что вообще ещё работает.
    Ответ написан
    Комментировать
  • Как решить проблему с DATA RACE?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Вам стоит посмотреть на подход с другой стороны. Для чего вам цикл? Сделайте его в каждой горутине Request(). По одной горутине на каждый объект Loc. Для управления (стартом/стопом между итерациями) используйте канал.
    До остального дойдёте сами, либо не дойдёте - как знать:)
    Ответ написан
  • Как сделать так, что бы программа на пк распознавала наличие рядом радиоволны?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Нужен радио-приёмник и радио-передатчик (можно в одном устройстве). Наверняка сможете найти если будете искать. Возможно сможете сделать принимающую и передающую антену впояв достаточно большой провод в PCI слот (или любой другой) и подав на него достаточно большое напряжение. На сколько реально - понятия не имею. Но был такой проект на Raspberry Pi, можно ли повторить на обычном компьютере - вопрос.
    Ответ написан
    1 комментарий
  • Наше доменное имя и сайт 18+ тематики, как поступить?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Отличный повод для PR. Слоганы такие "Мы не порно-сайт, но сайты делаем не менее интересными:)". Вообще от вас зависит что вам удобно или нравится. Проведите анкетирование у клиентов - предложите им пять-шесть других доменов и названий. С другой стороны - всё равно у кого там какой домен похожий на ваш - если ваш товар или услуга того стоит то ничто не помешает.
    Ответ написан
    Комментировать