• Как управлять двумя master NGINX через командный апплет?

    selivanov_pavel
    @selivanov_pavel
    Linux admin
    nginx -s узнаёт PID-файл нужного процесса из дирекривы pid в конфиге. Если она не задана - будет использоваться nginx.pid в каталоге, заданное при сборке. Соответственно, надо указать правильный конфиг-файл:
    nginx -c /etc/nginx-first/nginx.conf -s reload

    https://www.nginx.com/resources/wiki/start/topics/...
    Ответ написан
    1 комментарий
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

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

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Как переслать 10ТБ в Китай?

    @Tabletko
    никого не трогаю, починяю примус
    По-моему, проще будет переслать пару жестких дисков почтой.
    Ответ написан
    8 комментариев
  • Почему autoload Путается?

    Denormalization
    @Denormalization
    Перед data\validate::init(); нужно ставить "\", чтобы указать что 'data' это корневой namespace, а не вложенный в requests
    Ответ написан
    Комментировать
  • Продажа IT-продукта. Как все организовать?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    "С самим продуктом я определился, с рынком сбыта тоже"

    "Меня больше волнует другой вопрос: как продавать через интернет?"

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

    @krypt3r
    preg_match_all('/\p{Cyrillic}+/u', $str, $m);
    preg_match_all('/\p{Han}+/u', $str, $m);
    Ответ написан
    1 комментарий
  • Переопределение функции в Zend Framework?

    27cm
    @27cm
    TODO: Написать статус
    Напишите свой My_View_Helper_HeadScript, наследующий Zend_View_Helper_HeadScript. В нём уже переопределяйте метод createData. RTFM
    Ответ написан
    Комментировать
  • Почему Ubuntu Server после загрузки попадает в sh,а не в bash?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Потому что пользователю, под которым вы вошли в систему, в качестве программной оболочки установлена sh.
    Установить bash можно командой:
    sudo usermod -s /bin/bash username
    Ответ написан
    Комментировать
  • Зачем нужны исключения?

    Исключения - это принципиальный подход к обработке ошибок и структурирования кода обработки нештатных ситуаций. Исключения сегодня есть во многих современных ОО-языках, и в целом работа с ними совершенно не зависит от того, как, куда и какие выдаются сообщения.
    То, что вам вываливается не очень удобный для чтения текст - это вопрос конкретно поведения PHP для непойманных исключений, а не исключений в принципе. Если почитаете не только про то, как исключения выбрасывать, а еще и как их обрабатывать, то возможно поймете, что при возникновении исключения можно совершить любые необходимые действия в скрипте, как то записать ошибку в текстовый лог, записать в БД с датой и временем, или даже послать SMS дежурному администратору.
    Не знаю, что вы использовали в качестве источника (неужели книги по PHP так плохи?), но вы что-то явно не дочитали про исключения. Сейчас ваш вопрос похож на такой: "Зачем мне нужна фура, если я могу добраться на работу на 38-м автобусе?". Т.е. как если бы вы раньше не видели грузового транспорта, и не представляли бы, что с ним вообще делают.
    Ответ написан
    Комментировать
  • Xорошие статьи про защиту в php?

    Adamos
    @Adamos
    Входящие данные не надо защищать. Их нужно очищать от потенциально опасных включений.
    Если данные пойдут в базу - пропускать их через плейсхолдеры и никогда не включать в запросы "сырые" строки.
    Если данные будут выводиться пользователю - превращать любые символы, используемые в разметке, в HTML-версию этих символов.
    Если данные сохраняются в файлы - убедиться, что в этих файлах именно данные ожидаемого типа и что они недоступны по прямому запросу.
    Ну, и внутренняя логика не должна зависеть от входящих данных - все управляющие элементы должны оставаться на сервере, так как снаружи может прийти все, что угодно. В принципе.
    Конец статьи.
    Ответ написан
    Комментировать
  • Какие есть средства для выполнения команд по SSH?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    $ ssh [user]@[server] '[command]'
    или
    ssh [user]@[server] '[command 1]; [command 2]; [command 3]'


    Что бы руки не чесались
    https://www.opennet.ru/base/sys/file_access.txt.html
    heap.altlinux.org/modules/linux_permissions/index.html
    Ответ написан
    Комментировать
  • Будут ли конфликтовать MySQL с sqlite с Postgresql?

    @deliro
    Нет. Никак. Нет.
    Ответ написан
    Комментировать
  • Насколько сложно написать под Chrome?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    - Сложность реализации прямо пропорционально тому, что ты хочешь получить на выходе. Это очевидно.
    - HTML5, CSS, JS да этого достаточно.
    - habr жэ
    - Если ты задаешь столь очевидные вопросы тут, а не сидишь и "гуглишь".. то ставлю полтосик на то, что свое хорошее приложение для хрома ты будешь еще очень-очень долго реализовывать.
    Ответ написан
    1 комментарий
  • Работа клиент-серверной модели,вопросы от нуба?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1)При следующем обращении (переходу на другую страницу сайта) идет ли обращение снова к DNS или взаимодействие уже идет на прямую с Веб сервером/Сервером приложения?

    Вы путаете сервер-клиент приложение и работу DNS службы. К серверу можно изначально обращаться по IP адресу, к серверу можно обращаться и вообще не по IP сетям. Что же касается работы DNS, то работает оно сложнее.
    Ваш комп смотрит файл hosts, если там нет нужного сайта, оно смотрит на локальный кеш, в котором хранятся недавние обращения. Если нет и там, обращается к вашему DNS серверу. Тот смотрит в свой кеш, если в нем нет - обращается к вышестоящему DNS серверу, и так до рут-сервера. По пути, каждый DNS сервер может иметь свой кеш. В среднем закешированное значение хранится сутки, но каждый владелец домена может настроить свой TTL (time to live). Кроме того, существуют dns балансеры, когда на тот же DNS могут возвращаться разные IP.

    2) Веб сервер соответственно работает как сервер для веб (http), сервер приложений соответственно работает для приложений (например он запускает java сервлет, к которому можно обращаться различными способами, включая http)

    3) в цепочке "клиент - вебсервер - сервер приложения" может отсутствовать второй или третий пункт. То есть может быть клиент-вебсервер или клиент-серверприложения. Вообще правильно говорить клиент-сервер. А какой именно клиент и сервер, и как они общаются - это уже вторично.

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

    Если вы нажимаете "положить в корзину", то клиент отправляет команду, сервер ее обрабатывает и отвечает клиенту каким-либо способом, понятным клиенту. Что делает сервер - кладет в базу, или не кладет - это зависит от реализации корзины.

    Понятно, что все команды которые отдает клиент серверу и все ответы, которые дает сервер клиенту, должны быть понятны и серверу и клиенту. Именно поэтому оно и работает.
    Ответ написан
    Комментировать
  • Кто стащил деньги Скрилл или Альфа-банк?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Около 25$ в среднем стоит SWIFT перевод. То что вы сделали это не вывод, это международный перевод из одного банка в другой, то бишь SWIFT операция. Оплата комиссии могла быть снята как у отправителя так и получателя но сути это не меняет.
    Ответ написан
    3 комментария
  • Непростая задача для vim?

    sim3x
    @sim3x
    $ for n in {101..125}; do echo -n 192.168.$n.0/24, ; done


    192.168.101.0/24,192.168.102.0/24,192.168.103.0/24,192.168.104.0/24,192.168.105.0/24,192.168.106.0/24,192.168.107.0/24,192.168.108.0/24,192.168.109.0/24,192.168.110.0/24,192.168.111.0/24,192.168.112.0/24,192.168.113.0/24,192.168.114.0/24,192.168.115.0/24,192.168.116.0/24,192.168.117.0/24,192.168.118.0/24,192.168.119.0/24,192.168.120.0/24,192.168.121.0/24,192.168.122.0/24,192.168.123.0/24,192.168.124.0/24,192.168.125.0/24,
    Ответ написан
    1 комментарий
  • Простейший решардинг для PostgreSQL?

    voidnugget
    @voidnugget
    Программист-прагматик
    Зависит от конкретной версии PostgreSQL'я.
    Если самый простейший - можно с коробки в 9.5 через postgres_fdw вот так . В <9.5 нельзя так как там внешние таблички (foreign tables) не могут наследоваться. Cам fdw afaik однопоточный по историческим причинам, по этому имеет смысл хранить сразу несколько шардов в пределе одного сервера.

    Если нужна поддержка, и что-то попроще чем ванильный SQL, то лучше взять какое-то готовое расширение (extension) типа pg_shard, и потом докупить у них же их плюшки к PostgreSQL'ю по потребности. pg_shard умеет только операции равности (equality) хешей столбцов у шардов, эт значит что если выползти за границы таблички любым range query - оно начнёт бороздить все шарды, что порядком надоедает. Реализацию операций сравнения (больше/меньше) хешей пока не замечал, хотя давно его не ковырял. Т.е. хоть это и довольно таки простое решение, без понимания его ограничений чуть более чем наверняка можно напороться на квазилион граблей. Иногда складывается впечатление что разработчики специально затягивают feature list для того что бы клиенты переходили на их платный CitusDB.

    Уууу.... CitusDB сегодня заопенсорсили.

    PostgreSQL-XC нынче чуток морально устарел, и на его основе был разработан PostgreSQL-XL, про который уже упоминалось на хабре. Поддержки как таковой у него нет, но есть пару российских вендоров которые в нём перманентно ковыряются, так как это сугубо опенсорсятинка. Имхо, по функционалу оно на много превосходит pg_shard, и с ним нет таких дурацких проблем, хоть и разворачивается в разы сложнее, не без полуночного красноглазия.
    Ответ написан
    2 комментария
  • 3D и программирование?

    @Itvanya
    Начнем с того, что все физические 3Д движки пишутся, исследуются, моделируется, визуализируются, используя ЯП. А умение программировать никоим образом не может вывести навыки создания 3Д-объектов на новый уровень, потому что работа с 3Д(я не говорю про игрушечные штуки, типа редакторов) - это чистейшая и сложнейшая математика, физика, механика, геометрия и еще куча сфер научной деятельности, которые воссоздаются, используя программные методы.
    Ответ написан
    Комментировать
  • TDD/BDD в чем разница и для каких видов модулей стоит использовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    TDD

    - пишем тесты - маленький кусочек, то что можно минут за 10 написать. На этом этапе мы формулируем что мы хотим написать.
    - пишем код - пишем код, который делает тесты "зелеными". то есть все работает. Мы делаем это максимально быстро, самым тупым способом, который просто быстрее всего сделать.
    - рефакторинг - после того как все работает, или еще через пару итераций, что бы набралось чуть больше "грязи", чистим код поочередно. Важно при рефакторинге чистить что-то одно. Либо код, либо тесты (да да, их тоже надо рефакторить иногда устраняя дублирование). Поправили код - прогнали тесты, все хорошо? тогда можно тесты подправить. Ну и т.д.

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

    TDD - для одного разработчика, BDD - для команды. А BDD-style assertions для chai - это пафос. По сути это "планирование фич" в рамках библиотек и отдельных объектов. Чуть меньший масштаб. Но ничем от TDD вообще не отличается, хотя если сильно постараться можно так же оценивать ценность фич для пользователей нашей библиотеки и т.д.

    Как никак в BDD основная мысль - фичаспеки должен иметь возможность читать продукт оунер или стэкхолдеры, то есть те кому проект собственно нужен, что бы говорить должно работать так или нет. В случае с библиотеками... ну вы пишите что-то для девелоперов, а они в состоянии читать тесты как фичаспеку. И в принципе от предметной области недалеко.
    Ответ написан
    1 комментарий