• Почему функция возвращает не результат ajax запроса, а пустой результат?

    @Hedy
    AJAX запрос - асинхронная функция, вы должны использовать callback а не возвращать значение. Добавьте в функцию apiSend еще 1 параметр для callback функции и укажите ее в "success".
    Ответ написан
    1 комментарий
  • Как расширить обьем оперативной памяти на компьютере до 10 Террабайт (скорость не важна)?

    @ralaton121
    А как этот софт вообще где-то работал????
    Вы используете софт из центра ядерных исследований в Цюрихе?

    Вряд ли у вас получится, так как вы близки к лимиту (так как вы не указали ОС, то предположу, что это defaultOS):
    https://software.intel.com/en-us/articles/memory-l...
    https://msdn.microsoft.com/ru-ru/library/windows/d...

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

    Но вообще-то приложения, которым реально требуются такие объемы оперативки - разрабатываются особым образом и запускаются не на всяких дистрибутивах ОС, а только на определенных.
    Ответ написан
    1 комментарий
  • Где искать middle/senior backend программиста?

    TheTalion
    @TheTalion
    Я так понял, вам не просто senior backend нужен, а senior backend + senior architect?
    Таких людей с горящими глазами нет В ПРИНЦИПЕ.

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

    У вас вариант только один - искать финансирование. Стартапы, зачастую, дико скучная для обучения сфера. Это не создание игр, где местами весело.
    Ответ написан
    9 комментариев
  • Почему MySQL в виртуалке работает на порядок быстрее, чем на чистой ОС?

    @Wexter
    Потому что гипервизор кеширует дисковые операции виртуалки в памяти
    Ответ написан
  • Отобразить текст по таймеру, чтобы клиенту не было видно в коде?

    IgorBee
    @IgorBee
    JS,VBS,3D.Web с 07.2015
    Вы хотели без единой строчки кода?
    получите на CSS.


    • У нас изначально установлена видимость 0% (то есть элемента нашего не видно)
    • Затем у нас стоит таймер анимации 10 секунд который дает видимость через 10 секунд.
    animation: clock  10s both ; /*both -нужен для сохранения css правил после проигрывания анимации   */
      opacity:0;


    Код с HTML текстом

    926.gif?extra=CwH9ke0YXY30uxVrxc-G0dPRIDP.S уточните ,
    1.Вы хотите чтобы было просто без JS?
    2.или вы хотите чтобы было без JS а ещё чтобы этого текста hello world не было видно в html?

    Если 2-й варинат то можно через content :before вставлять текст.


    Вот код без HTML текста
    Этот код вставляет "hello World" через 10 секунд.
    1. Без использования JS
    2. в HTML нету сначала этого текста,он появится только через 10 сек.
    Ответ написан
    Комментировать
  • Имеет ли юридическую силу запрет на парсинг сайта?

    @nirvimel
    Любые дополнительные юридические ограничения (сверх того, что требует государственное законодательство) можно навязать пользователю лишь одним способом - путем ДОБРОВОЛЬНОГО (с обеих сторон) заключения договора. Это обычно реализуется в виде пользовательского соглашения при регистрации на сайте. При этом одна сторона (сайт) обязуется предоставить какие-то услуги (например, доступ к некоторой информации), в то время как другая сторона (пользователь) добровольно принимает на себя какие-то ограничения (например, не пользоваться никакими автоматизированными средствами для извлечения, предоставляемой ему, информации). Это соглашения вступает в юридическую силу с момента нажатия на кнопку "Принимаю условия" (см. акцепт).
    Поскольку с анонимом в принципе невозможно заключить никакой договор (очевидно), то на, не прошедшего регистрацию пользователя, невозможно возложить никакие ограничения (сверх существующих в законе).

    Но все вышеописанное касается только СПОСОБА, которым пользователь взаимодействует с сайтом (автоматизированный/ручной/ножной/и.т.д.). Что касается самого контента, который пользователь потребляет, то на него распространяется все нормы авторского права (независимо от способа, которым он получен). Поскольку авторское право (как государственный закон и международное соглашение) распространяется на всех без исключения (в том числе и на анонимов), то не требуется заключать с пользователем никакого договора (и заставлять проходить регистрацию). Достаточно упомянуть (желательно на видном местом) запрет на использование данного контента в любых целях, кроме личного ознакомления. Это допустимо на основании того, что владелец исключительных прав на контент может определять любые ограничения на его использование. Что это дает: контент, собранный автоматизированными средствами, в дальнейшем не может быть использован никак без нарушения закона о защите авторских прав (это серьезнее, чем нарушение пользовательского соглашения). Это полный юридический тупик для того, кто захочет заняться парсингом (пусть даже само по себе это будет законно).
    Ответ написан
    2 комментария
  • Какой программой воспользоваться что-бы найти момент изменения кадра в видео файле на 48 часов?

    Moskus
    @Moskus
    Запустить VLC из командной строки, скормив ему нужный файл и добавив опции --video-filter=motiondetect для включения фильтра детектора движения, по вкусу - --rate= для скорости воспроизведения, ну и -vv >logfile.txt - для вывода сообщений в текстовый лог, который потом предстоит изучить.
    Ответ написан
    5 комментариев
  • Повторное использование премиум шаблона вордпресс?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Не совсем нарушает, если быть точным. По хорошему, WordPress ведь идет с лицензией GPL, которая в свою очередь требует чтобы все, что использует WP также наследовало лицензию GPL, даже если вы берете деньги за свой продукт. А GPL сама по себе позволяет делать с продуктом что угодно.

    Но в реальности там черт ногу сломит. К примеру, есть бесплатный WP Sync DB. Ребята из Delicious Brains разработали платный плагин WP Migrate DB Pro, а потом кто-то его купил и выложил бесплатно. Потому что лицензия позволяет. Это конечно дико выбесило ребят из Delicious Brains (оно и понятно), но юридически им не удалось что-то сделать. К тому же, этот интересный человек внес в плагин некоторые изменения, и это уже стало деривативом. Вот такой казус.
    Ответ написан
    3 комментария
  • Как бы вы сделали бэкенд для такого приложения?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    «В радиусе 100 метров» это круг, вписанный в квадрат 200x200 метров.
    Поэтому выбрать только те, что находятся по X-координате в +-100 метрах. Из них только те, что по Y-координате в +-100 метрах. Из этой выборки проверить каждый на расстояние от точки центра.

    Если в БД сделать индексы по X и Y координатам, такая выборка будет быстрой.

    Понадобится вычислять координаты углов квадрата, переводя широту, долготу в метры (+–100) и обратно в широту, долготу. Поможет формула.

    Можно решить задачу целиком в MySQL – в презентации есть пример запроса и его дальнейшей оптимизации.
    Ответ написан
    1 комментарий
  • Когда лучше использовать PDO::quote, а когда PDO::prepare?

    neuotq
    @neuotq
    Прокрастинация
    Это совершенно разные вещи. quote просто экранирует символы(в соответствии с требованием подключения) и заключает строку в кавычки(многие это забывают).
    prepare совершенно иная история, там возвращается специально сформированный объект, которые устойчивей к атакам, требует меньше ручного труда, лучше кэшируется всякими автоматическими штуками, короче будет быстрее и безопаснее в случае построения запросов с переменными.
    А PDO::quote полюбили те кто использовал php давно и не захотел идти дальше и полноценно изучать PDO, используя свои устаревший навыки, для них это просто замена mysql_real_escape_string.
    Ответ написан
    1 комментарий
  • Правильно ли я использую делегирование?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    так то User у вас не модель, а репозиторий:
    namespace Repository;
    
    class User {
    
        protected $db;
    
        public function __construct(Adapter $db) {
            $this->db = $db;
        }
    
        public function getUserById($id) {
    
            $sql = "SELECT * FROM user  WHERE id = :id";
            $stmt = $this->db->prepare($sql);
            $stmt->bindParam(':id', $id, PDO::PARAM_INT);
    
            $stmt->execute();
    
            return $stmt->fetch();
        }
    
        public function getImageById($id) {
    
    
            $sql = "SELECT  IF(image IS NULL or image = '','no_image.png',image) as image  FROM `user` WHERE id = :id";
    
    
            $result = $this->db->prepare($sql);
            $result->bindParam(':id', $id, PDO::PARAM_INT);
            $result->execute();
    
            return $result->fetchColumn();
        }
    
        public function updateImageById($imageName, $id) {
    
            $sql = "UPDATE user SET image = '$imageName' WHERE id = $id";
    
            return $this->db->query($sql);
        }
    
    }

    для работы с изображениями я предпочел бы сервис:
    namespace Service;
    
    class Image {
    
        protected $userRepo;
    
        function __construct(Repository\User $userRepo) {
    
            $this->userRepo = $userRepo;
        }
    
        public function UploadImage(array $image) {
    
            $usersImage = $image['userfile']['tmp_name'];
    
            $imageName = $image['userfile']['name'];
    
            if (is_uploaded_file($image['userfile']['tmp_name'])) {
    
                move_uploaded_file($usersImage, $_SERVER['DOCUMENT_ROOT'] . "/template/images/users/" . $image['userfile']['name']);
            }
    
            return $imageName;
        }
    
        public function updateImage(array $image, $id) {
            if($imageName = $this->uploadImage($image, $id)) {
                $this->userRepo->updateImageById($imageName, $id);
                return true;
            }
        }
    
    }

    а теперь самое интересное контроллер:
    class UserController extends BaseController {
    
        protected $imageService;
        protected $userRepo;
    
        function __construct(Service\Image $imageService, Repository\User $userRepo) {
            $this->imageService = $imageService;
            $this->userRepo = $userRepo;
        }
    
        public function actionProfile($id) {
    
            if (isset($_POST['submit_photo'])) {
    
                $this->imageService->updateImage($_FILES, $id);
            }
    
            return $this->render('user/profile.php', [
                        'user' => $this->userRepo->getUserById($id),
                        'image' => $this->userRepo->getImageById($id)
            ]);
        }
    }
    Ответ написан
    2 комментария
  • Правильно ли я использую делегирование?

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

    По коду есть следующие замечания/предложения по улучшению:
    - Делегирование подразумевает передачу некоторого функционала другому объекту. По сути, когда вы создали объект класса и выполнили метод этого объекта - вы уже делегировали некую функциональность. Например в контроллере задачу по выборке юзера вы делегировали объекту класса User. В случае же с классами User и Image, происходит внедрение класса Image в User (привет Dependency Injection), но дальше Image никак не используется классом User. Т.е. происходит Dependency Injection, но нет делегирования. На том этапе, который я сейчас вижу, я бы не стал внедрять Image в User. Сейчас это выглядет как задел на будущее, но любой опытный программист подтвердит, что композиция, созданная на будущее - ненужная композиция.
    - Глядя на структуру классов, мне не совсем понятно чем они занимаются. Вроде как класс User и Image должны хранить информацию о пользователе и картинке (об этом нам говорит $id в конструкторе). Но в тех же классах есть логика по выборке данных из базы. По-хорошему выборкой должны заниматься другие классы. Лучше разделить задачи выборки и хранения на 2 разных класса. Я очень рекомендую вам ознакомиться с паттерном Data Mapper (наример тут designpatternsphp.readthedocs.io/en/latest/Structu... или тут codeinthehole.com/projects/domain-model-mapper-a-p... На мой взгляд, Data Mapper - это то что вам сейчас нужно реализовать чтоб получить чёткую структуру кода и разделение ответсвенности за выбор/хранени.

    По поводу делегирования. Просто старайтесь чтоб ваши классы были как можно меньше. Критерий 1-3 метода на один класс вполне может подойти (помните, что это не золотое правило). Когда у вас появится желание добавить еще один метод в класс A - спросите себя, а нужен ли там вообще этот метод? Может лучше переложить всю ответственность на новый класс B, в который вы будете передавать объект A (или какое-то из его полей), а сам класс B уже проведёт необходимые преобразования/вычисления? Это и будет делегирование в том виде, в котором его ждёт от нас банда четырёх (если вы еще не читали их книгу, то это must read для любого программиста).

    Фух, длинный ответ получился. Надеюсь, что не зря.
    Ответ написан
    3 комментария
  • Разработка web-сервисов – LAMP (Python/Django) vs. MEAN (Node.js)? Или что-то другое?

    1) Мой основной язык Python, на JS больших программ почти не писал. Когда писал на нём больше, то ощущал дискомфорт из-за:
    - отсутствия нормального наследования (хотя сейчас, вероятно, это уже исправлено)
    - трудностей с типами данных и неявными преобразованиями (вот вчера буквально был холивар на Тостере о == и ===)
    - списков, реализованных как переодетые объекты
    - отсутствия из коробки структур данных вроде deque.

    Но это были студенческие поделки.

    2) Python предоставляет больше средств борьбы со сложностью. Наследование, система метаклассов, синтаксический сахар. Хотя бы даже такая штука как property. Он даёт больше возможности инкапсулировать сложность внутри. Ну и на нём действительно очень много разнообразных библиотек. Возьмите хотя бы Django: она умеет автоматически генерировать миграции базы данных. Насколько я знаю, это мало кто умеет делать.

    3) Не думаю, что JS - это язык будущего для бэк-енда. Я бы согласился, если бы вы сказали про Scala или Kotlin, которые куда больше подходят для больших и сложных приложений хотя бы потому, что имеют ещё больше средств борьбы со сложностью, чем Python. Поэтому я смотрю скорее в их сторону для своего будущего профессионального развития, не на JS. Он как-то не очень тянет в сравнении.

    4) Ничто не помешает вам изучить платформу А, затем Б, потом В и так далее; от этого только польза. Может быть, вы через десять лет будете на Quipper - диалекте Haskell для квантовых компьютеров - писать. Но начинать посоветую всё же с Python - чтоб меньше заниматься мазохизмом и больше писать кода.)
    Ответ написан
    2 комментария
  • Подготовленные запросы в yii2?

    qonand
    @qonand
    Software Engineer
    Зачем Вы работает с классом Command? этим Вы только создаете себе трудности... для создания сложных запрос в yii есть класс Query, который прекрасно решает Вашу задачу, например так:
    $query = new \yii\db\Query();
    $query->from('Pages')
        ->leftJoin('categories', ['categories' => 'id_categories'])
        ->where(['status' => 1])
        ->andFilterWhere(['like', 'path', $filter_category]);
    if (! empty($filter_time)) {
        $expression = new \yii\db\Expression('now() - interval :filter_time minute', [
            ':filter_time' => $filter_time
        ]);
        $query->andWhere(['>', 'date_created', $expression]);
    }
    Ответ написан
    Комментировать
  • Настройка https на nginx?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Достаточно следующего:
    server {
        listen              443 ssl http2;
        server_name         домен_здесь;
        ssl_certificate     /путь/к/сертификату;
        ssl_certificate_key /путь/к/ключу;
    
        тут ваш location {}
    }


    Если переадресовывать с HTTP на HTTPS то выше добавляете:
    server {
        listen      80;
        server_name домен_здесь;
        return      301 https://$server_name$request_uri;
    }


    Также рекомендую посмотреть https://mozilla.github.io/server-side-tls/ssl-conf... - он в зависимости от версии Nginx и OpenSSL, а так же ваших предпочтений позволяет подобрать актуальные шифры чтобы поддерживать максимально возможный уровень безопасности.

    Я себе в /etc/nginx/conf.d/tls.conf положил достаточно строгие настройки без старых протоколов и слабых шифров, которые максимально безопасны, но работают лишь в актуальных версиях браузеров (IE9-10, древние Firefox, Chrome и Safari могут не работать совсем):
    ssl_session_timeout       1d;
    ssl_session_cache         shared:SSL:50m;
    ssl_session_tickets       off;
    
    ssl_dhparam               /etc/ssl/dhparam.pem;
    
    ssl_protocols             TLSv1.2;
    ssl_ciphers               ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    
    add_header                Strict-Transport-Security "max-age=31536000;";
    
    ssl_stapling              on;
    ssl_stapling_verify       on;

    Это достаточно минималистичный конфиг без мишуры и без правок родных конфигурационных файлов Nginx (упрощает обновление). dhparam.pem вам придется сгенерировать, рекомендую 4096bit, как - найти очень легко.

    Указанных опций более чем достаточно, просто поищите что каждая из опций значит и подкорректируйте по вкусу.
    Ответ написан
    Комментировать
  • NodeJS, Nginx и SSL. Нужно ли между бакендом на node и nginx устанавливать ssl соединение?

    sim3x
    @sim3x
    На одном сервере - лучше использовать сокет
    На нескольких - стоит использовать шифрование, даже на самоподписанных сертификатах
    Ответ написан
    3 комментария
  • Где найти материалы по углубленному изучение WP?

    @Gregpopov
    Full stack web developer
    Устанавливаете XDebug, ставите брейкпоинт на конечной точке вызова приложения, и изучаете пошагово ядро. Так появится самое лучшее понимание алгоритмов работы.
    Ответ написан
    2 комментария
  • Вертикальное многоуровневое меню, при наведении на меню, затемнение заднего фона, как сделать?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    .sky-mega-menul:hover {
      box-shadow: 0 0 0 9999px rgba(0,0,0,0.5);
    }


    https://jsfiddle.net/3vL69tq9/

    Только еще разобраться с моментом появления и стилями выпадающего блока, но суть должна быть ясна.
    Ответ написан
    1 комментарий
  • Как парсить SRV запись с помощью PHP?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Комментировать
  • Как парсить SRV запись с помощью PHP?

    BuriK666
    @BuriK666
    Компьютерный псих
    как-то так
    $record = '_xmpp-server._tcp.peterhost.ru SRV 100 0 5269 xmpp-s.peterhost.ru.';
        $data = [];
        list($service, $data['type'], $data['priority'], $data['weight'], $data['port'], $data['target']) = explode(' ', $record);
    
        list($data['service'], $data['proto'], $data['name']) = explode('.', $service, 3);
        var_dump($data);

    array(8) {
      'type' =>
      string(3) "SRV"
      'priority' =>
      string(3) "100"
      'weight' =>
      string(1) "0"
      'port' =>
      string(4) "5269"
      'target' =>
      string(20) "xmpp-s.peterhost.ru."
      'service' =>
      string(12) "_xmpp-server"
      'proto' =>
      string(4) "_tcp"
      'name' =>
      string(12) "peterhost.ru"
    }

    https://ru.wikipedia.org/wiki/SRV-%D0%B7%D0%B0%D0%...
    Ответ написан
    Комментировать