Задать вопрос
  • Подойдёт ли авторизация средствами MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. К авторизации этот вопрос не имеет отношения.
    поскольку буквальный ответ на вопрос из заголовка будет, разумеется - НЕТ. Одними средствами БД авторизовать никого нельзя.

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

    Еще одно соображение - безопасность. Пароль в принципе нежелательно отправлять в БД в открытом виде, чтобы он потом не засветился в каких-либо логах.

    3. Весь этот детский лепет с sha1 в цикле заменить на php.net/manual/en/function.password-verify.php
    Ответ написан
    Комментировать
  • Каким образом обеспечить деплой проекта?

    fornit1917
    @fornit1917
    Если совсем круто хочется - настройте Jenkins или TeamCity. Умеют и с репозитория обновления вытягивать, и билдить, и тесты запускать, и на продакшн деплоить. Документации с примерами в интернете достаточно.

    Если простой деплой, то можно взять capistrano или его аналог.
    Ответ написан
    Комментировать
  • В for(var i = 0; i < 5; i++) функция должна писать в массив i, а пишет сразу 5. Почему?

    @iShatokhin
    JS developer
    Это основы основ JS.

    Вы пушите функции, которые позже используют переменную "i", а не примитив. Изучайте замыкания и области видимости.

    P.S. Через несколько лет можно будет использовать let (ES6), чтобы избежать такое.
    Ответ написан
    Комментировать
  • Как правильно пользоваться include в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проблемы тут две.
    Во-первых, у тебя выключено отображение ошибок.
    Из-за этого ты не видишь ни саму проблему, ни подсказок в виде путей к файлам.

    Во-вторых, и самое главное - ты не понимаешь принципа, по которому строятся относительные пути. А по большому счету - вообще используешь их. Надо всегда использовать абсолютные.
    После прочтения phpfaq.ru/paths у тебя все встанет на свои места.
    Ответ написан
    3 комментария
  • Возможно ли определить местоположение посетителя сайта с точностью до района города?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Без запроса можно определить только по IP. По IP для кабельного интернета точность может быть до дома, в случае мобильного интернета - ни о какой точности вообще речи не идет, глупости спрашиваете.

    А так вы хотите слишком много, да ещё и без разрешения пользователя. Если сервис полезный - делайте запрос, иначе пользователь и не хочет чтобы вы его определяли, всё в порядке.
    Ответ написан
    Комментировать
  • Почему сервер не принимает POST запросы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Как говорит мануал, $_POST заполняется только для HTTP Content-Type application/x-www-form-urlencoded или multipart/form-data.

    Значит, разбирать вам этот запрос вручную надо. Кратко говоря:
    parse_str(file_get_contents('php://input'), $rgInputData);
    //var_dump($rgInputData);
    Ответ написан
    Комментировать
  • Как настроить удаленное управление Ubuntu?

    @ldvldv
    Ответ написан
    Комментировать
  • Что надо указать в mkdir() чтобы создавались все папки, в которых находится создаваемая папка, если таких нет?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как устанавливать глобальное значение max_user_connections в mysql при загрузке (в Debian/Linux)?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    https://dev.mysql.com/doc/refman/5.5/en/server-sys...
    Судя по описанию можно установить как глобально (для сервера) так и сессионно (для одного клиента)
    Оттуда же:
    System variables can be set at server startup using options on the command line or in an option file. Most of them can be changed dynamically while the server is running by means of the SET statement, which enables you to modify operation of the server without having to stop and restart it.
    То есть или прописывайте в my.cnf (какая у вас ось?) и перестартовываете сервер, или в соединении пишите
    SET SESSION max_user_connections = 123;
    https://dev.mysql.com/doc/refman/5.5/en/set-statem...
    Ответ написан
    5 комментариев
  • Разница между background: url('...') и background: url(...)?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Если в значении функционала url() не присутствуют пробельные символы (пробелы, табуляция, переносы строк), кавычки и скобки, то разницы нет никакой.
    Пример — ссылка, data:uri в кодировке base64.

    Update: После обсуждения с Алексей Уколов внёс коррекцию

    Если же в значении могут появиться пробельные символы, кавычки и скобки, то при отсутствии обрамляющих кавычек их нужно экранировать (каждый символ).
    Если же обрамляющие кавычки есть, то экранировать нужно только внутренние кавычки в том случае, если они аналогичны обрамляющим. Если же обрамляющие и внутренние кавычки разные (например, внутри двойные, снаружи одинарные и наоборот), то никаких дополнительных действий не требуется.
    Пример — data:uri в кодировке utf8.

    Спецификация:
    Parentheses, whitespace characters, single quotes (') and double quotes (") appearing in a URL must be escaped with a backslash so that the resulting value is a valid URL token

    Пример jsfiddle.net/petroveg/cexbhq4e/6

    8192c6b0c21d43afa0b9b164af297655.png
    Ответ написан
    Комментировать
  • Кем можно работать, учась на программиста?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Менеджером проектов.
    Ответ написан
    6 комментариев
  • Выбор платформы для небольшого интернет-магазина?

    @maxyc_webber
    Web-программист
    стандартный функционал битрикса. Можно найти в маркетплейсе уже готовый магазин максимально подходящий под ваши требования. купить его и не париться.
    Ответ написан
    Комментировать
  • Откуда взялись лишние отступы при верстке макета?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Никакой CSS3 тут не причём. И вообще — забудьте вы про номер. Никакого отношения к делу это не имеет.
    Смотрим https://jsfiddle.net/petroveg/exfj3L1c/1/

    Читайте:
    1. Про то, какие есть стили по умолчанию.
    2. Про блочную модель и, в частности, про margin-collapse.
    3. Про псевдоэлементы.
    4. Про шрифты.


    Замечу, что даже в версии 2.1 есть всё, что нужно было знать в вашем случае. Единственное, чего там точно нет — flex, но я бы пока на вашем месте обошёлся float:left.
    Ну и классы, классы — не нужно писать правила с использованием в селекторах исключительно имён тэгов.

    Update: Каждый второй пишет про сброс margin. Кто-то советует только для body и p, радикалы вообще для всего. Как это даст знания про margin-collapse? Эти советы — как красить ржавчину.
    Ответ написан
    8 комментариев
  • Как переписать класс?

    @SlivTime
    Я бы сделал так. Переменную endpoint, конечно, можно не инициализировать, а сразу передавать строку в вызов _call_with_endpoint. Но так нагляднее.

    class Vehicle(API):
        def _call_with_endpoint(self, lang, fields, account_id, endpoint):
            if type(fields) is list:
              fields = self._format_fields(fields)  
            return self._api_call(endpoint=endpoint,
                                  fields=fields,
                                  language=lang,
                                  account_id=account_id)
    
        def vehicle_stats(self, lang='ru', fields='', account_id=''):
            endpoint = '/tanks/stats/'
            return self._call_with_endpoint(lang=lang,
                                            field=fields,
                                            account_id=account_id,
                                            endpoint=endpoint)
            
    
        def vehicle_achievements(self, lang='ru', fields='', account_id=''):
            endpoint = '/tanks/achievements/'
            return self._call_with_endpoint(lang=lang,
                                            field=fields,
                                            account_id=account_id,
                                            endpoint=endpoint)
    Ответ написан
    Комментировать
  • Как разобрать регулярное выражение?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Весь (и он же единственный) изюм — \1, что означает найденную ранее строку (ссылка на первый шаблон) (\w).
    Итог — условию удовлетворяет строка, не содержащая нескольких одинаковых символов (латинской буквы в любом регистре, арабской цифры или знака подчёркивания), и находящихся в любом её месте.
    Ответ написан
    8 комментариев
  • Что быстрее C++ или Java (вывод строк в консоль)?

    angry_cellophane
    @angry_cellophane
    Ребята, я вам покушать принёс. Открываем специальную олимпиаду.
    :~/src/cpp_time_test$ cat /proc/cpuinfo 
    processor	: 0
    vendor_id	: GenuineIntel
    cpu family	: 6
    model		: 23
    model name	: Intel(R) Core(TM)2 Duo CPU     T6600  @ 2.20GHz
    stepping	: 10
    microcode	: 0xa07
    cpu MHz		: 1200.000
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 0
    cpu cores	: 2
    apicid		: 0
    initial apicid	: 0
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 13
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
    bogomips	: 4389.29
    clflush size	: 64
    cache_alignment	: 64
    address sizes	: 36 bits physical, 48 bits virtual
    power management:
    
    processor	: 1
    vendor_id	: GenuineIntel
    cpu family	: 6
    model		: 23
    model name	: Intel(R) Core(TM)2 Duo CPU     T6600  @ 2.20GHz
    stepping	: 10
    microcode	: 0xa07
    cpu MHz		: 1200.000
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 1
    cpu cores	: 2
    apicid		: 1
    initial apicid	: 1
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 13
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
    bogomips	: 4389.29
    clflush size	: 64
    cache_alignment	: 64
    address sizes	: 36 bits physical, 48 bits virtual
    power management:

    :~/src/cpp_time_test$ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 13.04
    Release:	13.04
    Codename:	raring

    ~/src/cpp_time_test$ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) Server VM (build 24.51-b03, mixed mode)
    ~/src/cpp_time_test$ g++ --version
    g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3

    Замеры проводились всего по паре раз, ибо лень, так что присутствует некоторая погрешность. Прошу простить и понять.
    Java:
    time java Main
    real   5m38.489s
    user   0m30.184s
    sys   0m56.864s

    C++
    int main() {
    
        for (int i = 0; i < 10000000; i++) {
    
            printf("Number = %i \n", i);
        }
    
        return 0;
    }

    g++ -O2 origin_main.cpp -o origin_main.o
    time ./orinig_main.o
    real   5m54.260s
    user   0m7.700s
    sys   0m36.768s

    Надеваем мокасины скорости:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      for (int i=0; i < 10000000; i++)
        {
          cout<<"Number = "<< i << '\n';
        }
      return 0;
    }

    g++ -O2 main.cpp -o main.o
    time ./main.o
    real   5m35.629s
    user   0m8.424s
    sys   0m37.408s

    Пробуем магию:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      static char buffer[1024*1024*4] ;
      std::cout.rdbuf()->pubsetbuf( buffer, sizeof(buffer) ) ;
      ios_base::sync_with_stdio(false);
      for (int i=0; i < 10000000; i++)
        {
          cout<<"Number = "<< i << '\n';
        }
      return 0;
    }

    g++ -O2 main.cpp -o main.o
    time ./main.o
    real   5m35.555s
    user   0m3.568s
    sys   0m22.688

    Добавим в топку Java печки дровишек:
    public class Main {
        public static void main(String[] args) throws IOException {
            try (BufferedOutputStream bos = new BufferedOutputStream(System.out, 2 << 22)) {
                try (PrintWriter pr = new PrintWriter(bos, false)) {
                    int i = 0;
                    for (int j = 0; j < 10_000; j++) {
                        for (int k = 0; k < 1000; k++) {
                            pr.write("Number = " + i++ + '\n');
                        }
                        pr.flush();
                    }
                }
            }
        }
    }

    time java -XX:LoopUnrollLimit=42000000 -XX:+AggressiveOpts -Xmx512m -Xms256m  -XX:+OptimizeStringConcat -XX:CompileThreshold=200 Main
    real   5m35.963s
    user   0m4.408s
    sys   0m23.456

    На этом и остановимся, так как это может продолжаться бесконечно.
    Вывод: искусственный тест не показатель, и все сложно.
    Самый главный вывод: не пристало воспитанному джентельмену мериться скоростью, размером и количеством.
    Ответ написан
    Комментировать
  • Каким должен быть адрес у админки?

    zo0m
    @zo0m
    full stack developer
    в вк, фейсбуках и прочем, даже не одна админка, и вход в нее вряд ли через интернет возможен.

    а вообще адрес без разницы, выбирайте чтоб пользователям было удобно,

    "спрятать" урл - это не средство защиты, разве что от дурака, но он дальше застопорится на вводе логина и пароля.
    Ответ написан
    Комментировать
  • Как активировать input file поля с помощью click()?

    Romanche
    @Romanche
    Жизнь–игра. Задумано плохо, но графика потрясная!
    е мае ответ то прост - кнопка субмитит форму )
    Для того что бы не было субмита
    $(function () {
        $("#formUploadBtn").click(function () {
            $("#formInput").click();
            return false;
        });
        $('#formInput').change(function () {
            $('#test_form').submit();
        })
    });


    jsfiddle.net/mLgeLtgy
    Ответ написан
    4 комментария
  • Что будут дальше требовать от PHP программиста? К чему все движется?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вот охота было придраться к одной левой вакансии, которую составила, не разобравшись, дурочка-эйчар. Потрать свою жизнь на что-нибудь более полезное.

    У тебя есть полное право не отзываться на эту вакансию, а отозваться на другую.
    Ответ написан
    2 комментария
  • Как выбрать из нескольких разработчиков и что делать с рисками?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Есть 3 кандидата, по описанному в резюме стеку технологий подходят. Как среди них выбрать самого квалифицированного?


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

    что мешает кому-то из них, получив доступ к серверу, украсть проект

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

    запороть что-нибудь

    Вы знаете людей, которые никогда не делали ошибок?)) Что бы не запороть есть комплекс мер: контроль версий, разработка только на локальной машине, авто тестирование, анализаторы кода, автоматические миграции баз данных, CI системы и т.д. Если же у вас все работы выполняются на боевом сервере - не обижайтесь, но ваш проект изнутри говно.

    взять проект под свой контроль

    Вы шутите?)) Если программист не будет иметь прав работы с кодом - он не сможет ее выполнять. Это как надеть смирительную рубашку на водителя и посадить его за руль.

    Вы в любом случае связаны с рисками, правильно составьте договор. Платите достойную ЗП и в срок. Доверяйте его решениям, по реализации кода, для этого собственно вы его и наняли.
    Не ставьте над ним кучу менеджеров - профита от этого не будет.
    Не оценивайте его работу по тому, что он непосредственно делает (само написание кода обычно только 10% рабочего времени, остальное в большей части - "думалка"), оценивайте результат.
    Ответ написан
    Комментировать