• Кастомные селекты, баг с выпадающим списком за html, body, вьюпорт. Объясните пожалуйста, как это происходит?

    Это нормальное поведение.

    jsfiddle.net/1vrm94a2 - absolute, скролл есть.
    jsfiddle.net/ys6ry7L8 - fixed, скролла нет.

    То, что элемент, позиционированный как absolute, вне основного потока элементов (или как это по-русски правильнее?), не говорит о том, что родительный контейнер должен не показывать скролл, если дочерние элементы в него не влязят. Вы можете сделать это с помощью overflow, если нужно.

    jsfiddle.net/j2nh9bb7 - overflow: visible;
    jsfiddle.net/y2u84t8L - overflow: scroll;
    jsfiddle.net/tzubgmwp - overflow: hidden;

    А вот fixed-позиционирование не влияет на скролл/overflow никак (jsfiddle.net/kbox2nzg), да, т.к. такое поведение в него изначально было заложено - привязываться к определенной точке вьюпорта и не влиять на скролл/overflow.

    Более того, влияние absolute-позиционирования на скролл - это правильно. Что будет, если ваша менюшка не влезет?
    Ответ написан
  • Что запускается первым?

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

    Но можно усугубить: если вы используйте conntrack в FORWARD вместе с правилом

    iptables -I FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    то потенциально возможен случай, когда соединение установится до загрузки iptables, а позже, когда iptables загрузит правила, соединение пойдет по этому правилу. Но ведь это редкость, когда кто-то использует conntrack в FORWARD, да еще и с пропуском всех установленных/связанных соединений. Обычно такое актуально для INPUT у серверов, но уж точно никак для FORWARD.

    Так вот, если у вас все правильно, вы не используйте conntrack с этой конструкцией для FORWARD, по умолчанию политика для FORWARD является DROP, и вы там строго контролируете, что куда в какие стороны по сетям, то нет повода для паники. Все равно все неправомерные соединения дропнутся после инициализации iptables, а время до загрузки iptables вряд ли критично, хотя лучше грузить его пораньше, конечно. Причем это некритично для systemd, например, ибо он параллельный и асинхронный (или для многих других init-систем).

    Других случаев я не придумал.

    В качестве вывода: опуская паранойю и ESTABLISHED/RELATED ACCEPT в FORWARD, атака нереальна.
    Ответ написан
    Комментировать
  • Как одним запросом добавить записи в несколько таблиц и получить их id?

    LAST_INSERT_ID(), думаю, то, что вам нужно.
    Ответ написан
    Комментировать
  • Почему алгоритм Дейкстры корректен?

    На первой итерации вес вершины 1 равен 0. От нее идем к соседям. До 3 вершины вес равен 1. До 2 вершины вес равен 10. Больше к 1 вершине не идем, она с минимальным весом. Следующая оставшаяся с минимальным из соседей - это 3. Выбираем её. Путь только в одну сторону - к 2 - и вес равен 2 (суммируется предыдущий вес). Раньше дотуда был вес 10, но так как наш новый вес меньше, заменяем на меньший. Выбираем вершину 2, а от нее уже некуда идти.

    Итого кратчайший путь до вершины 2 составляет 2 и идет через соседа 3 (если бы мы запоминали это во время итераций). По ребру с весом 10 вообще ничего не пойдет в данном случае.
    Ответ написан
    1 комментарий
  • Как в Bower не качать зависимости?

    На данный момент есть открытый пулреквест даже. Можете попробовать оттуда поставить Bower-Ignore-Dependencies.
    Ответ написан
    Комментировать
  • Вывод pdf из MySQL?

    Как принятно на русских ресурсах не отвечать на вопрос, а давай советы :) Но в этот раз совет важный и даже юзабельный.

    Хранить файл в БД - плохо. Может показаться, что это удобно (например, только бэкап БД спасет всех).

    Но на самом деле:
    • Растет размер БД. Что делать, если он станет запредельным из-за сохраненных там файлов?
    • Возрастает нагрузка на диски/оперативную память сервера БД.
    • Офигенно растут логи, а это дополнительная нагрузка на диск.
    • Замедлится передача данных от MySQL, т.к. там, во-первых, может быть сеть со своей пропускной способностью, а во-вторых, MySQL будет передавать большой файл маленькими частями (снова оверхед на I/O диска и сети).
    • То, что можно отдать обычным nginx'ом как статику, отдается через костыли.

    Хранить блобы можно, конечно, но рано или поздно сделаете БД узким местом. Если и хранить блобы, то очень-очень маленькие, но и даже это спорно и зависит от задачи.

    Поэтому отказывайтесь от идеи.

    Просто в этих пдфках содержаться персональные данные пользователей и нельзя чтобы они имели прямые ссылки(доступ к ним открывается только после авторизации)

    Причем здесь БД? Храните файл в том месте, которое не сервится наружу. А доступ до файла регулируйте при запросе. То есть у вас есть какой-то url для файла, там содержится его id, например. Вы проводите авторизацию: если можно забрать файл, спрашиваете у БД ссылку, где он находится на диске (а это место наружу не видно), и отдаете файл подобным образом, как делаете сейчас. НО, если ожидаются крупные файлы, читать файл нужно по частям, иначе можете закончить оперативу. В фреймворках обычно есть для этого инструменты, кстати.
    Ответ написан
    3 комментария
  • Кто нибудь пробовал работать во фрилансе после работы?

    Конечно, люди разные, но я не могу. Лучше это время тратить на личные проекты (опенсорс) и на развитие (новые языки, улучшать фундаментальные знания), либо еще на какое-то хобби (у меня это музыка, например). В долгосрочной перспективе это принесет больше пользы, а качество жизни будет выше. Работать на двух работах, совмещать работу/учебу - все это либо для очень-очень организованных людей (феноменально организованных, которые могут жить четко по плану каждый день), либо для тех, кто особо-то и не вникает (а это напрямую влияет на качество скилла). Кроме того, как не пытался, предел продуктивной работы в сутки - это порядка 6 часов. Все остальное не только не приносит удовольствия, так еще и по качеству получается хуже. Лучше делать одну задачу, "быть медленнее", но делать ее реально круто.
    Ответ написан
    4 комментария
  • Как исправить прыгающий параллакс в Safari (OSX)?

    А что используется для параллакса? left/top или translate/translate3d? Коротко: используйте только translate3d, со всем остальным действительно могут наблюдаться тормоза.

    Ну и покажите код на jsfiddle, если не помогло. Вариантов может быть несколько, к тому же под параллаксом могут понимать разное.
    Ответ написан
    3 комментария
  • Можно ли использовать VPN только для определенных запросов с сервера на сервер?

    Если к API нужно ходить с фронтенда, то можно на вашем nginx запроксировать запросы на сторонний ресурс. В ряде случаев понадобится настройка чего-нибудь (nginx/php) на удаленной стороне (если, например, нужно передавать хидеры специализированные, например http-x-real-ip). Ситуация вполне штатная, обычная. Если нужно ходить с бэкенда, то так и напрямую ходите (curl или что там у вас). Ситуация тоже обычная.

    Но я так понимаю, что главный вопрос в том, не плохо ли тут использовать vpn? Здесь нужно знать, какой у вас vpn. Самый печальный vpn - это pptp, т.к. небезопасен и будет дольше реконнектиться в случае потери соединения (да и в сравнении, например, с openvpn он даже в конфигурировании неудобен). Уверен, что у вас не pptp, это просто к слову (никто в здравом уме не будет поднимать pptp между сервер-сервер). Грубо говоря, все остальное (openvpn, ipsec и т.п.) можно использовать: проверено временем, стабильно. Касательно оверхеда: в 99% некритично. Например, если это openvpn l3 по udp, то оверхед на каждый пакет по размеру будет ~70 байт (где-то 20 ip, 8 udp, порядка 40-50 на tls)... примерно. И хотя если посчитать этот размер относительно маленьких пакетов, может выйти больше самого пакета (смотря как считать еще), это ни о чем не говорит: при достаточном канале (а у вас, раз речь идет про сервера, должно быть все хорошо) это некритично. В плане времени сколько-то уйдет на шифрование, но опять же для api это некритично (и надо учитывать, что соединение-то постоянное, то есть временной оверхед, например, на tcp/http и тем более https выше, а оно повсеместно, никто не парится). Для собственного успокоения можете замерить ширину канала (nc), потыкать в api (hping).

    Кстати, если везде линуха, не нужна защита, нет по пути страшных фаерволов, видимость на уровне l3 есть, то лучший вариант, как по мне, - это линуксовый ipip, либо gre: минимальный оверхед, крайне легко настраивается (описано в lartc), не нужно дополнительное ПО. Не знаю, насколько это популярно, но я бы использовал такой "vpn", если возможно/нужно.

    Еще важно убедиться, что vpn поднимается при ребуте сервера, что работает реконнект в случае чего. Собственно, это относится ко всем сервисам вообще.

    В качестве вывода: никаких проблем, используйте.
    Ответ написан
    1 комментарий
  • Нужен ли файрволл на домашнем веб-сервере за роутером?

    Конкретно в вашем случае нет.

    Левые порты не светятся наружу, никаких задач по роутингу/нату нет, ограничивать что-либо (syn, tcp-сессии, etc) тоже не имеет смысла, т.к. при любой атаке умрет ваш роутер/канал первым(и), стат собирать не собираетесь.

    Если в будущем хотите экспериментов, ожидаются сети внутри сервера или внешние (например, VPN), то можете настроить "на будущее". Какие-то базовые правила можете взять где-нибудь, чтобы отталкиваться.

    p.s. Я бы настроил, чтобы лучше изучить сети вообще. Можете подключить ваш сервер напрямую к интернету, а роутер уже по другой сетевушке (еще лучше - поднять на роутере вланы, чтобы пропустить себе инет, если он такое умеет, будет топология интереснее). Тогда у вас, во-первых, появится смысл в фаерволле, а во-вторых, вы сможете взять на себя его обязанности по нату. Поднимите внутри сервера виртуализацию (отдельно для БД, для сайта, парочку nginx, чтобы запроксировать запрос, DNS еще, чтобы зона была локальная для виртуалок), чтобы появились дополнительные сети, тогда даже роутинг какой-никакой сможете сделать. Можно разогнаться до динамической маршрутизации уже, раскачаете скилл.
    Ответ написан
    2 комментария
  • Можно ли по vpn-туннелю ходить в обратную сторону?

    Если есть тоннель, то это значит, либо L2, либо L3 канал уже есть, в обоих случаях имеется IP-адрес с двух сторон. Поэтому вы уже ходите в обе стороны. Дальнейшая настройка зависит от того, что хотите делать. В типичном случае: настроить фаерволл, чтобы он разрешал доступ до нужного ПО/порта, поднять это самое ПО. Поэтому не просто можно, а из коробки можно.
    Ответ написан
    4 комментария
  • Есть ли datepicker с фиксированным количеством выбранных дат?

    jQuery UI Datepicker все это умеет. Там есть maxDate и minDate, yearRange, stepMonths. По-моему, уже хватает с лихвой для диапазона дат, но кроме этого он может еще что-нибудь: например, есть очень полезная функция beforeShowDay. Куда еще мощнее?
    Ответ написан
  • Как с помощью php получить список включенных модулей Apache?

    Список всех включенных модулей можно узнать с помощью apachectl.

    apachectl -M

    Напишите обертку вокруг этого.

    Либо если используется mod_php, то есть функция apache_get_modules() в PHP.
    Ответ написан
  • Как сделать такой эффект перекрытия фото?

    Перенес сюда из комментов пару вариантов, чтобы сразу было видно. Все размеры относительны (+ округлил значения расстояний), осталось только переписать согласно вашему стилю/препроцессору.

    Только нижняя часть уезжает: jsfiddle.net/ozzh04k9
    Обе: jsfiddle.net/cuyLpz8b

    Также можно было использовать SVG: с ним потенциально меньше проблем со сглаживанием/размытием (а они иногда возникают с rotate, особенно в webkit), но больше с текстом (не разместить с переносом, например).
    Ответ написан
    Комментировать
  • Как извлечь данные из json-файла?

    Совсем дефолтовая задача, использовать json.loads().
    https://docs.python.org/3/library/json.html

    #!/usr/bin/env python
    
    import json
    
    path = 'example.json'
    
    with open(path, 'r') as f:
        data = json.loads(f.read())
        for i in data['employees']['employee']:
            if i['id'] == '3':
                print(i['photo'])
    Ответ написан
    3 комментария
  • Как пустить разные тип трафика по разным провайдерам?

    Правила выглядит правильно... Но такое поведение очень похоже на rp_filter.

    Попробуйте его отключить:
    sysctl net.ipv4.conf.default.rp_filter=0
    sysctl net.ipv4.conf.all.rp_filter=0

    UPD
    Немного погрузился в эту ситуацию, тут есть фича. Если убрать SNAT, но при этом сделать ping 8.8.8.8 -I eth1, то при включенном rp_filter оно работает. Дело в том, что в таблицах роутинга у вас исходящий адрес для 8.8.8.8 из другой сети/интерфейса (т.к. есть дефолтовый или иной подходящий для 8.8.8.8 маршрут), поэтому любая программа (сокет), будь то ping или браузер, выберет дефолтовый нужный исходящий адрес по таблицам роутинга (но не по меткам там). А когда iptables маркирует, и пакет попадает в другой шлюз/интерфейс согласно метке, срабатывает rp_filter, ведь адрес источника не принадлежит сети на исходящем интерфейсе. Поэтому, если задача направить конкретные адреса в конкретный шлюз, то лучше создать много правил ip rule и не маркировать трафик, избавиться от SNAT. Если так нельзя, то да, отключать rp_filter.
    Ответ написан
  • Почему iptables режет все внешние запросы через NAT при такой конфигурации?

    -A FORWARD -j REJECT

    Вот этим правилом вы весь FORWARD-трафик режете. Вам нужно разрешить FORWARD для сети 192.168.0.0/16 в обе стороны.

    Например, так:

    -A FORWARD -s 192.168.0.0/16 -i ИНТЕРФЕЙС_В_192.168.0.0/16 -j ACCEPT
    -A FORWARD -d 192.168.0.0/16 -o ИНТЕРФЕЙС_В_192.168.0.0/16 -j ACCEPT
    Ответ написан
    Комментировать
  • Как правильно реализовать поиск на ajax?

    Я бы все переделал в таком случае: для поиска нужно сделать отдельную страницу, настоящую, формируемую на бэкенде, с URL вида http://.../search/запрос/, например. И по ajax обращаться, например, на http://.../search/запрос/?json=1 (это все GET, никаких POST для этой задачи) и получать там объект, который рендерить на клиенте (потребуется шаблонизатор, ибо без него некрасиво), либо получать часть страницы, уже сформированную, которую просто $(...).html(...). Этот же подход можно использовать для любых страниц, которые надо по-настоящему отдавать (поисковым ботам, прямым заходам), но при этом быстро все грузить без обновления страницы.

    Либо же при заходе на страницу брать location.search и делать запрос, но это менее некрасивый вариант.

    Посоветовал бы еще почитать про фрейворки-библиотеки что на клиенте, что на сервере, ибо mysql_fetch_assoc и history.pushState в коллбеке в 21 веке - это жесть. :)
    Ответ написан
    2 комментария
  • Клон сайта и оценка посещаемости. Как реализовать?

    Техническая сторона: squid/nginx - это "не те прокси", так скажем, никаким боком к данной задаче не подходят. Нужно снять статистику (то есть поставить скрипты на страницу), поэтому iframe не работает, нужен полноценный сайт. Тянуть данные на фронтенде нельзя по этой причине, ну и сама разработка будет тяжела: нужно будет верстать что-то, действительно разрабатывать сайт. Единственный вариант вижу: на бэкенде получать запрос, спрашивать по нему оригинальный сайт, получать контент, встраивать свои скрипты, отдавать. Выглядит это просто и должно сработать.

    Трафик: чтобы протестить, нужно привлечь реальный трафик, а как только начнете привлекать, попадете в бан у поисковых систем, кроме того подпортите продвижение у оригинального сайта, из-за чего еще и на санкции от его владельцев нарветесь. Кроме того, тот же трафик на свой сайт не получите. Можно сказать, этот пункт не выполним. А даже если был бы выполним, все равно не добьетесь правильной статистики, так как время на сайте, конверсия, глубина просмотров, посещения и т.п. - это комплексные показатели. У двух сайтов, продающих одно и то же, они могут кардинально отличаться. Недавно я делал новый сайт-каталог, владельцы решили отказаться от старого сайта, потому что его было невозможно поддерживать и дорабатывать, нужен был редизайн и т.п. В итоге у них посещения упали процентов на 15-20% (реструктуризация, хотя ссылки максимально сохраняли), но при этом глубина просмотров и время на сайте возросли значительно. Эти показатели зависят, скорее, от вашего подхода, качества контента, а не от того, что продается. Кроме того, рентабельность не зависит от этих показателей напрямую. Да, может быть очень много посещений и просмотров, даже глубина просмотров может быть неплохая и время нахождения на сайте тоже, но конверсия будет низка, потому что все как-то криво и бездушно на сайте.

    Моральная оценка вашей "идеи": плохо, очень плохо. Такие методы плохи, а ресурсы, созданные таким образом, не выстрелят.
    Ответ написан
    Комментировать
  • Перейдет ли ПС по ссылке если страница в robots.txt?

    Если нужно, чтобы эти ссылки не попали в выдачу, то robots.txt хватит. Он говорит поисковому боту, куда переходить не нужно, для этого и создавался этот файл. Понятное дело, что бот может туда перейти, если захочет, этот файл носит рекомендательный характер, однако поисковые системы вроде Гугла/Яндекса следуют правилам в robots.txt.

    Насчет rel="nofollow": он не нужен. Подробнее о нем я недавно отвечал в другом вопросе.

    Поэтому ответ такой: поисковая система не будет заходить на эту страницу, индексировать ее не будет.
    Ответ написан
    Комментировать