Ответы пользователя по тегу Программирование
  • Golang Benchmark почему разные результаты?

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

    При бенчмарке желательно:
    • что бы нигде ничего не было запущено
    • что бы нигде ничего не работало в фоне
    • что бы не нужные куски кода были отделены от таймера (например не нужные инициализации, подготовка данных)

    Нужны ли бенчмарки? Бенчмарки нужны что бы отбраковать совсем плохие результаты или выбрать между двумя очень похожими. Так же они дают представление о том сколько тратится на каждую итерацию того кода что вы тестируете.

    Пример простого бенчмарка с инициализацией вынесеной за таймер:

    package conf // <-- здесь название библиотеки для которой предназначены бенчмарки
    
    import (
        "testing"
    )
    
    func BenchmarkLoadGo(b *testing.B) {
        conf := NewConfig()
        conf.SetDefaultFile("properties")
        conf.SetDefaultCatalog("./testdata") // default "./configs"
    
        b.ResetTimer() // <-- обнуляем таймер что бы вся "сложная" и "единомоментная" работа не попала в подсчёт
    
        for i := 0; i < b.N; i++ {
            go conf.GetSection("server_1", "storage") // <-- в данном случае тестируется сценарий в конкурентном виде, но чаще всего этого не требуется и конкретно в том коде откуда взят бенчмарк есть отдельный бенч для не конкурентного доступа и сравнивая их можно иметь представление о том как оно себя поведёт в обоих сценариях.
        }
    }
    Ответ написан
    Комментировать
  • Стоит ли так делать?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    len([]byte("string")) // <-- количество байт

    Другое дело что базы данных часто:
    • сжимают данные (особенно текстовые), по этому картинки и не рекомендуют складывать в базу данных
    • хранят множество различных индексов на каждую запись, что бы было удобно доставать данные
    • хранят указатели на данные
    • хранят логи (бинарные или текстовые)
    • имеют кеш в памяти
    • имеют лог транзакций (или не имеют, в зависимости от базы)
    • много чего еще

    По этому размер "таблицы" или "базы данных" в каждом случае считается по своему.

    Из in-memory баз данных с гарантированным сохранением на диск сейчас активно пиарят Tarantool, там как раз все данные в памяти, но при записи они становятся доступными только когда произошла запись в лог на диск. Если есть достаточное количество оперативки то хороший выбор, на нём живёт множество сервисов "большого" русского интернета.

    Если оперативки мало (500 мегабайт например), то больше подойдёт классическая база данных с кешированием горячих данных.
    Ответ написан
    Комментировать
  • Какой ЯП выбрать для моделирования с учетом времени?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Выберите Golang, https://golang.org

    • сможете поработать с одним из самых современных языков программирования
    • каналы и горутины в вашей задаче очень пригодятся
    • сможете запустить как на Windows так и на любой другой поддерживаемой платформе (linux, OSX, other...)


    Сделать будет не очень сложно:)

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

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Читайте много книг, в идеале все по выбранному направлению и процентов 30-40% от смежных.

    Если конкретно по информационной безопасности то надо знать:
    • компилируемые языки, Си, Си++
    • разбираться в ядре операционной системы, можно ограничиться только миром Linux, а можно пройтись по всем основным, "Ядро Linux. Описание процесса разработки" Роберт Лав, у Таненбаума много потрясающих книг на тему распределённых систем и операционок как таковых, в чём-то базовые вещи
    • понимать алгоритмы - здесь вам в помощь бессмертные труды Кнута
    • желательно знать парочку интерпретируемых языков что бы искать баги и чинить уязвимости по всем фронтам
    • разбираться в компиляторах и понимать машинный код хотя бы на базовом уровне
    • разбираться в виртуализации, ключевые слова: kvm, quemu, xen, lxc, openvz, virtuozzo, docker, vagrant, прочеее...


    Читать https://www.opennet.ru и www.linux.org.ru , по сетям nag.ru
    Определиться со сферой деятельности и копать более углублённо по ней.
    Ответ написан
    3 комментария
  • С чего начать программирование?

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

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

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

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

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Посмотрите в сторону уже готовых систем логирования (Graphite, influxdb, прочее) и мониторинга (mrtg, rrd).

    Качество вашего кода и дизайна самого приложения прилично низкое. Бенчмарков не делали вообще никаких. Не поймите не правильно, код читается не плохо, достаточно чистый, но по сути бесполезный.

    По поводу бенчмарков. Вы утверждаете что "вставка в редис"+"вставка в mysql" работает быстрее чем "вставка в mysql". Это по меньшей мере выглядит заблуждением, потому что тот же редис на том же сервере (на сколько я понял) и производительности прибавить не может. Изменился разве что немного подход к записи в MySQL.

    Варианты которые у вас были при написании своего логера:
    1. писать в MySQL по запросу каждый раз когда срабатывает некое событие и появляется запись в логе
    2. накапливать пачку логов в оперативной памяти - пушить в MySQL точно так же как после редиса (долой редис), за одно научитесь ограничивать потребление памяти (вы ведь не можете бесконечно склодировать данные)
    3. накапливать пачку логов в файл (банальный бинарный файл), раз в N минут менять лог-файл
    4. вариант тот же что и третий, только старые логи переносить в базу в фоне.

    Тут надо так же обратить внимание на то для чего логи пишутся:
    1. что бы точно знать кто где и что делал (доктилоскопия пользователей)
    2. что бы делать реал-тайм подстройку других алгоритмов в зависимости от поведения пользователей, системы и всего такого
    3. что бы просто быть в курсе что приложение упало (кстати в этом случае ваш код отправит емейл?:))

    У меня есть задача по сохранении метрики всякой. Условия:
    1. MySQL - для показа потом агрегированных графиков и просто списков что сделалось за определённый промежуток времени.
    2. Shared-хостинг где можно запускать бинарники, но нельзя делать fork'и и по сути ставить ничего кроме Golang приложения и PHP скриптов.
    3. Golang приложение которое щёлкает задачки как семечки и метрик просто туча - считай только их и писать.

    Без накопления и группировки MySQL только и занимается что вставкой в таблицу с метрикой. В планах хранить в бинарных блобах. Ставить тот же Графит на Shared-хостинг для такой простой задачки считаю избыточно:)
    Ответ написан
  • Какую GO либу посоветуете для написания демонов?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Попробуйте стандартные для linux start-stop-daemon в init.d скриптах, при условии что у вас Linux и не systemd.
    Ответ написан
  • Будет ли польза в такой затеи?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Постепенно собираю свой архив решений на все случаи жизни, у меня для этого отдельный репозитарий на github.com/mantyr/runner и вообще прочие не связанные с Golang вещи тут imagick.metlan.ru плюс ребята знакомые пишут как минимум два проекта с подсказками по программированию в виде каталогов (но Golang там врядли будет в ближайшее время). Так же не плохи ресурсы stackoverflow.com и https://www.socketloop.com/tutorials/

    По Golang же самые лучшие ресурсы: godoc.org https://golang.org/pkg/ 4gophers.ru

    В любом случае ваш проект - это ваш опыт, как программирования так и поиска и сбора информации, её представления публике. Учитесь и всё получится. И поделитесь ссылкой когда будете готовы.
    Ответ написан
  • Как полностью убить дочерний процесс?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    go run имеет особенности, к примеру вы можете запустить его в консоли и забыть - от консоли он спокойно отвяжется. Тут у вас аналогичная ситуация. Если вы хотите запускать некий код в "дочернем" процессе то делайте это явно:
    1. через fork() - что не желательно
    2. через go-рутины
    3. ...
    Но, судя по всему, вы пытаетесь скрестить Golang приложение с приложением на другом языке (иначе откуда такие заморочки). В таком случае вам нужно:
    1. научить приложение (first.go) понимать сигналы операционной системы, для этого изучите os.Signal и syscall.SIGKILL (вообще почитайте на тему какие сигналы надо обрабатывать при завершении приложения) и завершайте приложение правильно в нужный момент
    2. всё таки скомпилируйте вначале в бинарник, go install first.go и используйте уже именно его...

    Ну и напоследок - не надо так расходовать ресурсы - запускать N раз другую программу что бы просто посчитать несколько однотипных цифр. Сформируйте программу более ёмко, отправьте ей кучу данных и получите от неё другую кучу результатов разом. Или сделайте многопоточный сервис который принимает запросы и выдаёт ответы.
    Ответ написан
    2 комментария
  • Возможно ли начать работу программистом в 18 лет?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Для начала вам придётся попробовать самостоятельно найти ответы на эти вопросы. Иначе зачем вы нужны нормальной компании если за вас всё нужно делать самому? Учитесь быть самостоятельным, принимающим решения человеком. К тому же вы описали что у вас уже есть опыт. Постарайтесь его применить, что-то создать.

    Если хотите потренироваться - попробуйте продать мне или кому-то ещё одну из своих компетенций, технологическое решение. В не зависимости от того получится у вас это или нет - те знания и те выводы которые можно сделать из процесса очень полезны.
    Ответ написан
    1 комментарий
  • Как не упустить relocation bonus?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    У компаний очень разные условия, надо честно поговорить с тем кто принимает тебя на работу. Этот бонус носит как мотивационный характер (что бы вы выбрали именно их компанию) так и выполняет роль сглаживающего эффекта от переезда на первое время (что улучшает позицию нового сотрудника в первые месяцы, снимает стресс и вообще делает возможность сам переездж).
    Так что ваша прописка и регистрация роли особой не играет, конечно если вам не попалась компания с жутким формализмом.
    То что вы будете в конечном итоге жить в своём жилье для компании только плюс, хотя ипотека и не самое удачное решение.
    Ответ написан
    Комментировать
  • Что за язык Go, и где его можно хостить?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Хостить можно где угодно. Но чисто шаринг-хостинги полноценно не подойдут.
    1. на шаринг-хостингах почти никогда нельзя открыть порт для входящих соединений (веб-сервер на Golang уже не запустишь, точнее работать-то он будет, но порт не откроет)
    2. на шаринг-хостингах часто нельзя вызывать fork(), тобишь создавать процессы, что бы Golang самопроизвольно не падал - нужно в коде сознательно запретить вызов fork(), посмотрте описание библиотеки runtime
    3. на шаринг-хостингах Golang можно запустить как и любой другой бинарник, достаточно иметь доступ по консоли, возможность что-то запустить через cron или разрешённый вызов exec и его аналоги в PHP

    С другой стороны, стоимость отличного VPS с SSD на 22 гигабайта, полноценным ядром процессора и 512 мегабайтами оперативки стоит в DigitalOcean 5$...

    В качестве первого языка стоит посмотреть на школьную программу:
    1. Turbo/Borland Pascal
    2. Си/Си++
    3. Лого Миры
    4. Delphi
    5. Ничто не мешает в этот перечень добавить Golang, он отлично вписывается, ведь главные составляющие там есть.
    Плюс обучение программированию - это ещё и алгоритмы и подходы, а никак не фреймворки и hello world странички в интернете... Так что Yii, Drupal и прочие радости PHP мира тут явно не в тему.
    Ответ написан
    Комментировать