Задать вопрос
  • Как создать свою библиотеку для Go?

    fenrir1121
    @fenrir1121
    Начни с документации
    Прочитать в документации.
    Ответ написан
    Комментировать
  • Метод разработки и обновления сайта?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Все зависит от организации работы в конкретной конторе и конкретного разработчика, но лично у меня работает следующий подход:
    1. Пишем начальное тз, минимальный необходимый перечень.
    2. Говнокодим на основание п1 по принципу - "сделать быстро и чтобы работало по тз".
    3. Пушим п2 в гит и разворачиваем сайт (или компонент на сайте).
    4. Записываем фидбэк о компоненте, что не работает, как хотелось бы чтобы работало итп. Если это не критические замечания (безопасность или что то основное не работает), то откладываем изменения на месяц, квартал или год.
    5. При накопление критической массы замечаний в п4 (ну или у Вас просто не осталось задач на настоящий момент) - добавляем рефакторинг п3 в очередь задач.
    6. Повторяем 3-6 пункты до бесконечности.

    При данном режиме работы решается сразу 3 задачи:
    - Не требуется детальное тз на старте, в котором все равно не удастся предвидеть все наперед, соответственно сокращается общее время разработки и его стоимость.
    - Сайт или компонент сайта выпускается в релиз очень быстро, а значит решает задачу бизнеса так же быстро.
    - Прозрачный и прогнозируемый по срокам и стоимости режим релизов.

    Важное уточнение!

    Схема с минимальным ТЗ и говнокодом работает лишь с теми заказчиками, которым Вы подробно разъяснили, почему сроки и стоимость ниже, почему за каждую "хотелку" не указанную в тз придется доплачивать, и почему необходим рефакторинг.

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

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Как много кода для простого рейтинга.

    Ответ написан
  • Какой использовать стек для написания онлайн сервиса управления производством?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На том, который лучше всего знают ваши разработчики.
    Ответ написан
    Комментировать
  • Можно ли добавить условие при регистрации аккаунта на сайте?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Это вообще реально сделать?
    Реально
    Ответ написан
    8 комментариев
  • Почему может быть утечка памяти?

    @falconandy
    Используете GoLand? Он подсказывает:
    Possible resource leak, 'defer' is called in the 'for' loop.

    A "defer" statement invokes a function whose execution is deferred to the moment the surrounding function returns, either because the surrounding function executed a return statement , reached the end of its function body , or because the corresponding goroutine is panicking .

    Предупреждение говорит о том, что defer код будет выполнен только при завершении функции, а не итерации цикла. В вашем случае это предупреждение неактуально, но проще немного переписать код, чтобы не было "ругани":

    func (app App) Shutdown() {
    	for _, shutdown := range app.onShutdown {
    		if err := shutdown(); err != nil {
    			log.Println(err)
    		}
    	}
    }
    ...
    defer app.Shutdown()
    Ответ написан
    Комментировать
  • Как показывать загруженность пк через web-страницу?

    GavriKos
    @GavriKos
    Использовать готовые решения. monit, zabbix, например. Графану там какую то
    Ответ написан
    Комментировать
  • Какой нужен сервер для приложения для заказа такси?

    @rPman
    Условная поездка - это считанные десятки запросов к серверу (если правильно websocket или любые другие двухсторонние протоколы), даже очень криворукие разработчики могут реализовать порядка секунды на запрос (обычно сотни-тысячи запросов в секунду на ноду, а очень хорошие разработчики могут обеспечить порядка 10к-100к запросов в секунду на ноду)...

    Техническая сторона почти любого бизнеса это его крохотная часть, в такси важен рынок и немножко маркетинг, отжать в текущих реалиях этот рынок почти нереально, нужно предлагать какие то заоблачные условия, только что бы некоторые водители и клиенты стали этим пользоваться... и делать это достаточно продолжительное время, что бы хотя бы часть рынка себе получить.
    Ответ написан
    1 комментарий
  • Нормально ли запускать пайтон скрипт по адресу http://localhost:8000?

    Aetae
    @Aetae
    Тлен
    То что на сервере на разных портах живёт множество программ и общаются меж собой - это нормально. Главное огородить их от внешнего доступа: обычно возможно указать на каком ip случшать порт, в таком случае достаточно указать локальный: 127.0.0.1:8000 вместо 0.0.0.0:8000 (слушать на всех) и извне никто на него попасть уже не сможет. Если же такой возможности нет, надо не забыть заблокировать этот порт файерволом.
    Ответ написан
    Комментировать
  • .stopPropagation() на самом деле не останавливает распространение события?

    IvanU7n
    @IvanU7n
    nothing interesting here
    Всё правильно получается? stopPropagation не блокирует распространение события, в определении в документации ошибка?

    неправильно, JS-события и стандартное поведение браузера связаны между собой опосредовано
    если на событии не было вызвано event.preventDefault(), то действие по умолчанию произойдёт независимо от того дошло ли событие до цели или нет
    более того есть события, которым чихать на event.preventDefault(), т.к. действие по умолчанию происходит до события (тот же input)
    Ответ написан
    5 комментариев
  • Как с помощью регулярного выражения найти все теги?

    @rPman
    Регулярные выражения не подходят для анализа html.

    Даже в очень простых случаях они будут неоправданно сложными. Страницу нужно предварительно разобрать на составные элементы, разобрать и отфильтровать их типы (атрибут, текст, теги,..) и уже по этому разбору что либо искать.

    Настоятельно рекомендую готовые анализаторы html, они есть подо все популярные и не очень языки и фреймворки. Например для php - штатные или рекомендую simple_html_dom, код будет простым, работать будет очень быстро, все встроено в php или простой include одного файла..
    Ответ написан
    1 комментарий
  • Могу ли я откатить все изменения на github без возможности вернуть их?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Нет. Всё, что попало в интернет - остаётся там навсегда. Особенно все изменения в git репозитории - копии его есть не только на сервере, который вам не принадлежит и в организации, в которой вы вряд ли админ/владелец, так еще и у всех остальных разработчиков тоже есть копия.
    Ответ написан
    1 комментарий
  • Как прописать путь к конфигу?

    @historydev
    Mistkerl, drück den Knopf.
    Если конфиг не должен предоставляться юзером, включи его байты в бинарник.

    import (
    	_ "embed"
    	"fmt"
    )
    
    //go:embed my_config.json
    var jsonData []byte
    
    func main() {
    	// Выводим встроенные байты
    	fmt.Println(string(jsonData))
    }
    Ответ написан
    Комментировать
  • Почему value выводятся в консоль в обратном порядке?

    @historydev Куратор тега JavaScript
    Mistkerl, drück den Knopf.
    Рекурсия заставляет код "углубляться" внутрь структуры данных, доходя до самого конца, а затем начинает возвращаться обратно, выполняя оставшуюся часть кода для каждого уровня вызова. Это и приводит к тому, что значения выводятся в обратном порядке.
    Либо так:
    if(typeof list[elem] == 'object') {
            		console.log(list.value);
                reverseNext(list[elem])
            }


    Либо так:
    if(typeof list[elem] == 'object') {
                reverseNext(list[elem])
            } else {
            	console.log(list.value)
            }
    Ответ написан
    2 комментария
  • Почему у интерфейса по ссылке не видно его методов?

    Если не вдаваться в подробности, то - в Go интерфейсы это указатели, и в приведённом примере *Repo это указатель на указатель, поэтому и методов нет.

    Так что для хранения в структуре указателя а не значения будет достаточно указать в качестве типа просто интерфейс Repo, и не указатель на него.
    Ответ написан
    Комментировать
  • Возможно ли назначение устройства в качестве шлюза, если для выхода в интернет на нём необходимо поднимать VPN?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Настроить можно...

    Но давайте посмотрим правде в глаза. В вашей организации бюрократия непробиваема, а безопасность поставлена в абсолют. Если работа мешает безопасности - побеждает безопасность. Если нормальная работа невозможна - тем хуже для работы. Организация нужна для спокойной работы службы безопасности, а не служба безопасности - для обеспечания максимально эффективной работы организации.

    Как скоро выловят вашу серую "схему" при таком подходе? Может даже сразу. Что сделают? Скорее всего будут показательно пороть, при массовом стечении народа, и не будут разбираться - а зачем оно вами было сделано (ну как слуба безопасности, которая будет вас наказывать, может прийти к выводу, что корень проблемы в самой службе безопасности?).
    Возможно даже выстявят на мороз...

    Я думаю, что для подлинного решения вашей проблемы с маршрутизаторами, есть только два варианта:

    - Первый (крайне эффективный, но часто малореальный) - "итальянская забастовка" - это когда все начнут работать строго по правилам безопасности и КПД труда станет близок к нулю. Это приведет к краху работы и руководству "прилетит по башке", да так, что придется разбираться с неприкосновенными безопасниками.
    Или вашему руководству это придется делать, или другим людям вместо них - если ваши не справятся (вместе со сменой руководства).
    Но возможно, что большинство работников морально не готовы к такому шагу. Их держит в страхе великая вера в бесконечную силу управленцев, да к тому же "за забором стоит очередь из желающих"... Они не видели ни разу, что происходит, когда весь коллектив разворачивается и уходит из офиса. И как мгновенно решаются все вопросы, когда под директором начинает качаться стул.
    Хотя чаще бывает так, что большинство сотрудников действительно можно заменить - ведь когда бюрократия и кумовство - многие некомпетентные товарищи могут сидеть на "теплых" должностях, ничерта не умея работать. А из рабочих навыков - у них хорошо развито только чувство собственной важности.
    Тварь вы дрожащая, или право имете? Можете сказать свое мнение открыто там, где оно будет услышано?

    - И второй путь, вполне реальный, зависит только от вас. Вы о нём знаете, думаете... Ведь это слово "бежать".
    И со временем он у вас обязательно превратиться в нечто гораздо более конкретное - "быстро бежать".
    Так не лучше ли, вместо страданий и героического преодоления искуственно создаваемых трудностей, в ожидании момента, когда вам скажут "Мери Поппинс - до свидания!" - принять решение и самому освободиться от оков?
    И сменить работу, улучив удачный момент.
    Ответ написан
    1 комментарий
  • Возможно ли назначение устройства в качестве шлюза, если для выхода в интернет на нём необходимо поднимать VPN?

    @Drno
    возможно сделать то что Вы хотите, но Вы можете за это огрести вплоть до увольнения
    пишите служебки, пусть админы делают то, что нужно Вам для работы
    Это самый логичный вариант
    Ответ написан
    Комментировать
  • Как использовать строку в качестве названия функции в GoLang?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Добро пожаловать в мир компилируемых языков программирования и статической типизации, здесь такое не нужно, считается очень плохой практикой и достижимо только через чёрные ходы, вроде рефлексии, что снижает производительность и безопасность кода, а также усложняет его сопровождение.
    Ответ написан
    Комментировать
  • Переподключение PHP к MySQL как правильно организовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ловить исключение, если ошибка 2006, то переподключаться и повторять запрос. Можно организовать в своём враппере поверх PDO или mysqli.
    Менее универсальный способ - увеличить таймаут для сессии
    SET session wait_timeout=28800
    SET session interactive_timeout=28800
    Ответ написан
    4 комментария
  • Сопровождение сайтов на абонентской основе - что это на практике сейчас?

    Dreamka
    @Dreamka
    Web-разработчик.
    Перестаньте думать в какую красивую обертку завернуть свое нежелание учиться. Лично я долго работал на фрилансе, да и сейчас нет-нет, да и да. И за десяток лет я понял одну простую, но не очевидную вещь. Не сайт надо делать, а решать проблемы ваших клиентов. Для бизнеса сайт - всего лишь один из инструментов. Бизнес может хотеть от этого инструмента каких то новых функций и механик. А может и не хотеть. Бизнес может не знать чего именно он хочет, он может думать что проблема в сайте, а проблема может быть в рекламе, в продвижении или в отделе продаж который не способен переварить тот поток заявок, который сыплется с сайта. При этом вам достаточно по верхам разбираться в смежных областях и глубоко знать одну какую-то область в которой вы специалист, чтобы либо решить проблему, либо перенаправить клиента по верному пути.

    В начале, когда я только набирался опыта, я долго не мог выстроить стабильный поток задач, потому что делал сайты. Как только я начал решать проблемы - практически каждый новый клиент у меня становится постоянным и на всех не хватает рук. А делегировать я так и не научился.
    Ответ написан
    2 комментария