Задать вопрос
  • Где найти единомышленников по веб-разработке?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых Рональд Макдональд прав на все 200%, ни один идейный фрилансер в здравом уме не будет тратить время на бла-бла, при этом еще и взращивая конкурентов. Что касается проф. роста - ищите роадмап развития по своей специализации и по ней развивайтесь, там все как в онлайн-играх - ветки талантов, скилы, единственный бонус - можно качать все ветки сразу (если пупок не развяжется). Ну и все как в играх - пока ты спишь - враг качается )
    Ответ написан
    4 комментария
  • Как вызвать JS-функцию из IFRAME?

    lazalu68
    @lazalu68
    Salmon
    Когда-то давным давно писал трактат на эту тему и даже накатал два примера с детальным разбором методов сообщения окон - Как запустить выполнение js файла при нажатии на кнопку?
    Ответ написан
    Комментировать
  • Как запустить выполнение js файла при нажатии на кнопку?

    lazalu68
    @lazalu68
    Salmon
    В подавляющем большинстве случаев надобность в реинициализации целого скрипта свидетельствует о недостатках выбранной архитектуры, т.к. вместо этого гораздо проще выделять процедуры, ответственные за инициализацию, и выполнять их.

    Окна/фреймы взаимодействуют между собой через объекты Window: для доступа к дочернему окну родительское может использовать ссылку которую возвращает метод open ("var child_window = window.open()"), а дочернее может обращаться к родительскому используя свойство opener. Доступ к свойствам есть только у окон принадлежащих одному источнику (origin): если окно с адресом "first.com/page.html" вызовет окно с адресом "second.com/page.html", то оно не будет иметь доступа к его свойствам, а если с адресом "first.com/folder/another-page.html" - то будет.

    Окна/фреймы одного источника могут почти без ограничений обращаться к свойствам друг друга - могут использовать данные, выполнять функции, производить операции с элементами. Достаточно объявить в одном окне функцию, и она сразу станет доступна для дочернего/родительского окна.

    Также взаимодействие можно осуществлять с помощью метода Window.postMessage (MDN, JSR), который к тому же позволяет реализовать кроссдоменный обмен данными. В IE8+ этот метод 1) работает только для фреймов, 2) позволяет передавать только строки.

    Каждый способ имеет преимущества и недостатки: обращение к свойствам другого окна разрешено только в рамках одного источника, а использование postMessage в случаях с более-менее сложными интерфейсами сводится к передаче кастомных ивентов.

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

    Код обоих примеров можно увидеть на гитхабе
    Ответ написан
    Комментировать
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Как скачать файл через командную строку в линуксе?

    Попробуйте начать скачивать в браузере, и в инструментах разработчика, вкладка Network в FireFox если кликнуть правой кнопкой на закачке этого файла, есть пункт Copy – Copy as cURL:
    5e4446f6902f1091091106.png

    Скопированная команда включает все правильные заголовки, куки и пр.
    Не забудьте направить вывод команды в файл, иначе на экран повалится нечитабельная бинарная каша.
    Допишите к команде знак «больше» и имя файла, куда сохранять: curl -всякие опции и ссылка > file.zip

    Должно сработать из командной строки, если только куки не привязаны к IP закачивающего.

    Если привязаны к IP
    В таком случае придётся сделать SSH-тоннель через сервер, и использовать его как SOCKS5 прокси для браузера, чтобы зайти и авторизоваться через нужный IP.

    На маке это в терминале команда ssh -ND 5555 my_ssh_host_config_name где в файле ~/.ssh/config указан конфиг хоста:
    Host my_ssh_host_config_name
        HostName 123.12.12.123
        Port 1234
        User  username
        IdentityFile ~/.ssh/id_rsa

    В настройках FireFox - Proxy - указать SOCKS Host: 127.0.0.1, Port: 5555, SOCKS v5
    5e444987ecf34155912416.png
    Ответ написан
    7 комментариев
  • Как изменить значения input после перемещения?

    0xD34F
    @0xD34F Куратор тега JavaScript
    stop() {
      $('.sortable-item input', this).val(i => i + 1);
    },
    Ответ написан
    7 комментариев
  • Как изменить значения input после перемещения?

    kgb_zor
    @kgb_zor
    I need your traceback.
    $('.sortable-item').on('click', function(){
    	$('.sortable-item').each(function(index, item){
      	$(item).find('input').val(index+1);
      		
      })
    
    })
    Ответ написан
    Комментировать
  • Как запретить выполнять запросы к определенному сайту на сервере?

    zabudkin
    @zabudkin
    Инженер-системотехник, программист, админ, ТПУ!!!!
    route add -host 149.154.167.220 reject
    Ответ написан
    4 комментария
  • Как выполнить запрос через прокси в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    site:toster.ru  Как выполнить запрос через прокси в php?
    - скрпируй этот текст в адресную строку своего браузера и нажми Ентер.
    Ответ написан
    2 комментария
  • Как ускорить работу Apache: отдачу статических файлов и выполнение PHP?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Изучил весь httpd.conf, перекопал кучу гайдов по highload (они старые и с сомнительными советами типа "отключить лишние модули"
    Один из первых модулей, который стоит отключить у Apache'а, для скорости - это поддержку файлов .htaccess, сама эта поддержка производительности не добавляет, а наличие этих файлов - уж и подавно.

    1) Это у всех VPS так называемый "мощный" процессор медленнее, чем на каком-то жалком хостинге, пусть и с VIP-тарифом?
    Нет, возможно это у Вас, персонально, какой-то дрянной VPS-хостер, или того хуже, тариф аки "OpenVZ, мы не перепродаём проданные ресурсы... ну разве что раз 10, но больше не перепродаём"

    2) Поможет ли в такой ситуации FastCGI?
    FastCGI - это режим работы PHP, напрямую, на производительность в значительной степени он не влияет, более того, сама логика работы FCGI (если сравнивать Apache-FCGI и Apache-mod_php) будет медленнее, по тому как для взаимодействия FastCGI будет использоваться сокет ("обычный" или unix-сокет), что подразумевает сетевое взаимодействие, вместо непосредственной работы интерпретатора PHP "внутри" сервера. Думаю, Вам поможет несколько другое (постараюсь описать ниже).

    3) Почему не популярны фишки типа eAccelerator (кеширование AST и т.п.)?
    Понятия не имею, почему они не популярны и откуда у Вас такая статистика... Но, возможно, дело в том, что eAccelerator морально и физически устарел, и если верить например, вот такой банальной статье (нет, я не работаю с такой "шедевральной" CMS как "Битрикс", просто это первое упоминание про eAccelerator, которое пришло мне в голову) - с версиями PHP выше 5.3 не работает.

    Я знаю, что многие из них заброшены, но это не причина, а следствие.
    Не могу прокомментировать это, так как Вы не указали следствие - чего именно. Другими словами, я не совсем понимаю, что Вы хотели этим сказать.

    4) Что еще может помочь?
    Ну так, сходу, по памяти (варианты могут быть не связаны между собой):
    1. Отказ от поддержки .htaccess в Apache или хотя бы сокращение их количества
    2. Установка Nginx в качестве фронтального сервера, для отдачи статики
    3. Полный отказ от Apache вообще и переход на Nginx+FCGI (только не подумайте, я очень люблю Apache за его гибкость в настройке и широкие возможности, другой вопрос, что мало кому эта гибкость фактически нужна и мало кто способен его грамотно, качественно и полноценно настроить... Nginx в этом плане будет куда попроще). Почему FCGI? По тому, что другой приемлемый способ взаимодействия Nginx'а с PHP мне не известен. Настройка FCGI-пула - обязательна.
    4. OpCache - с версии 5.5 встроено "искаропки", к включению и настройке - настоятельно рекомендуется. Я не знаю, как обстоят дела с CMS и используете ли Вы CMS на сайте, но из моей практики, скорость работы PHP-фреймворков возрастает в среднем 8-20 раз.
    5. HHVM, как альтернатива
    6. Проверка:
    а) Того, что дело действительно в PHP. В частности, стоит собрать все логи сервера, например, сколько длились запросы, в БД, их количество и так далее.
    б) Проверка скорости работы дисковой подсистемы... Не буду "тыкать пальцем", но одно время я арендовал довольно большое кол-во VPS'ок у одного популярного хостера, и в какой-то момент, я заметил, что средняя скорость работы дисковой подсистемы - 1.4Кбайт/сек., при этом "отказы" (аки "невозможно записать блок") были примерно в 50% случаев... это продлилось не очень долго, но и через несколько месяцев, у этого же хостера, тарифы с "обычным HDD", почему-то обладали более быстрой дисковой подсистемой, нежели тарифы с "быстрыми SSD"... можно сделать выводы...
    в) Проверить реальную скорость работы процессора, не редко она отличается от завяленной достаточно сильно.

    P.S. Если Вы сформулируете вопрос(ы) более точно - я смогу дать более точные рекомендации, если конечно они Вам нужны :)

    P.P.S. Есть вариант решения проблемы вообще "в лоб", самый наверное сложный и пожалуй самый производительный в ряде случаев. Это Varnish + тонкая настройка оного, позволяет выдавать большую часть страниц из кэша (оперативной памяти) за наносекунды, иногда позволяет обслуживать очень много тысяч запросов в минуту, при этом, это не просто кэширование кода или что-то подобное... это кэширование целиком страниц и/или ответов сервера. Среди прочего - позволяет "не трогать бэкенд вообще", т.е. при запросе страницы, может не быть ни обращений к БД, ни выполнения того же PHP (или любого другого) кода, на стороне сервера. Требует довольно тонкой настройки, не очень подходит для сайтов "на CMS", для сайтов на фреймворках - требует изначально корректного подхода к разработке и продумывания того, что и как будет/должно кэшироваться. При некорректном подходе - наиболее вероятный результат - работать будет, но не так быстро как хотелось бы, а часть сайта вообще может перестать нормально функционировать. Есть так же другие решения, но с учётом довольно общих формулировок вопроса - говорить о них довольно сложно.

    Ах, да, забыл важную деталь... Почему "хостинги" используют Apache и не откажутся от него (совсем)? В большей степени по тому, что Apache позволяет делегировать часть настроек пользователю через .htaccess. При этом, для статики не редко стоит всё тот же Nginx, который, как Вы понимаете, подобным образом делегировать часть настроек пользователю не позволяет, в виду чего для этих задач не подходит и не "буксует" на этом (в отличии от Apache'а). В т.ч. и по этому, мы на 99% отказались от "хостингов" (по причине наличие Apache'а, и невозможности от него избавиться или самостоятельно настроить, и как следствие "тормозов" которые приходят вместе с подобным подходом).
    Ответ написан
    5 комментариев
  • Провайдер блокирует доступ к сайту, подсобите?

    athacker
    @athacker
    1) "Почему так получилось" -- вероятнее всего, ваш провайдер использует схему блокировки с анализом запроса от клиента, и если ресурс из списка блокируемых, то клиенту отправляется TCP RST пакет, после чего клиентское приложение закрывает соединение. Потом приходит реальный ответ от сайта, но т. к. сайт находится дальше, чем оборудованием провайдера, то к этомум моменту ситуация следующая: клиент получил от системы DPI фальшивый TCP RST пакет, якобы от того сайта, к которому он обращался; клиент сбросил соединение; пришедший ответ от сайта системой клиента просто отбраывается, т. к. с точки зрения системы, он не относится ни к одному из установленных соединений.
    После включения локального VPN-соединения для перехвата всего трафика для анализа, вероятнее всего, фальшивый TCP RST от DPI к клиенту приложением дропается. Я бегло посмотрел описание PacketCapture, там вроде как даже изменения в транзитные пакеты можно вносить по шаблону, так что вполне может быть, что либо предусмотрен мехнизм игнорирования предположительно фейковых TCP RST, либо это побочный эффект от какого-то другого функционала PacketCapture.

    2) Что делать, чтобы всё работало -- тут вам уже объяснили. VPS за пределами контролируемого периметра с последующей настройкой выхода в интернет через этот VPS. Вариантов реализации -- тьма. Это и VPN, и поднятые SSH-туннели, проксирующие порт какого-нибудь Squid на клиента, и sshuttle, и ещё много-много всякого.
    Ответ написан
    1 комментарий