• Зачем и каким видом шифруют?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вы путаете причину и следствие.
    Покажу на примере: Есть сайт любителей кошек, каждый будет грузить файл mykitty.jpg и файлы будут затираться.
    Что бы этого избежать используют следующий прием:

    1. Загружают файл
    2. Создают запись в БД, где id = uuid или guid
    3. Перемещают временный файл в место постоянного хранения переименовывая его в соответствии с id

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

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Если у вас статичный сайт или собственный интернет магазин - вам это не нужно.
    Имена файлов иногда рандомизируются, а иногда называются очень даже осмысленно для того, чтобы файлы с одинаковыми названиями не заменили друг друга. Чаще всего, это используется тогда, когда пользователи могут загружать файлы.
    Ответ написан
    Комментировать
  • Зачем и каким видом шифруют?

    Zoominger
    @Zoominger Куратор тега Веб-разработка
    System Integrator
    Никто не шифрует. Делают случайное имя, чтобы имена не повторялись и были стандартизированы.
    Ответ написан
    Комментировать
  • Почему не работает DNS в Debian 10?

    @vitaly_il1
    DevOps Consulting
    исправьте

    IN NS srv-dc-0001.

    на

    IN NS srv-dc-0001.mydomain.loc.
    Ответ написан
    7 комментариев
  • Прием платежей на сайте с карты (банк Тинькофф). Как реализовать?

    @alex1478
    Так делать нельзя, вы быстро получите бан карты в Тинькофф. А если звёзды сойдутся, ещё и в полиции придётся доказывать что люди вам сами вводили свои карты, а не вы использовали свой счёт для темных дел.
    Как я понимаю вы хотите принимать платежи с карт физиков на карту физика для обхода налоговой, это не законно, я думаю вы это сами понимаете.
    Правильно сделать так: Открыть ИП, заключить договор с платёжным шлюзом, в приложении показывать форму оплаты от шлюза через webview,
    Ответ написан
  • Почему зависает сайт при свободной памяти и процессоре?

    @MIXANIX Автор вопроса
    Проблему решил.
    Дело было в Bitrix CMS, а именно нашел функцию SessionTable::lock, которая шлет запросы GET_LOCK("***", 60) в базу.
    Как назло в документации о ней мало что написано. Не понятно, когда она срабатывает, но у меня подозрение что когда число одновременных запросов к MySQL подбирается к лимиту.
    В результате получаем блокировку сайта на 1 минуту и пустые логи.
    Часть запросов к БД которые шли через Битрикс прописал на чистом PHP и зависания прекратились.
    Всем спасибо!
    Ответ написан
    Комментировать
  • Какую литературу посоветуете по тестированию?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    TDD Кента Бека - помогает понять, откуда взялась популярная архитектура фреймворков тестирования (ссылка) - читала, мне частично помогла.
    xUnit test patterns - не читала, но все советуют - тоже объясняет принципы написания тестов без четкой привязки к технологии (ссылка).
    По разнице в подходах тестирования - существует пирамида тестирования, но на практике мне не всегда понятно, где границы - приемочные и UI тесты ориентированы на use cases - т.е. на путь - в какой последовательности юзер проходит фичу и какой результат ожидает на каждом шаге (заходит на страницу, заполняет данные, ждет ответа; программа-клиент получает токен, шлет запрос, ждет респонс), а модульные тесты ориентированы на проверку кода как изолированных элементов - т.е. тестирование происходит отдельно от общего процесса, в котором этот код используется, чтобы можно было локализовать проблему с максимальной точностью.
    PHPUnit я изучала только по документации, просто прошлась по всем примерам, считаю приемлемым вариантом изучения. Лучше сначала хорошо понять PHPUnit, а потом учить Codeception. Учиться, как мокать и стабать, можно уже на конкретных задачах, по мере надобности.
    Ответ написан
    1 комментарий
  • Почему PHP теряет популярность?

    @Kirill-Gorelov
    С ума с IT
    Я был в обсуждениях с некоторыми парнями на счет скорости и удобства и бла бла бла работы на php.

    Мне один парень сказал, что php скоро сдохнет. Но ему ответил второй программист:
    Он уже дохнет столько лет, что уже выпустили "предсмертную"(сарказм) 7 версию(на момент обсуждения). А сейчас уже готовят 8 версию, которая будет еще быстрее.

    И мое мнение.
    Php не умрет никогда. Потому что всегда будут две стороны халявщиков.
    1. Которая хочет быстро что-то выучить и на этом заработать.
    2. Те кто хочет быстро и дешево заказать сайт.
    И вот эти две стороны будут генерировать, назовем это, спросом на этот язык.
    Конкретно сейчас я не беру в обсуждения профессиональные сайты, которые действительно крутые и действительно достойные внимания и людей которые посвятили этому языку львиную долю своего времени.
    Ответ написан
    8 комментариев
  • Почему PHP теряет популярность?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Никогда не ведитесь на уговоры разрабатывать какой то веб проект на каком то экзотичном языке, например Питоне или Яве, в результате вы получите костыльный долгострой и дефицит программистов которые будут готовы над ним работать.
    Это как в моде - есть всякое эпатажное дерьмо для показов на подиуме, а есть повседневные джинсы с рубашкой, все любят обсуждать эпатаж но носят джинсы.
    Ответ написан
    26 комментариев
  • Почему PHP теряет популярность?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    PHP не мода, php - классика, а классика никогда не умирает. Если умрет php, то умрут все остальные языки backend разработки потому что появится что-то такое, что сможет в разы превзойти пхп в простоте, скорости и удобстве, на данный момент что джава, что питон, что руби +- одинаковые, каждый подходит для своих целей. Тот же питон выбирают из-за простоты интеграции нейронных сетей, но если говорить не о узких, а о главных параметрах (функционал, скорость и тд) все популярные бэк языки более или менее одинаковые смотрите те же сухие графики.
    А о уменьшении вакансий - глупость несусветная. трын тут приведена статистика за 2018 год и обоих графиках по вакансиям лидирует в сравнении с java/python PHP, при том на первых двух пишут как бэкэнд, так и миллион других штук. А на втором графике и вовсе пхп опережает js (единственный язык в самой популярной сфере разработки).

    А вот если речь идет о реально крупных компаниях (amazon, google...) там как раз предпочитают python из-за выше упомянутой простоты интеграции нейросетей, а java из-за стабильной поддержки сверх высоких нагрузок.

    Меньше слушайте диванных экспертов, пхп предрекают смерть с 00-х годов, что то он слишком долго дергается для мертвеца.
    Ответ написан
    1 комментарий
  • Карта мира с детализацией до города и привязкой своих меток?

    @ber_enot
    Веб-разработчик, Vue.js / Node.js
    Посмотрите на библиотеки:
    Leaflet
    OpenLayers

    Источник карт можно задать самому (Яндекс.Карты, Google Maps, OSM и любые другие).
    На карту можно добавлять метки, полигоны, попапы и вообще всё, что душе угодно.

    PS. Работал с обеими библиотеками, по своему опыту рекомендую Leaflet - меньше кода и в целом понятнее.
    Ответ написан
    1 комментарий
  • Где можно пройти хорошие онлайн курсы по DevOps?

    @Dmitry_Svetlov
    В школу DevOps сходите. Хорошо там учат. У них бесплатные курсы с преподавателями есть.
    https://devops-school.ru
    Ответ написан
    Комментировать
  • Где взять реальные примеры кода использования ооп в веб-сервисах?

    @netcore
    Есть группа людей которые не понимают в программировании ничего, но у них есть идея, понимание как работает продукт, и деньги (но это вторично)
    Назовем эту группу людей бизнес

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

    Сначала бизнес описывает боль которую решает продукт
    В чем боль? Бизнес раньше продавал газеты, а теперь хочет свою интернет газету.
    1. Они не хотят тратить деньги на печать, а просто делать посты новостей и статьи.
    2. Они не хотят платить деньги на транспортные расходы развозить газеты, а делать рассылки на электронную почту
    3. Они хотят получать обратную связь (комментарии)
    этого достаточно для примера.

    В идеале бизнес заказывает дизайн. Как это должно выглядеть.
    В идеале есть еще и пордакт менеджер который знает UML, но это влажные фантазии, по этому примем что есть бизнес и есть программист.

    Затем описываются сущности этого продукта и действующие лица в этом продукте
    Что мы можем понять из этого? Какие у нас есть сущности?
    1. пост - новость или статья на сайте.
    1.1. На этом этапе выясняем у бизнеса в чем отличие новости от статьи.
    Бизнес говорит: у новости (например) есть только одна картинка, текст.
    У статьи есть так же текст но картинок может быть несколько, так же не может быть комментариев.
    Бизнес забыл про то что в дизайне есть еще и дата, тут уже додумывает сам программист взглянув на макеты.
    В итоге у нас получается одна абстрактная модель Post и две ее реализующие: Article и News.

    public abstract class Post
        {
            protected Post(string text, int writerId)
            {
                Text = text;
                CreationDate = DateTime.Now;
                WriterId = writerId;
            }
    
            public int Id { get; set; }
            public string Text { get; private set; }
            public DateTime CreationDate { get; private set; }
            //Идентификатор писателя статьи\новости
            public int WriterId { get; private set; }
    
            //Автоматически подтягиваемая из базы модель писателя через ORM по WriterId
            public virtual Writer Writer { get; set; }
    
        }
    
        public class Article : Post
        {
            public Picture[] Pictures { get; private set; }
    
            public Article(string text, int writerId, Picture[] pictures) : base(text, writerId)
            {
                Pictures = pictures;
            }
        }
    
        public class News : Post
        {
            public Picture Picture { get; }
            
            //Массив комментариев к посту
            // private set -- говорит о том что массив инкапсулирован
            // и управлять массивом можно только через метод AddComment
            public List<Commentary> Commentaries { get; private set; }
    
            public News(string text, int writerId, Picture picture) : base(text, writerId)
            {
                Picture = picture;
            }
    
            public void AddComment(Commentary commentary)
            {
                Commentaries.Add(commentary);
            }
        }


    Далее у нас есть ролевые модели и у каждого своя бизнес логика.
    2. Подписчик - получатель новостей. Бизнес хочет что бы каждый зареганый юзер автоматически стал подписчиком. Такого в реальном мире не будет, нельзя, но для примера норм.
    3. Писатель - тот кто пишет статьи\новости.

    Две эти модели отличаются между собой только ролью и наличием у подписчика поля email. По этому приведем вот такие ООП модели

    public abstract class User
        {
            public int Id { get; set; }
            public string Username { get; private set; }
            public string Role { get; private set; }
            
            protected User(string role, string username)
            {
                Role = role;
                Username = username;
            }
        }
    
        public class Subscriber : User
        {
            public string Email { get; private set; }
            
            public Subscriber(string username, string email) : base(nameof(Subscriber), username)
            {
                Email = email;
            }
        }
    
        public class Writer : User
        {
            public Writer(string username) : base(nameof(Writer), username)
            {
            }
        }


    Поле пароль опущено, тут много чего опущено для простоты восприятия.

    3. Комментарий - обратная связь от юзера в посте. При чем хочу заметить от ЮЗЕРА, бизнес говорит что писать могут как и подписчик так и писатель

    public class Commentary
        {
            public int Id { get; set; }
            public string CommentText { get; private set; }
            public int UserId { get; private set; }
            
            public virtual User User { get; private set; }
            
            public DateTime CommentCreationDate { get; private set; } 
            
            public Commentary(int userId, string commentText)
            {
                UserId = userId;
                CommentText = commentText;
                CommentCreationDate = DateTime.Now;
            }
        }


    Вот - хоть и примитивно и немного неправильно (а то щас налетят пет программисты) но мы описали модели, абстрагировали одинаковые поля в абстрактные классы. Инкапсулировали поля и добавили методы которые описывают как работает класс. Инициализация полей происходит только в конструкторах. Работа с полями только с предоставленными для этого методами.

    Прошу прощения что не PHP, но C# тоже C подобный, так что проблем с чтением на уровне моделей быть не должно.

    Одна из функций ООП -- что бы программисты понимали бизнес.
    Ну и человеку прозе описывать поведение реального мира объектами и как эти объекты между собой взаимодействуют.
    Есть целые методологии разработки ПО такие как DDD, где вообще ядро кода пишется на копароративном языке и жестко соблюдаются правила названия моделей и описания алгоритмов бизнес процессов бизнеса. Код получается самодокументированным. Были случаи когда ядро по DDD писали даже на русском, потому что бизнес большой, а новичкам, кто приходил кодить в фирму, было быстрее и проще вкатиться в понимание прикладной практики бизнеса и понять по коду как бизнес устроен на разных слоях.
    Ответ написан
    1 комментарий
  • Почему при объявлении переменной, в любом языке программирования, резервируется весь размер памяти отведённый под тип данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если я просто объявил переменную типа short, то сколько памяти надо под неё выделить? А если записал в неё ноль? А если после этого записал в неё 65535? А где хранить количество выделенной для переменной памяти? И как перевыделять память, если она выделяется в стеке?

    P.S. А как вы представляете себе массив с доступом по индексу, если каждый элемент массива имеет свой размер?
    Ответ написан
    4 комментария
  • Почему при объявлении переменной, в любом языке программирования, резервируется весь размер памяти отведённый под тип данных?

    Stalker_RED
    @Stalker_RED
    Пример с SSD некорректный, все равно что требовать от камаза, например, выпустить грузовик с грузоподъемностью 20кг. Производителю нужен рынок сбыта.
    Тем не менее, небольшие чипы памяти существуют, только никто на них не пишет, что это "SSD".

    Выделение памяти - операция не бесплатная, и кто-то решил, что так будет выгоднее.
    https://randomascii.wordpress.com/2014/12/10/hidde...
    https://habr.com/ru/post/270009/

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

    @parazitl2 Автор вопроса
    Решил проблему как написал Станислав Казанин.

    Выпадающий список, при выборе пункта из которого будет обновляться поле на странице с данными пользователя (id списка например "useridfield") :
    <?php echo $form->field($model, 'user_id')->widget(Select2::classname(), [        
            'data' => ArrayHelper::map(User::find()->all(), 'id', 'username'),
            'language' => 'ru',
            'options' => ['placeholder' => 'Выберите пользователя ...', 'id' => 'useridfield', 'value' => Yii::$app->user->identity->getId(),],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ])->label('Автор заявки'); ?>

    Сам блок на этой же странице, в котором обновляются данные пользователя (id поля, например, "newtry"):

    <div id="newtry">
            <?= $this->render('/user/_userdataview', [
                'model' => Yii::$app->user->identity,
            ]); ?>
    </div>

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

    <?php 
    $script = <<< JS
       
    $('#useridfield').change(function(){
        $.ajax({
            type: "GET",
            url: "/basic_yii/web/user/showuserdata?user_id="+$(this).val(),
            success: function(data) {
                $("#newtry").html(data)
            }
        })
    });
            
    JS;
    $this->registerJs($script);
    ?>

    В скрипте $('#useridfield') - это id поля формы с выпадающим списком (указано в массиве options), $("#newtry") - это id специально отгороженного тегами div поля, которое полностью обновляется при клике на выпадающий список, а по адресу /basic_yii/web/user/showuserdata?user_id= лежит экшен контроллера:

    public function actionShowuserdata($user_id)
        {
            $model = \app\models\User::findIdentity($user_id);
                   
            return $this->renderPartial('_userdataview', [
                'model' => $model,
            ]);
        }


    Надеюсь, это кому-нибудь пригодится =)
    Ответ написан
    Комментировать
  • Как сделать меню для сайта как у Apple?

    uselessmindYEAH
    @uselessmindYEAH
    Frontback cocaine developer
    Делаешь у контейнера меню
    overflow-x: auto;
    overflow-y: hidden;
    Ответ написан
    1 комментарий
  • Как интегрировать PayPal?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Комментировать