• Организация доступа к API?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ведь js же может по идее подхватить название вызываемого метода и сделать внутри ajax запрос


    И да и нет: https://developer.mozilla.org/en-US/docs/Web/JavaS...

    В целом я конечно одобряю здоровую лень, но вот это уже нездоровая лень. Во Первых потому что restful api это не RPC (хотя любое RPC можно организовать как restful api). Во вторых, будет сложнее обрабатывать ошибки. В третьих напишите под вашу апишку такой вот клиент и используйте, спрятав все нюансы работы с http внутрь.
    Ответ написан
  • Iptables Как перенаправить трафик пользователя в другой интерфейс?

    @denis_vl
    Программист. Админ. Да и от скуки - на все руки.
    iptables - это по своей сути "файрвол". Но никак не средство маршрутизации, хотя есть варианты.
    А Вам необходимо реализовать source routing на linux машине. Для этого как раз таки и придуман ip rules.
    Сделайте дополнительные таблицы маршрутизации и переправляйте в них пакеты через ip rules.

    А если у вас пользователи получают фиктивные IP адреса, а для выхода в интеренет используется NAT, тогда все еще проще. Делайте SNAT в iptables. и "зана(ч|т)ивайте" каждого пользователя тем адресом, который принадлежит интерфейсу, через который он должен получить выход в интернет.
    Ответ написан
  • Записная книжка программиста?

    lxsmkv
    @lxsmkv
    Test automation engineer
    A еще Google Кееp. Я там все свои находочки-находки храню, да. Списки видео, книг, заметки, regex-ики и все-все-все. Весьма удобно сделано. Быстрый поиск есть, напоминалка. Что еще нужно для счастья :)
    Ответ написан
  • Какой планировщик вы используете?

    @itvsem
    Кто владеет информацией, тот владеет миром
    Внешние планировщики, как бы они хороши не были не сработают, ну мне так кажется).

    Нужно использовать внутренние, а точнее вырабатывать "полезные" привычки.
    На моей практике, одну "полезную" привычку, искусственно, можно создать за месяц, главное выполнять её каждый день или последовательно.

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

    Начните заводить новые, простые "полезные" привычки(поочередно), сразу не нужно вводить несколько):
    1. Вставать в одно и тоже время.
    2. Завтракать, обедать и ужинать в одно и тоже время и это выльется в привычку. Допустим, вы не пошли на обед в 13-00(как всегда), все организм ругается: "- где моя жратва?)". И вы чувствуете дискомфорт.
    3. Усложняйте постепенно привычки:
    - занятие английским
    - хобби
    - спорт
    - кино
    - прогулки
    - программирование

    Надеюсь, через год у вас будет идеальное планирование дел.
    Есть один нюанс, привычки делятся на "полезные" и "вредные". А "вредные" имеют особенность быстро побеждать). Поэтому попробуйте вычленить самую "вредную" свою и в первые месяцы заменить её на "полезную".

    Возможно, я не прав и есть идеальные планировщики....
    Ответ написан
  • Как выбрать клаву для кодинга?

    @Fixid Куратор тега Железо
    Sculpt Ergonomic Desktop Keyboard
    Использую 3й год, мягкое, четкое нажатие. Нажимается на под любым углом и в любом месте. Двойной пробел
    Ответ написан
  • Книга по шаблонам проектирования?

    OnYourLips
    @OnYourLips
    Есть классика от "Банды четырех". Актуальна ли она сейчас и стоит ли с ней ознакомится?

    Не советую: книга старая, стиль изложения в духе того времени: тяжёлый и монотонный.
    Информация в этой книге актуальная, но лучше выбрать другую книгу: потратите меньше времени на усвоение.

    Советую книгу по паттернам от Head First.
    Ответ написан
  • Быстрый LIKE по 1 миллиону строк, как быть?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Вначале, все слова записываем в виде хеша так, чтобы буквы шли по-порядку, но повторные - не повторялись. 'мама мыла раму' => 'ма ылру'
    Можно дополнительно создать еще один кэш и отсортировать в порядке убывания кол-во повторов букв:
    Приведём новый пример: 'мыла раму мама' (переставим слова местами)
    'мыла раму мама' => [м-4][ы-1][л-1][а-4][(пробел)-2][р-1][у-1]=>'ма ылру' (предыдущий пример останется без изменений...)
    и поиск вести по половинам хэша (при нечетном кол-ве -округляем в большую сторону) введённой строки 'ма ылру':
    1. При не найденных совпадениях, порядок такой: 'ма ы'=>'ма'=>'м'
    2. При найденных совпадениях, порядок такой: 'ма ылр'=>'ма ыл' Как выдача будет нулевая - берём предыдущий МИНИМАЛЬНЫЙ! результат выдачи.

    Таким образом можно отловить с большей вероятностью пропущенные буквы при вводе.

    Можно составить отдельную таблицу по всем словам и привязать их к основным данным.

    Затем выборка этажеркой:
    1. Преобразуем так же вводимую строку и выбираем LIKE 'ма мыл%'
    (возможно несколько выборок с проверкой пропущенной буквы) запоминая результат выборки.
    2. По этому результату ищем полную строку с тем же LIKE 'мама мыла раму%'
    3. При следующем поиске, если хэш не уменьшился и символы в диапазоне длины предыдущего хэша не изменились - мы ищем СРАЗУ ЖЕ! по результату п.1 (и снова запоминаем результат), экономя время (т.е. поиск как бы идёт по предыдущему кэшу).

    Таким образом получается, что чем больше букв, тем меньше записей мы перебираем.
    А чем меньше мы перебираем, тем больше у нас времени остаётся и мы можем его использовать на дополнительные запросы: для нечеткого поиска.
    Ответ написан
  • Continuous delivery, Continuous integration, Docker при "многоверсионном" приложении. Как организовать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Не нравится, что в итоге заводится куча тегов, веток, может есть альтернативное решение для такой задачи?

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

    Схема кажется немного избыточна nginx->nginx->php, в итоге на сервере дофигища разных процессов, особенно nginx.

    Тут все зависит от того, можно ли отдавать клиенту доступ на прямую к nginx2. Если нельзя - ваша схема вполне норм. Если же можно - тогда стоит это делать, смотрите в сторону своего балансировщика, который будет отдавать клиенту сервер, который А - жив, Б - минимально нагружен и штук типа consul.

    ansible забирает из гита исходный код, грузит на сервер, в контейнеры исходники пробрасываются через volume.

    Зачем? Контейнер как бы иммутабельный и все такое. Если у вас там кучка статики подсасывается не под git - смотрите в сторону mogilefs и т.д. Безусловно, для разработки volume - самое оно, но для прода - ну такое..., должна быть веская причина.
    Ответ написан
  • Какие есть объективные причины для перехода на Linux вебразработчику?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Почему до сих пор считается, что основной ОС вебразработчика должна быть ОС на основе Linux?

    Как правило, это на порядок удобнее.

    Да, можно под виртуалкой запустить линуху, но зачем?)
    Да, можно эмулировать линушную консольку, но половина хоткеев у вас работать не будет.
    Да, можно докер в виртуалке поднять, но под линухой он будет нейтивно работать.
    Да, можно считать, что вагрант вас спасет, но тот же ансайбл придется таки вовнутри поднимать, а не использовать хостовой.
    Да, можно приблуды для виртуальных рабочих столов прикрутить, но зачем, это идет в коробке с большинством DE.
    Да, можно по полной программе обмазываться putty и понасохранять все ваши доступы, но проще настроить ~/.ssh/config.
    Да, можно понаустанавливать вот это ваше все с официальных сайтов, но проще натапть "apt install **", или "yum install **".
    Да, можно залезть в политики безопасности и сделать "зашибись", но для обычной dev тачки под nix чаще всего вам это и не нужно.
    Да, можно закачать крутых прог, которые вам скрытые процессы покажут, но проще ввести есть ps aux.
    Да, можно в .gitattributes понапрописывать text eol=lf, но опять же зачем, если только у винды принят crlf?
    Да, можно понаотключать BOM, но опять же зачем?
    Да, можно считать реестр - удобной штукой, но это не так))
    и т. д...

    Из таких мелочей и состоит пользование ОС.

    Чуть не забыл:
    Да, можно считать, что комп под виндой принадлежит вам...))
    Ответ написан
  • Высоконагруженные системы, каковы принципы разработки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    давайте так, есть два вида задач:

    - CPU bound - различные алгоритмы, математика, кодирование/декодирование/шифрование... словом все что нагружает процессор.
    - I/O bound - собственно когда у нас идет множество операций с вводом/выводом, где-то 90% задач связанных с WEB и серверной разработкой.

    Для CPU bound стоит использовать языки вроде Си, Rust, Dlang, Go и т.д. Словом языки которые компилируются в эффективный машинный код.

    Для I/O bound - Go, NodeJS, Erlang, Java.... да в принципе не важно какой язык, главное что бы использовались неблокируемые вызовы и отсутствовали блокировки.

    Еще есть очереди задач, горизонтальное масштабирование и т.д. Архитектура и алгоритмы используемые в системе влияет часто намного сильнее нежели языки программирования.

    Какие языки лучше использовать для этого? Какие не использовать?

    Никаких ограничений, только здравый смысл. То есть врядли мы будем писать сложную математику на node.js, но задач связанных с этим намного меньше. Так же никто не говорит о том что систему нужно писать строго на одном языке. Нынче модно использовать микросервисы, каждый из которых может быть реализован на своем языке и со своей базой данных, идеально подходящих для конкретной задачи.

    Еще не стоит забывать о алгоритмах. Они тоже должны быть оптимальны. Например взять простую задачу - кластеризация меток на карте. Представьте что у вас в базе миллион объектов, которые мы должны выводить на карте. Поскольку делать подобное на клиенте будет проблематично - мы должны делать это на сервере и возвращать на клиент ровно столько данных сколько ему нужно.

    И на таких объемах даже если бы мы взял Си, если наш алгоритм имеет сложность O(N^2) то как бы ничего тут особо не поделать. И так и так медленно будет. А вот если мы возьмем какие-либо алгоритмы имеющие сложность O(NLogN) то уже возможно что алгоритм этот можно хоть на php/python/ruby имплементить. Так например у меня этот алгоритм реализован на Java и не самым эффективным образом. Справляется.

    Еще влияет скорость разработки (всякие ruby/python/node в этом плане хороши), стоимость поддержки (Си поддерживать сильно дороже чем Go например, хотя всегда можно написать все настолько плохо что проще выкинуть чем поддерживать), стоимость разработчиков.... Скажем найти дешевых сильных разработчиков на Go или Rust будет весьма проблематично.

    Так же не стоит забывать что сервера нынче стоят не так дорого. Иногда бизнесу проще доплатить за еще десяток серверов нежели писать все на плюсах.

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

    sim3x
    @sim3x
    Хочешь больше зп?
    Найди новую работу

    АПД
    Теоретически, нужно поговорить с начальством. Да

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

    Даже теоретики в коментах

    АПД2
    У прохождения собеседования есть еще преимущества
    - ты получаешь подтверждение своей квалификации и необходимости тебя на рынке
    - ты получаешь денежный еквивалент своей ценности
    - ты получаешь повышение навыка прохождения собеседований - ето отдельный навык, который не часто пересекается с навыком программирование/разработка/администрирование/...
    - в случае провала собеседования у тебя нет никаких побочных еффектов
    - ты получаешь срез навыков необходимых рынку
    Ответ написан
  • Для чего нужны Генераторы (yield) в php?

    @Nc_Soft
    парсим большие csv
    <?php
    function getRows($file) {
        $handle = fopen($file, 'rb');
        if ($handle === false) {
            throw new Exception();
        }
        while (feof($handle) === false) {
            yield fgetcsv($handle);
        }
        fclose($handle);
    }
    
    foreach (getRows('data.csv') as $row) {
         print_r($row);
    }
    Ответ написан
  • В чем преимущества *nix, linux перед windows (для веб разработчика)?

    DevMan
    @DevMan Куратор тега Linux
    1. вы получаете окружение близкое или идентичное к продакшену.
    2. вы получаете внятную консоль/шел из коробки.
    3. вы избавляетесь от массы вопросов типа "на локалке все работает, а залил на сервер и получил жопу" (или наоборот).
    4. у вас появляется более лучшее понимание как на сервере все работает.

    при теперешнем развитие технологий и производительности железа, нет необходимости себя ломать.
    можно попробовать в виртуалке (docker/vagrant)/дуалбуте и самому для себя решить стоит или нет.
    Ответ написан
  • Кто понял docker?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    для доступа к ФС свой


    Нет, для доступа к ФC используйте именованные волумы (named volumes). Контейнеры (data-only) для этог оне нужны.

    Между собой без проблем, а как отправить это дело на рабочий сервер, не ручками?


    docker registry, либо используем платный либо ставим у себя и там храним образы. То есть если кто-то решил обновиться до php7.0 мы должны заменить базовый контейнер, проверить что все работает, запушить... а у всх все подтянется.

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


    Именно, никакого отношения к докеру. Я обычно миграции накатываю прямо при старте контейнера. Так надежнее.

    Может кто поделиться ссылочкой на статью

    На статью - нет, их много. Могу поделиться тем как я использую docker на своих проектах. Там описан процесс сборки и деплоя в крадце. В идеале сборкой и деплоем должен заведовать CI-сервер а не руками локально:

    https://github.com/intellectsoft-uk/symfony-skeleton
    Ответ написан
  • Легко ли "соскочить" с docker?

    Один раз разобравшись слезать не захочется никогда ( в обозримом будущем).
    Конфиги для сервисов не придется менять сильно, в основном только места роутинга( но такие места и найти легко, и их не так уж много). А дальше уже вопрос в том, куда перелезать будете.
    Ответ написан
  • Что было не так с ArrayHelper::index до Yii2 2.0.8?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Это Yii.

    Ancient-Aliens.jpg

    В целом просто посмотрите историю коммитов. Вот с этого коммита появился третий параметр:

    https://github.com/yiisoft/yii2/commit/ef8b0a2be0f...
    Ответ написан
  • Как вызвать метод в Symfony с autowire'ингом?

    Radik_Wind
    @Radik_Wind
    Для того, что бы ваши сервисы соответствовали лучшим практикам Symfony зависимости в них нужно передавать следующим способом:
    - в конструкторе, для тех зависимостей без которых ваш сервис работать не будет, к примеру data source или что то подобное
    - в сеттерах зависимости без которых ваш сервис будет работать, но будет не доступна какая то часть не основной функциональности, к примеру логирование
    - ну и не нужно в качестве зависимостей передавать сам контейнер, некоторые разработчики грешат этим, особенно когда сервис имеет много зависимостей, если у вас возникает такая необходимость стоит разделить сервис на несколько более мелких самодостаточных сервисов с минимумом зависимостей
    Ответ написан