• Как закрыть select от выбора через css?

    @robofox
    Можно его скрыть и заменить картинкой. Disabled в прямом смысле через CSS сделать не получится.
    Ответ написан
    Комментировать
  • Как корректно составить ERD?

    @robofox
    Создать таблицы с параметрами декораторов. Например:
    decor_text_params:
    id   product_id   text_value   text_position   text_param1   text_param2
    
    decor_paper_params:
    id product_id paper_type paper_size paper_param1 paper_param2

    В них же будет привязка к продукту. Да, добавится обработка на уровне кода.

    Если хочется обойтись без привязки к коду, можно завести таблицы параметров декораторов.
    decor_params_definition:
    id   decor_id   param_name  param_type  ...
    
    Заполнение:
    1   1   "Цвет бумаги"  "color"
    2   1   "Размер бумаги"   "int"

    В другой таблице хранить значения параметров в виде строк, на уровне кода преобразовывать их к нужным типам.
    Такая структура полезна, если параметры будут постоянно добавляться или изменяться, и они нужны только для отображения. Если с параметрами придется работать в коде, лучше жестко их привязать.
    Ответ написан
    Комментировать
  • Денормальна ли архитектура? Избыточна ли?

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

    Например, зачем делать 2 таблицы (a и b), если у них одинаковый набор полей? Можно сделать одну таблицу с полем ENUM('a','b').

    Если объекты будут добавляться (например "c"), то целесообразней сделать отдельную таблицу связей "пользователь-объект". Если при этом объекты "a", "b" и "c" будут в одной таблице, количество костылей заметно сократится, производительность увеличится (если будут индексы).

    Еще: поле `group` у пользователя NOT NULL. А если пользователь не будет состоять ни в одной группе?
    Ответ написан
    Комментировать
  • Как выбрать из всех таблиц по 1 последней записи ?

    @robofox
    Сначала покритикую структуру базы.
    Динамические таблицы имеет смысл создавать только если у них будут наборы полей, которые нельзя определить на этапе проектирования. И делать это нужно только в крайних случаях.
    В данном случае нужно было создать одну таблицу (id, title, date), в которую добавить поле "table_id", в котором хранить id таблицы. В другой таблице "table_names" хранить эти id + имена таблиц + дополнительную информацию.
    Тогда ответом на вопрос будет один относительно простой запрос с GROUP BY.

    По существу вопроса: придется делать 20 динамических запросов:
    SELECT * FROM table_name1 ORDER BY date DESC LIMIT 1
    , затем объединять ответы в UNION. Это неэффективно и трудоемко.
    Ответ написан
    Комментировать
  • Два роутера в одной сети, как правильно настроить?

    @robofox
    1. Можно сделать NAT: wan второго роутера воткнуть в lan первого. Во второй квартире при этом будет своя локалка, DHCP и полноценный интернет. Настройка очень простая: на втором роутере выставляем ip так, чтобы подсеть не совпадала с 1-й квартирой.
    Например:
    в 1 квартире сеть 192.168.1.1/24
    в 2 квартире сеть 192.168.2.1/24
    Во второй квартире могут начаться проблемы с доступом извне, но если устройства поддерживают uPNP, проблем не будет (а практически все современные устройства поддерживают).

    2. Можно объединить квартиры в одну локалку. Все устройства в обоих квартирах будут в одной подсети, видеть друг-друга, получать DHCP от роутера 1. Для этого второй роутер должен работать как хаб.
    Ответ написан
  • Веб-сайт — законы, стандарты

    @robofox
    Если на сайте нет персональных данных, то никаких стандартов безопасности для него не устанавливается.
    Если есть персональные данные, то действует 152-ФЗ «О персональных данных».

    Насчет «материалов для взрослых» и прочего: на сайте должна быть табличка 18+.
    Запрещенные материалы запрещены.
    Ответ написан
    Комментировать
  • Реализация Following?

    @robofox
    Могу посоветовать вот что:
    Сделать таблицу «пользователь»-«запись»-«время последнего просмотра».
    Когда пользователь заходит в запись, устанавливается текущее время.
    Чтобы получить число новых комментариев, делается запрос: «если дата комментария больше даты последнего просмотра». И т.д.
    Число новых комментариев из всех записей берется так же.
    Ответ написан
    Комментировать
  • Любопытный вопрос из тестового задания?

    @robofox
    $x = print("ok");
    if ($x == 1 && $x==2 && $x==3){
      echo("ok");
    }
    

    Они же не уточнили, что должна отработать инструкция с условием ;)
    Ответ написан
    1 комментарий
  • Сервис статистики ICQ?

    @robofox
    Сервис множественного входа в аську только-только внедряется, поэтому и наработок нет. Копать нужно в сторону существующих ICQ-ботов, есть тонны исходного кода.

    Реализовывать лучше на кросс-платформенном языке. На питоне или руби, например.
    Ответ написан
    Комментировать
  • Залогиниться на Хабре (и др. сайтах) через Python (urllib)?

    @robofox
    Установите себе http-сниффер. Если у вас firefox, рекомендую дополнение HttpFox.

    Как узнать, какой запрос послать для логина:
    Включаете сниффер, логинитесь на сайт(сниффер лучше включать непосредственно в момент логина, чтобы не забивать его лишними запросами), потом смотрите, что браузер передал серверу. Обычно это один POST-запрос, в полях которого можно найти логин и пароль. Такой же запрос нужно посылать скриптом.
    Ответ написан
    5 комментариев
  • Как узнать какой именно PHP скрипт самый "тяжелый" для CPU?

    @robofox
    Xdebug неплохой профилировщик, попробуйте.
    Для уменьшения нагрузки советую пользоваться акселераторами, мне нравится Alternative PHP Cache.
    Ответ написан
    2 комментария