• Какой плагин выбрать для проверки маски ввода телефона?

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

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Вы путаете понятие "научиться программировать" и "стать хорошим специалистом, уровня сеньор архитектор".

    Неужели вы действительно считаете, что для того, чтобы стать крутым специалистом достаточно почитать 5-10 книжек?
    Нужны годы практики, ошибок, и стремления понять и эти ошибки исправить.
    Ответ написан
    2 комментария
  • Есть ли SQL база с mime-types и иконками к ним?

    27cm
    @27cm
    TODO: Написать статус
    1. Берём какой-нибудь наиболее полный список mime типов:
    svn.apache.org/repos/asf/httpd/httpd/trunk/docs/co...

    2. Любой большой набор иконок для mime типов:
    github.com/eagerterrier/MimeTypes-Link-Icons/tree/...

    3. Пишем небольшой скрипт на любом известном вам языке и база готова.

    ...Это на случай, если никто вам так и не скинет готовую базу.
    Ответ написан
    Комментировать
  • Будет ли нормально работать псевдо стримминг на php?

    @remzalp
    Программер чего попало на чем попало
    Собственно эта вот строка:
    if (!($this->stream = fopen($this->path, 'rb'))) {
    намекает на то, что скрипт открывает файл только на чтение, так что проблем у параллельных процессов с доступом к этому файлу как-бы совсем нет.

    Проблема может быть в количестве одновременно запущенных процессов php. 1000 коннектов = 1000 запущенных процессов, каждый процесс кушает запросто мегабайт 50. Оперативной памяти серверу хватит? :)

    Все вопросы авторизации лучше доверить профессионалам:
    erlyvideo.ru/doc/auth
    Ответ написан
  • Почему не получается прочитать/записать bmp изображение?

    alsopub
    @alsopub
    У вас часом не indexed color bmp?
    Судя по тому как выглядит начало файла - там что-то очень похожее на палитру.
    Ответ написан
  • Какой путь у новичка в Go?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Go идеален для новичков, потому что он сделал процесс входа в язык максимально простым. И так, схема действий:
    1) https://tour.golang.org/ - проходим весь курс. Самое важное в этом туре - это задачи. Они занимают 80% времени, но дадут 95% понимания и главное что вы лучше всё запомните
    2) Effective Go читаем полностью.

    Всё, вы уже можете считать себя программистом на Go и будете понимать почти всё о чём говорят другие программисты.

    На оба этих шага вы потратитен пару дней. Я уверен, что любые книги про Go вам в итоге не дадут больше информации, чем эти два шага, зато сожрут кучу времени.
    Ответ написан
    Комментировать
  • Имеет ли смысл начинать с Си?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Плюсы:

    Си это сила. У него пока нет конкурентов в системном программировании (разве что rust подкрадывается и D, но они чуть на другие вещи ориентированы).

    Минусы:

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

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

    Если же вас интересуют более мэйнстрим вещи вроде web или мобильная разработка - проще сразу брать какой-нибудь современный динамический язык (python, javascript) и радоваться жизни.
    Ответ написан
    12 комментариев
  • Для чего нужен Docker?

    @spotifi
    Внутри Docker только Linux, и, экспериментально, FreeBSD. Запускается нативно под Linux и, экспериментально, под FreeBSD. Под MacOSX, Windows - через виртуальную машину.

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

    Это почти виртуальная машина. Почти, да не совсем.


    Есть такое понятие "ад зависимостей". Любое ПО устанавливаемое на компьютер, тянет за собой зависимости (конфигурационные файлы, статические файлы называемые обычно asset, вспомогательные утилиты/сервисы, библиотеки и пр.). Ряд из этих библиотек/утилит/сервисов несовместим друг с другом. А с учетом того, что каждая из этих библиотек/утилит/сервисов имеет и свои зависимости - ситуация еще хуже.

    Например, мы используем Yandex.Cocaine, которая нормально компилируется только на Ubuntu 14.04 (и, вроде, на Debian 7). Но не под CentOS 6, 7, Debian 8, FreeBSD 9, 10, Ubuntu 15, 16 и пр. - скомпилировать его невозможно. Запускаем в этих операционных системах в Докере.

    С другой стороны, и одновременно с этим, вам необходимо установить другое, более современное ПО. И одновременно более старое. Причем речь даже не идет об серьезно отличающихся версиях Linux. Например, одно ПО требует не менее Ubuntu 14.10, а другое не более Linux 14.04.

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

    Таким образом, мы имеем бинарный файл запускаемый как бы в своей операционной системе.

    Вы можете сказать - ба, да это же давно известная виртуальная машина. Но нет, это не так. Это так называемые контейнера. Никакой виртуальной машиной там и не пахнет. За исключением Windows и MacOSX, где работа без виртуальном машины пока экспериментально возможно только, а нормой в этих ОС является использование Докера внутри полноценной виртуальной машины.

    Но виртуальные машины с Докером используются только для разработки. Для запуска в production виртуальные машины с Докер не используются.

    Докер использует контейнеры операционной системы. LXC в Linux, Jails в FreeBSD. Контейнер - это область операционной системы, изолированная от основной части операционной системы. В контейнере свое дерево каталогов (включая системные /dev, /bin, /sbin и пр.), свои сетевые порты и пр. и пр.

    Но при этом не используется полная виртуализация. Что существенно экономит ресурсы. Запустить 100 полноценных виртуальных машин вряд ли получится даже на мощном сервере. А вот запустить 100 контейнеров Docker даже на слабом домашнем компьютере - возможно.

    Правда использование не полной виртуализации ограничивает использование операционных систем внутри контейнеров. Как правило, это специально подготовленные версии Linux или FreeBSD. Именно специально подготовленные. Windows - в принципе в контейнере запустить невозможно.

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

    Зачем это используется?

    Ребята из всяческих Dropbox, Facebook и и пр. гигантах, запускающие по 1 млн. различных программ в своих сервисах, столкнулись, что невозможно везде гарантировать идентичные настройки операционной системы. А это критично.

    Вплоть до того, что идеально написанная и оттестированная программа на реальном сервере начинает себя вести непредсказуемо.

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

    Более того - изначально разработчик программного обеспечения тестирует программу в контейнере Докер, с определенными настроками. И в этом же (или с такими же настройками) контейнере Докера программа уезжает на сервер.

    Это позволяет гарантировать гораздо большую идентичность среды разработки и среды исполнения.

    До этого люди мучались, придумывали хитрые инсталяторы...

    Потом плюнули на попытки упорядочить окружение в ОС - и сейчас концепция такова - устанавливать программы на сервера вместе со своими индивидуально настроенными под них операционными системами - то есть внутри контейнеров. 1 контейнер = 1 настройка ОС = 1 программа внутри.

    Другими словами:
    • Докер-контейнер нужно использовать для отладки.
    • Тот же Докер-контейнер нужно использовать и на сервере.


    Это позволяет не трудиться с настройками "под сервер" локально на машине разработчика. Это позволяет разрабатывать на машине разработчика совершенно разные программы одновременно, которые требует несовместимых настроек операционной системы. Это позволяет давать гораздо больше гарантий, что программа на сервере будет вести себя также как и на машине разработчика. Это позволяет разрабатывать под Windows/MacOSX с удобным "прозрачным" тестированием под Linux.

    Докер применим к созданию/настройке только серверного программного обеспечения под Linux (экспериментально под FreeBSD). Не для смартфонов. А если десктопов - то только программное обеспечение без GUI.

    Посколько Докер позволил одним махом упростить работу разработчикам и админам и повысить качество результата - сейчас бум на Докер. Придумано огромная гора инструментов для управления развертыванием приложений созданных с Докером. Если раньше чтобы запустить 10 000 программ на 1000 серверах нужно было как минимум 3 высококвалифицированнейших девопса, которые писали кучу описаний как это сделать на Puppet, Salt, Chef, Ansible, да и то не было гарантий, это все тестилось месяцами. То сейчас с Докер даже один квалифицированных девопс может рулить миллионами программ на десятках тысяч серверов. С куда как большей гарантией, что все это заведется нормально.

    UPD:

    Может сложиться ложное впечатление, что разработчик готовит контейнеры в Докер, а потом передает их админу.
    Правильная методология все же другая:

    Разработчик отдает весь свой результат в систему CI (обычно через git)
    CI на каждый новый коммит делает с помощью Docker образ для тестирования.
    Если тесты проходят успешно, то этот же самый Docker образ, отправляется на развертывание в production.
    Или, чуть иначе в компилируемых системах, где исходники не нужны в production: в Docker производится развертывание среды для компиляции, а для тестирования разворачивается второй образ с уже откомпилированным добром, который уже отправляется в production.

    То есть при правильной огранизации дела разработчик не может/не должен влиять на то, какой будет образ.
    А вот в тестовой среде (запускаемом на сервер, недоступном разработчику в больших командах) и в production как раз используется один и тот же образ.

    Основная идея - что тестировали, ровно то и запускаем на боевом сервере. Один-в-один, включая те же самые файлы (не такие же, а именно те же самые).
    Ответ написан
    18 комментариев
  • С чего начать изучение MySQL для веб-проекта?

    kiberspy
    @kiberspy
    Я думаю, нужно начать читать/учить о базовом SQL-языке (синтаксис которого идентичен, наверное, процентов на 70 для всех серверов реляционных БД)...
    Установите MySQL и из консоли пробуйте подключиться к нему, создать/удалить таблицы, добавить/удалить/обновить записи... создать запросы на выборку данных и объединение таблиц... и т.д. и т.п.
    Ответ написан
    Комментировать
  • В чем преимущества *nix, linux перед windows (для веб разработчика)?

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

    при теперешнем развитие технологий и производительности железа, нет необходимости себя ломать.
    можно попробовать в виртуалке (docker/vagrant)/дуалбуте и самому для себя решить стоит или нет.
    Ответ написан
    17 комментариев
  • Почему PHP не создаёт объект из подключаемого файла через функцию?

    alsopub
    @alsopub
    Попробуйте
    $mysqli = new mysqli('localhost', 'user', 'pass', 'database');

    заменить на
    $GLOBALS['mysqli'] = new mysqli('localhost', 'user', 'pass', 'database');

    Дело в том, что вы require вызываете внутри функции, и $mysqli создается внутри функции и за ее пределами не существует.
    Ответ написан
    3 комментария
  • Что наследуется в ООП?

    Класс наследуется, интерфейс реализуется.
    interface I {}
    class A {}
    class B extends A implements I {}

    Класс обычно называют чертежом объекта. А интерфейс - это контракт, который объект обязан выполнить.

    Возьмем, например, Велосипед, Грузовик и Мотоцикл.

    Мотоцикл - это почти Велосипед, он делается по тому же чертежу с небольшими дополнениями. Это наследование. Грузовик при этом ни от Велосипеда, ни от Мотоцикла не наследуется, у него совсем другой чертёж.

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

    А вот если у вас есть контракт Автомобиль, то вы знаете, что можете выполнить такие действия как ОткрытьКапот, ВключитьСтеклоочистители. Велосипед при этом не сможет реализовать такой интерфейс. А Грузовик будет реализовывать оба контракта: хотите - передвигайтесь, хотите - открывайте капот.
    Ответ написан
    2 комментария
  • Как разместить запрос к базе данных PDO внутри функции на PHP?

    DevMan
    @DevMan
    так $pdo у вас в функции не определена, о чем вам английским по белому и говорится.
    попробуйте для начала первой строкой в функции написать
    global $pdo;

    да, это плохо, но учить вас хорошему у меня нет сил.
    Ответ написан
    8 комментариев
  • Есть ли удобные сервисы для верстки писем?

    R0s0maxa
    @R0s0maxa
    junior web-developer
    В Foudation есть предустановленные шаблоны емейлов, может один из них подойдёт.
    Ответ написан
    Комментировать
  • Как рассчитать габариты посылки?

    Очевидно, ответ будет зависеть от того, как именно вы будете их укладывать. Комбинаций не так уж много. Если параллелепипед A неподвижен в определённой системе координат с осями X, Y, Z, то существует несколько способов уложить B:
    - Сверху на A (выше по направлению оси Z)
    - Справа от A (по направлению оси X)
    - Впереди от A (по направлению оси Y)
    Такие варианты как снизу, слева, позади от A в смысле укладки в коробку никакой разницы не несут.
    Для каждого из трёх вариантов можно посчитать параллелепипед, описанный вокруг первых двух. Например, для первого случая имеем: max(A1, B1), max(A2, B2), sum(A3, B3).
    Из трёх комбинаций можно выбрать ту, где объём меньше всего, то бишь упаковка плотнее.
    Ответ написан
    Комментировать
  • Как сделать сложный парсинг страницы?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    У вас в вашей веб студии ни одного программиста нет?

    Наводка простая - смотрите инспектором на AJAX запрос, копируете его для cURL (правой кнопкой по самому запросу, скопировать как cURL) и повторяете, собственно, курлом. Если ответ такой же, значит вы уже решили задачу и осталось лишь распарсить данные.
    Ответ написан
    9 комментариев
  • Как правильно сделать аутентификацию на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Погуглив, я посмотрел исходники Yii, Симфони и PHPixie, чтобы узнать, как аутентификация сделана у умных людей


    Не забывайте, что в фреймворках это все сделано с одним расчетом - покрыть 95% возможных юзкейсов. А в связи с этим реализация чуточку сложнее. Так же не стоит забывать, что все это "должно" работать на php5.4+, а, например password api появился только в 5.5, а хэширование пароля это целая наука.

    Давайте разложим задачу на под задачи:

    Нам нужно проверить введенные пользователем данных. Это может быть пара идентификатор + какой-то секретный ключь (email + пароль если проще), а может это просто секретный ключ (токен), или JWT токен... словом вариантов тут много, но нам пока нужна пара старых добрых email + пароль.

    Для этого в PHP есть весьма простая в использовании апишка для работы с паролями: password api. Используйте только ее (или что-то что ее под копотом использует) ибо это самый безопасный и надежный способ работы с паролями в PHP. Обязательно прочитайте этот раздел документации.

    В очень простом случае (коих большинство) вам при регистрации нужно просто загнать строчку в password_hash и получить на выход новую строчку, которая пишется в базу. При логине мы забираем пользователя с указанным email и проверяем введенный пароль через функцию password_verify.

    После того как мы убедились что пользователь не выдает себя за другого, мы можем создать сессию. В самом простом случае мы просто создаем сессию с ID юзера и... собственно все. идентификатор сессии будет записан в http-only куку и все здорово. Правда при работе с сессиями в PHP нужно помнить про CSRF атаки, от которых нужно защищаться (что умеют практически все фреймворки из коробки).

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

    p.s. поскольку этот вопрос весьма щепетильный, и ля того что бы сделать все это "безопасным" нужно порядком опыта, я рекомендую вам разобраться с фреймворками или готовыми популярными библиотеками.
    Ответ написан
    1 комментарий
  • Как работать с заказчиками, если ты дотошный, а они мыслят "в общем"?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    всего 2 недели разработки могут сэкономить целых 2 часа проектирования


    Составляйте ТЗ либо самостоятельно, либо на пару с заказчиком. Пока у вас не закончатся вопросы - работа не начинается в принципе. Базовое проектирование "что-где" у вас будет происходить уже в этот момент.
    Ответ написан
    Комментировать
  • Есть ли смысл от сверки пароля?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    В данном случае понятие "лучше" неприменимо - это две равноценных альтернативы со своими плюсами и минусами. Выбирайте любую, недовольные будут в любом случае :)
    Ответ написан
    Комментировать