• Rust сырой в ближ. время?

    bingo347
    @bingo347
    Crazy on performance...
    Подскажите пожалуйста какова на данный момент ситуация с Rust
    Дефицит вакансий, дефицит грамотных разработчиков. Те что есть хотят много денег.
    до сих пор еще дорабатывают, вышел ли в продакшен?
    он "вышел в продакшен" 5-6 лет назад, а насчет доработок - этот процес вечен, ну или пока язык не забросили, ну или как с Go не уперлись в собственный говнокод
    Может ли на данный момент потягаться по кол-ву библиотек в web с Golang и в машинном обучении с Python?
    Ну так посмотрите сами: https://crates.io/
    Планируется ли что-то в ближ. год/два?
    https://blog.rust-lang.org/2020/09/03/Planning-202...
    Ответ написан
    Комментировать
  • Стоит ли создавать сообщество начинающих программистов?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Сообщество будет включать совместные переписки и группы для видения проектов, задачи для практики и вопросы.

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

    Планируется ещё создать обучающий материал.

    Который будет по определению хуже существующих учебников и официальной документации.
    Ответ написан
    5 комментариев
  • Почему в базу данных попадает путь без слэшей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что данные в БД надо добавлять по-человечески, а не как пацаны в подворотне показали.

    Данные в БД надо всегда отправлять отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);

    И скажи спасибо что у тебя просто слеши пропали, а не всю базу шутники удалили
    Ответ написан
  • Есть ли нативный способ написать GUI на html/css для С++ программ?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Хватит ерундой заниматься и используйте нормальные инструменты для GUI конкретного языка.

    Qt -тяжелая для одного виджета? А браузер для одного виджета не тяжелый?

    Пиши на шарпе или делфи тогда. Там с GUI куда лучше и легче.

    P.S. qt позволяет использовать css для настройки контролов.
    Ответ написан
  • Могу ли я в чистом javascript в асинхронной функции подождать возникновения события?

    lazalu68
    @lazalu68
    Salmon
    Конечно можете. После await у вас должен идти промис, который будет ресолвиться из обработчика события. Если речь о событиях DOM, то как-то так:

    HTMLElement.prototype.waitFor = function(event_name) {
        if (event_name) {
            return new Promise((res, rej) => {
            	const listener = function() {
            		res()
            		this.removeEventListener(event_name, listener)
            	};
    
            	this.addEventListener(event_name, listener);
            })
        } else {
            throw 'No event passed to waitFor method!';
        }
    }
    
    async function foo() {
    	const start = new Date();
    	await document.querySelector('body').waitFor('click');
    	console.log('uspeshno dojdalis clicka, jdali celih ' + ((new Date().getTime() - start.getTime())/1000) + ' sekund');
    }
    
    foo();
    Ответ написан
    7 комментариев
  • Почему функция на python выдает ошибку спустя 40 минут работы?

    @dooMoob
    Ну а что тут разбираться, у вас стек переполняется при увеличения числа вложенных вызовов. Память как бы не бесконечная. Вам скорее всего надо это на бесконечный цикл переписать
    Ответ написан
    3 комментария
  • Как мы перенесли квадратный корень с числителя в знаминатель?

    @AVKor
    Сокращением дроби на корень из х.
    Ответ написан
    Комментировать
  • Почему не работает json.loads?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Потому что строковое представление словаря - это не JSON.
    Ответ написан
    Комментировать
  • Какова стоимость и сроки создания браузера?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Миллионы долларов и сотни человеколет.
    Ответ написан
    3 комментария
  • Возможность упаковки кругов в прямоугольник?

    Adamos
    @Adamos
    Взять бумажку.
    Нарисовать пример двух вписанных в прямоугольник окружностей.
    Подумать.
    Заподозрить, что точка соприкосновения окружностей всегда будет лежать на линии, соединяющей их центры. Доказать это.
    Провести линию между центрами окружностей и перпендикуляры от центров к сторонам прямоугольника.
    Сообразить, что нужно просто определить, влезет ли линия между центрами в габариты прямоугольника минус радиусы окружностей...
    Немножко посчитать.
    Ответ написан
    1 комментарий
  • Стоит ли асинхронность использовать при парсинге?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Да. Но есть нюанс.
    Если это линки одного домена - нужно контролировать максимальное количество параллельных соединений к одному домену и частоту запросов.
    Ответ написан
    Комментировать
  • Как на питоне реализовать такую функцию?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    1. Выучить Python
    2. Выяснить какие есть библиотеки для парсинга и какая подойдёт вам
    3. Изучить документацию выбранной библиотеки
    4. Написать скрипт
    Ответ написан
    Комментировать
  • Какие распределенные файловые системы или хранилища сейчас популярны?

    @MechanID
    Админ хостинг провайдера
    Ну тут вопрос сначала о бюджете и только потом о технологиях.
    приведу реальный пример - есть 100ТБ электронных писем(почтовый хостинг) - миллиарды мелких файлов, есть зоопарк стораджей которые отдают это по NFS в контейнеры и виртуалки. Никаких обджект стораджей и цефа(или другой распределенной ФС).
    сами стореджи - от просто 2U серверов с кучей дисков до СХД dell unity различный моделей.
    горячего резервирования нет (ибо дорого), есть бекапы.
    Поэтому вам нужно тщательно считать - возможно резервирывание и распределенный сторедж это то что вы не можете себе позволить, а вот просто 2U сервера от например supermicro на 24 или 50 дисков, которые отдадут NFS шару соседним серверам с контейнерами это то что вы можете позволить.
    Отдельно нужно считать сколько стоит минута или час простоя вашего сервиса.
    Ответ написан
    8 комментариев
  • Как запустить программу как демон в Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Если сделать вот так ./main & - тогда при завершении ssh сессии отвалится и сам демон.

    Всё действительно сильно зависит от ОС.

    Если говорить о Linux и о самом простом способе, то можно вот так
    nohup ./main > error.log 2>&1 &
    Этот способ подходит для любых бинарников, которые не делают fork, т.е. ведут себя также, как и Go'шный http ListenAndServe.

    Второй вариант - это запуск сервиса через systemd или init.d в зависимости от того, какой в вашем Linux.
    Я предпочитаю именно этот вариант, особенно, когда нельзя использовать Docker (например на виртуальных машинах с Virtuozzo).
    Для systemd (например на CentOS) можно создать файл /etc/systemd/system/yourservice.conf примерно такого содержания
    [Unit]
    Description=YourServie
    After=network.target
    After=syslog.target
    
    [Service]
    User=nobody # user ID под которым должен работать ваш демон
    Group=nobody
    Type=simple
    WorkingDirectory=/opt/yourservice
    ExecStart=/opt/yourservice/yourservice >> /var/log/yourservice.log 2>&1
    Restart=always
    
    [Install]
    WantedBy=multi-user.target


    Третий вариант - использовать Docker, инструкций много в интернете, если этот вариант актуален - напишите, я помогу найти нормальную.

    Четвёртый вариант, который обычно используется в ПО типа Nginx и т.д.
    В общем случае нужно:
    - породить новый процесс, т.е. сделать fork (вызвать системный вызов)
    - настроить вывод stdout, stderr в файлы (опционально)
    - "отвязаться от сессии" вызвать системный вызов setsid
    - сделать chdir куда нужно
    - настроить обработку сигналов SIGINT, SIGTERM, чтобы иметь возможность корректно завершать работу или перечитывать конфиги

    Возможно я что-то упустил в этом списке, давно уже демонов таким образом не делал, использую или Docker или systemd/init.d, так намного проще :)

    Могу еще добавить, что 4й вариант для Go считается антипаттерном.

    Вот тут https://socketloop.com/tutorials/golang-daemonizin... есть пример, правда он не очень удачный, там очень много нюансов.
    Ответ написан
    Комментировать
  • Есть ли python с нестрогой типизацией?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Слабая типизация для слабых программистов.
    Ответ написан
    3 комментария
  • Стоит ли сегодня новичку изучать C/C++?

    gbg
    @gbg
    Любые ответы на любые вопросы
    И так, случайные чуваки из интернета, перед вами человек, о знаниях, умениях, навыках и способностях вы ничего не знаете.

    И он спрашивает вас - а стоит ли мне заниматься X?

    НУ ОТКУДА МЫ ЗНАЕМ, стоит ли вам заниматься X? Вот я программирую уже больше 20 лет, 16 из них я программирую на C++, 14 - получаю за это зарплату в виде пяти, а потом и шестизначной суммы

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

    Вам этот ответ как-то поможет? Особенно если у вас нет желания углубленно ковыряться в тонкостях архитектуры вычислительных систем и радоваться лишним выжатым из процессора миллисекундам?

    Если у вас есть желание работать типа в айти 5/2 с 9 до 18, получать стабильные 90к рэ в месяц - есть более "легкие" пути.

    Чем грозит неправильный выбор при высокой зарплате? Размазыванием слез и других жидкостей по хабру в духе "ребята, мне 25 годиков, на мне жена, дите, ипотека, я получаю три штуки баксов в месяц, но я совсем выгорел, у меня депрессия, тревога, импотенция, жена говорит, что я эмоционально холоден к ней, изменяет и грозит разводом...

    КАКОГО ПСИХОТЕРАПЕВТА МНЕ ВЫБРАТЬ, ШТОБ ПОМОХ?"
    Ответ написан
    4 комментария
  • Как программисту отдыхать и организовать распорядок дня?

    @podde
    самый младший сисадмин
    Не вините себя. У вас объективно очень много времени уходит на дорогу.
    Совершенно серьёзно думаю, что в такой ситуации надо попробовать поговорить с руководителем на предмет хотя бы частичной (пару раз в неделю) удалённой работы. А лучше попробовать вообще выпросить удалённый режим.
    Если нет – пробовать искать другую работу (поближе к дому или удалённую).
    Ну, действительно, по пять часов в день на дорогу – это не дело.
    Ответ написан
    Комментировать
  • Почему id модели не меняется при удалении другой модели в django?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Вся суть идентификаторов в том, что они неизменны. Чревато было бы, если бы статьи "упорядочивали свои идентификаторы".
    Ответ написан
    Комментировать
  • Что это за конструкция в моделях django?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Стоит выучить Python прежде, чем браться за написанный на нём Django.
    Ответ написан
    4 комментария
  • Объясните, плиз зачем нужен react и vue?

    Ответ на вопрос "почему" заключается в одной емкой фразе: потому что сложно синхронизировать интерфейс и состояние.

    Представьте, что у вас есть простой UI какого-нибудь ToDoApp. Вам всего-то нужно сделать так, чтобы при вводе новой задачи она появлялась в списке, а при нажатии на крестик напротив удалялась бы. Проще простого!

    Но когда начнете решать проблему на нативном JS или на б-гомерзком jQuery, вы столкнетесь с необходимостью писать очень много шаблонного кода. Прежде всего на обслуживание DOM. Найти элемент, вставить элемент, добавить элементу класс, атрибут... в итоге у вас получится портянка на десятки строк для такой элементарной задачи, а ведь мы еще не добавили много кульных штук, без которых ToDoApp совсем не ToDoApp, как-то: возможность создавать разные списки, расписания, галочка, чтобы зачеркивать задачу и т.п. С реализацией всего этого ваша простыня будет расти, вы будете в ней путаться.

    На этом этапе вы можете начать велосипедить. Писать какие-то утилиты для работы с DOM. Разделите index.js на несколько файлов, сообразно DDD или хотя бы единой ответственности. Допустим даже, что вашим приложением внезапно стали пользоваться, у вас куча бизнес-идей. Вы начинаете наваливать фичи, структура становится все запутаннее, кода становится все больше, а еще приложение начинает тормозить. Вы проводите небольшой анализ и понимаете, что проблема в излишне частом обращении к DOM - вы дергаете его на каждый чих, ведь с jquery это так просто! И что делать? Писать еще один велосипед, чтобы обновлять DOM пакетно? А как отслеживать изменения в данных с сервера? Это ж сколько работы!

    К счастью, все вышеописанное, и даже гораздо больше, уже решено в Google, Facebook, а также некоторыми талантливыми энтузиастами. И у нас есть Angular, Vue, React, Svelte, которые предлагают вам возможность создавать быстрые, поддерживаемые приложения с минимумом шаблонного кода и продуманной архитектурой.
    Ответ написан
    Комментировать