Задать вопрос
  • Умный дом в готом доме - на чем лучше сделать?

    Shi
    @Shi
    Если нужно сделать один раз, надежно, и не переживать за работоспособность - Crestron. Если хочется постоянно копаться в коде и менять дешевые датчики - тогда что угодно другое )))

    Только вот в готовом доме будет реальная сложность. "Умный дом" требует серьезного проектирования на стадии постройки/ремонта помещения, нужно тщательно все продумать. А когда нет возможности протянуть лишний кабель - так или иначе получится баловство.
    Ответ написан
    Комментировать
  • Умный дом в готом доме - на чем лучше сделать?

    Умный дом начинается от миллиона за начинку. А вы хотите за копейку канарейку что бы и дёшево и без Rasperry Pi и баз экстрима. А стойку серверную и сервер вы закладываете в цену? Это уже тысяч на 150 выйдет.
    Ответ написан
    Комментировать
  • Как отцентрировать изображение?

    letehaha
    @letehaha
    Вникаю вo front-end
    Я конечно хз, но почему бы просто не зафлексить?)

    Ыыыы
    Ответ написан
    2 комментария
  • Лучшая практика для оформления комментариев в HTML, CSS?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Хочется также добавить к ответу Сергей , что в долгоживущих проектах может оказаться очень не лишним из комментариев css вроде таких:
    // @name Button
    // @description Your standard form button.
    // 
    // @state :hover - Highlights when hovering.
    // @state :disabled - Dims the button when disabled.
    // @state .primary - Indicates button is the primary action.
    // @state .smaller - A smaller button
    // 
    // @markup
    //   <button>This is a button</button>

    генерировать человеко-дизайнеро-понятные стайлгайды со всеми компонентами, которые у вас есть (небольшой личный опыт показывает, что можно отдельные компоненты верстать и сразу смотреть на них в этом стайлгайде - grunt/gulp в помощь, а потом уже вставлять их в реальные страницы). В результате можно спустя некоторое время с помощью одного взгляда вспомнить что происходит, какие у вас вообще компоненты есть и как они выглядят - сразу с примерами html для них - и быстро что-то доделать / добавить / убрать.
    Ответ написан
    1 комментарий
  • Сколько проработает компьютер без радиатора?

    alsopub
    @alsopub
    Поспешишь - людей насмешишь.
    UPD. Видео по теме - https://www.youtube.com/watch?v=AfRfm1_cP-E
    Ответ написан
    Комментировать
  • Сколько проработает компьютер без радиатора?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Он перегреется и выключится, хотя сдохнуть не должен, весьма маловероятно.
    Разве что совершенно без нагрузки - тогда может немного поработать.
    Ответ написан
    3 комментария
  • Как проверить поддерживает ли браузер calc()?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Ответ написан
    Комментировать
  • Что нужно подучить за год, чтобы устроиться в среднею веб-студию или уйти на фриланс?

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

    dom1n1k
    @dom1n1k
    Единственный адекватный вариант - пункт в договоре (так делает например САЛ).
    Если фрилансер - можно попробовать устные договоренности (но понятно, что клиент в любой момент может передумать - и это его право).
    А за все ужимки с потайным функционалом надо отбивать руки.
    Ответ написан
    1 комментарий
  • Как реализовать подобные select'ы?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    верстаешь от руки че. тут ничего сложного нет. чек или радиобоксы и label для них.
    Ответ написан
    Комментировать
  • Почему JavaScript подключают перед закрывающим тегом body?

    @artemsee
    Браузер рендерит страницу сверху вниз, в случае когда скрипты располагаются в теге <head> рендеринг останавливается для того, что бы браузер скачал эти скрипты и затем продолжает работу, для некоторых сайтов эта задержка чувствительная, в таком случае предпочитают сначала вывести контент сайта, а затем подгрузить скрипты.

    Так же существует еще один кейс, правда не очень правильный, когда какая-либо функция скрипта, работает с DOM-элементами сайта. Когда, его подключают сверху эта функция будет пытаться обратится к DOM-элементу который еще не отрендерил браузер, что вызовет ошибку. На примере jQuery это обычно решается с помощью обертки функции в $(document).ready(), можно отказаться от этой обертки, перенеся подгрузку скрипта в самый конец страницы, это гарантирует нам, что DOM будет отображен когда дело дойдет до загрузки скрипта.
    Ответ написан
    3 комментария
  • Почему JavaScript подключают перед закрывающим тегом body?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Браузер останавливает парсинг страницы, когда встречает тег script. Поэтому, чтобы пользователь увидел контент как можно раньше, подключение скриптов откладывают на самый последний момент.
    Принципы работы современных веб-браузеров
    Ответ написан
    3 комментария
  • Как защитить свою верстку от рипа?

    bingo347
    @bingo347
    Crazy on performance...
    Не работать без предоплаты минимум 50% и не цепляться за таких вот заказчиков
    (в голове мысли "что то тут не чисто)
    абсолютно правильные мысли
    Даже если Вы защитите свою работу от "угона", велик риск что просто проработаете за бесплатно, а Ваш заказчик обломавшись с Вами пойдет искать себе другую жертву, ибо сроки у него не жмут, так как когда сроки жмут заказчики готовы к предоплате не то что 50%, а даже 120% (20% - надбавка за переработки)
    Ответ написан
    12 комментариев
  • Как семантически верно: ul li или ul li p?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Если это действительно элементы списка, то параграф там не нужен, хотя и разрешён спецификацией.
    Ответ написан
    Комментировать
  • Где хранятся данные сессий PHP?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    По-умолчанию, данные сессии хранятся в файлах и явно читаются в оперативную память во время выполнения скрипта. Место хранения можно изменить, реализовав собственный SessionHandler, но нужно понимать, что "в оперативной памяти" - понятие растяжимое и разделяемой памяти у php нет.
    Почитайте документацию, там всё подробно описано.
    Ответ написан
    1 комментарий
  • Как проверить наличие в строке слеша?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Возвращает позицию, в которой находится искомая строка, относительно начала строки haystack (независимо от смещения (offset). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
    Возвращает FALSE, если искомая строка не найдена.

    php.net/manual/ru/function.strpos.php
    Ответ написан
    Комментировать
  • Портфолио для upwork из локальных проектов?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Лучше всего - положить "живой" работающий проект на хостинг.
    2. Как вариант: заснимите ролик работы с Вашим проектом и положите на Youtube.
    3. Если код не секретный - положите проект на GitHub.
    Ответ написан
    Комментировать
  • Нужно ли "IMG" оборачивать в тег "P"?

    sadisme
    @sadisme
    font-size:30rem
    Если уж оборачивать, то лучше в figure и дополнить текстом
    Ответ написан
    1 комментарий
  • Рано ли еще использовать функцию calc() в CSS?

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

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Обычно это делается в отдельном методе, наподобие Save.

    У пользователя, которого нет в базе, $this->id будет нулевым.

    И для загрузки данных лучше сделать отдельный метод - Load.

    public function __construct($id = NULL)
    {
      $this->id = $id;
      $this->Load();
    }
    
    public function Load()
    {
      // идентификатор не указан, загружать данные не нужно
      if (!isset($this->id) || (int)$this->id == 0)
      {
        return false;
      }
    
      // указан идентификатор, загружаем данные в текущий экземпляр класса
      $mysqli = db_connect();
    
      $req = 'SELECT u.ID, u.name, u.age, u.city_id, c.city_name FROM users AS u '.
             'INNER JOIN cities AS c ON (c.city_id = u.city_id) '.
             'WHERE u.ID = '.$this->id; // опасно так передавать в запрос данные
    
      $res = $mysqli->query($req);
    
      if ($res !== false){
        if ($res->num_rows == 1 )
        {
          // смысла в цикле нет, ожидается ведь одна строка данных
          while ($row = $res->fetch_assoc())
          {
            $this->id = $row['ID'];
            $this->username =  $row['name'];
            $this->city_name = $row['city_name'];
            $this->city_id = $row['city_id'];
            $this->age = $row['age'];
          }
        }
        else
        {
          return false;
        }
      }
      else
      {
        return false;
      }
    }
    
    public function Save()
    {
      $sql = '';
      $params = [];
    
      if (!isset($this->id) || (int)$this->id == 0)
      {
        // запрос на добавление данных в базу
        $sql = 'INSERT INTO users (name, city_id, age) VALUES (?, ?, ?)';
        // параметры запроса
        $params = [$this->username, $this->city_id, $this->age];
      }
      else
      {
        // запрос на обновление данных в базе
        $sql = 'UPDATE users SET name = ?, city_id = ?, age = ? WHERE ID = ?';
        // параметры запроса
        $params = [$this->username, $this->city_id, $this->age, $this->id];
      }
    
      // код выполнения запроса
      // не могу быть уверен в коде, давно не писал и проверять лень
      // должно быть что-то типа такого:
    
      $mysqli = db_connect(); // лучше сделать отдельный метод для создания и закрытия соединений
    
      // подготавливаем запрос
      $s = $mysqli->prepare($sql);
    
      // выполняем запрос с указанными параметрами
      $s->execute($params);
    
      // тут еще неплохо бы закрыть все соединения :-)
    }

    Можно пойти дальше и сделать базовый класс, который будет содержать готовые методы Load и Save.
    Либо сделать отдельный класс, который будет получать данные и заполнять экземпляры классов этими данными, сохранять и удалять данные. В таком случае классы таблиц (сущности) будут просто описывать структуру данных в базе и не будут выполнять никаких действий. Этот вариант мне нравится больше, т.к. он чище (проще) и более гибкий.

    Придется придумать, как сопоставлять данные, если имена свойств не соответствую именам полей в базе. Скорее всего интерфейсы нужно будет использовать. Также учесть свойства, которые не определены в базе (которые следует игнорировать).

    Для работы со структурой классов потребуется использовать Reflection.
    В общих чертах примерно следующим образом:

    // создаем экземпляр класса User
    $instance = new User();
    
    // получаем информацию об экземпляре класса
    $r = new \ReflectionClass($instance);
    
    // получаем список публичных свойств
    $propeties = $r->getProperties(\ReflectionProperty::IS_PUBLIC);
    
    // перебираем все свойства
    foreach ($propeties as $property)
    {
      // получаем имя свойства
      $propertyName = $property->getName();
      // получаем значение свойства
      $propertyValue = $property->getValue();
      // и далее можно использовать полученную информацию
      // для формирования динамических запросов к базе
    
      // полученные из базы данные можно передать в нужные свойства
      $property->setValue("значение из базы");
    }

    Готовое решение найти будет проще :-)
    Ответ написан
    1 комментарий