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

    copist
    @copist
    Empower people to give
    Привет. Могу помочь разорвать цепочку, оформить веб-портфолио дизайнера и разработчика https://webmentor.pro/portfolio

    В качестве идей для веб-дизайнера:

    Посмотри не на themeforest, где уже целые темы - это сложно для начинающего концепцию целого сайта придумать, а на https://dribbble.com/ - там дизайнеры публикуют очень небольшие по объёму работы, например только форма обратной связи или одна страница приложения-чата.

    Первый вариант - ревью чужих работ.
    Как дизайнеру я предлагаю тебе взять раздел "Дебюты" https://dribbble.com/shots?list=debuts, оценить любую работу по качеству, найти недостатки. Считай что ты как будто занимаешься приёмом на работу другого дизайнера. Встал на другую сторону так сказать.
    После твоего же ревью найди возможность улучшения чужой работы, исправить самостоятельно, то есть перерисуй с учётом своих же замечаний.
    После этого в портфолио можно вставить чужую работу как образец, свои замечания к ней и переработанную личную версию. С пометкой "ревью", "ремейк", "по мотивам". Это не воровство, а абсолютно самостоятельная работа.

    Второй вариант, который встречается на практике - рисовать новые страницы сохраняя общий стиль и идею.
    Вот дали тебе PSD макеты нескольких страниц или UI Kit с полным набором всех элементов интерфейса. Нарисуй страницу, которой нет. Например, у тебя на руках только PSD главной страницы и формы обратной связи. Как бы выглядела страница со списком клиентов, страница тарифов, страница личного кабинета пользователя, страница витрины интернет-магазина в том же стиле? Эта работа дизайнера. Они не всегда рисуют дизайн с нуля. Бывает к проекту подключают второго или третьего дизайнера и они обязаны продолжать работу в одном стиле.
    Это не воровство, а тоже абсолютно самостоятельная работа.

    Третий вариант - имитация работы с заказчиков и исполнителем.
    Ты ведь часто ходишь по сайтам, мы все тут часто куда-то ходим. Поставь себе таймер на какой-нибудь момент времени и когда он сработает - СТОП! - та страница, на которой ты сейчас находишься - она требует срочного редизайна.
    1) представь, что ты сам заказчик:
    посмотри на то что уже есть на странице;
    определи задачу, которую решает эта страница;
    определи задачу, которую решает этот сайт;
    опиши задание дизайнеру на редизайн
    2) представь, что ты сам дизайнер:
    сделай прототип;
    черновой дизайн;
    и наконец выполни задачу
    И это не воровство, а самостоятельная работа.

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

    Покупать только PSD считаю бесполезной тратой. Рекомендую брать сразу готовый результат вёрстки (то есть HTML шаблона сайта), к которому прилагается PSD, чтобы сделать вёрстку самостоятельно и потом сравнить свой вариант и вариант более опытного верстальщика. Учиться у старших, можно сказать. Особенно ценными считаю макеты, у которых есть ревизии, то есть их переделывали несколько раз, исправляя замечания.
    Ищи в google по фразе "free PSD HTML5"
    Примеры:
    bootflat.github.io
    https://thesiteslinger.com/blog/free-html-templates
    graphicdesignjunction.com/2015/10/html5-website-te...

    Есть вариант списаться с дизайнерами, которые выложили на themeforest только PSD макеты. Их можно сверстать и продавать самостоятельно или совместно с автором темы согласно вашей договорённости.

    Конечно же веб-разработчику каждый HTML макет в итоге нужно запрограммировать. Сделать на его базе сайт с нужной функциональностью, решающий какую-то задачу. А какую именно - придумай сам.
    Генераторы идей:
    tevko.github.io/practice/index.html
    https://copist.ru/ru/blog/2016/02/11/pet-project-ideas/
    Ответ написан
    Комментировать
  • Как в PHP принять объект с файлом?

    copist
    @copist
    Empower people to give
    Отправлять файл черех AJAX - не простая задача. Есть несколько способов. Самый простой - если используются современные браузеры - использовать объект FormData. Этот JS класс умеет преобразовывать поля разного типа, включая file.

    <form id="form" action="send.php" method="post" enctype="multipart/form-data">
    <input type="file" name="UploadForm[attachment][]" multiple="">
    <button type="submit" class="btn btn-primary input-lg">Submit</button>
    </form>


    $.ajax({
        url: "send.php",
        data: new FormData($('#form').get(0)),
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
        error: function(jqXHR, textStatus, errorThrown) { /** @var jqXHR jqXHR */
            console.log('error', textStatus, errorThrown);
        },
        success: function(data, textStatus, jqXHR) { /** @var jqXHR jqXHR */
            console.log('success', data);
        }
    });


    Рабочий пример: форма с аттачментами отправляется через AJAX (кнопка в подвале страницы, извиняюсь)

    Варианты без FormData описаны в статье https://blog.arvixe.com/how-to-send-multipart-data...
    Я раньше пользовался фреймами, а потом перешёл на библиотеку www.dropzonejs.com - она сама подбирает вариант в зависимости от возможностей браузера.
    Ответ написан
    1 комментарий
  • Возможно ли выжать все соки из vue.js без webpack?

    copist
    @copist
    Empower people to give
    Есть вариант "рисовать" главные страницы через внешние сервисы
    https://toster.ru/answer?answer_id=668876#comments...
    https://toster.ru/answer?answer_id=916006#comments...
    Ответ написан
    Комментировать
  • Как вытащить из массива URL картинки?

    copist
    @copist
    Empower people to give
    Используйте var_export($arResult)

    echo $arResult['DETAIL_PICTURE']['SRC'];
    echo $arResult['PREVIEW_PICTURE']['SRC'];
    Ответ написан
    1 комментарий
  • Как организовать мини-тренировки по программированию (для себя)?

    copist
    @copist
    Empower people to give
    Список которым пользуюсь я:
    1. Регулярно участвуй в сообществах взаимопомощи веб-разработчиков. Отвечай на вопросы на toster / hashcode / mail.ru / stackoverflow и сотне подобных сервисов. Это тебе самому поможет разобраться в проблемах, заодно набьёт карму. Тут нет противоречия - помогай другим, чтобы учиться самому.
    2. Занимайся проектами с открытым кодом. Например, решай issue из чужих репозиториев на github, вот утилита для выбора случайного issue по нужному языку tevko.github.io/practice/index.html. Заодно включай их в своё портфолио.
    3. Учись читать чужой код, делай ревью чужого кода. Например, на codereview.stackexchange.com/. Потому что читать код - это 80% работы программиста.
    4. Можно попробовать оказывать микроуслуги (пример: work-zilla.com или https://www.fiverr.com/ - ищи аналоги) - будешь получать небольшие деньги за выполнение разовых работ, в частности исправление чужих сайтов, парсинг данных и прочее. Я так и начинал. Не с бирж фрилансеров, а с бирж микроуслуг. Там гораздо меньше объём работ, такие микроработы легко выполнять в свободное время.
    5. Поищи проекты, где начинающие веб-разработчики ищут себе компаньонов для совместных проектов. Например, дизайнер ищет фронта, бакенд ищет фронта. Я видел, есть специальные разделы на форумах на Envato, Behance.
    Ответ написан
    Комментировать
  • Авто создание поддомена с сайтом?

    copist
    @copist
    Empower people to give
    Когда я впервые познакомился с сервером, который создаёт поддомены третьего уровня, а также умеет "парковать" домены второго уровня, я прежде всего представил себе, что там автоматически создаются директории для пользовательских скриптов, конфиг для апача и какой-то рутовый демон делает sudo service apache reload

    Но на деле оказалось не так.
    1. В DNS стоит правило (см https://toster.ru/q/7456) - все поддомены ***.myservice.ru отправляются на один IP
    * IN A 192.168.1.1
    Замени 192.168.1.1 на IP твоего сервера

    2. В апаче/nginx не стоит привязка виртуального хоста к имени домена (myservice.ru или иной), все запросы отправляются на обработку на один скрипт (PHP?)

    nginx
    {
        listen 80;
        # server_name не указывать
    }


    3. В коде приложения (PHP) вычисляется домен в запросе HTTP и исходя из этого строится ответ
    У пользователя в таблице user прописано имя домена, то есть пользователь Вася - это домен vasya.myservice.ru

    $domainName = $_SERVER['HTTP_HOST']; // vasya.myservice.ru
    $userDomain = $db->findUserByDomain($domainName);
    echo 'Владелец этой страницы: ', $userDomain->fullName; // Владелец этой страницы: Вася
    // ...


    Это если речь про веб-интерфейс. А если у тебя реально разные приложения (бинарники?) ставятся из архива, то тебе нужно запускать разные команды из PHP, например

    1. Создать директорию, сгенерировать конфиги htaccess или host для Apache
    2. Распаковать архив /или слинковать какую-то общую часть через symlink
    3. Заставить Apache сделать reload конфигов

    Для этих команд тебе пригодится php.net/manual/en/function.system.php php.net/manual/en/function.exec.php или php.net/manual/en/function.shell-exec.php

    Последний пункт самый небезопасный, потому нужно пользователю апач дать права на выполнение команды от рута. Лучше делать это по крону или от имени специального сервиса-демона, а не из PHP.
    Ответ написан
    7 комментариев
  • Сode first или database first?

    copist
    @copist
    Empower people to give
    Как специалист по проектированию систем "с нуля" я всегда начинаю с проектирования базы данных, а перед ней идёт анализ предметной области. Модель данных желательно спроектировать не только на MVP, но и на два-три шага вперёд, посмотрев на roadmap проекта.

    Видео: анализ предметной области и построение реляционной...

    Достраивать на ходу тоже конечно приходится, но так чтобы писать код без БД - это самому себе палки в колёса совать, как мне кажется.
    Ответ написан
  • Как спарсить JSON?

    copist
    @copist
    Empower people to give
    $json = file_get_contents('php://input'); // получить JSON из HTTP запроса
    $array = json_decode($json, true); // декодировать в массив
    var_export($array); // и пользуйся на здоровье


    copi.st/Qb8Q on StackOverflow about php://input
    Ответ написан
    Комментировать
  • С какой версии начинать изучение PHP?

    copist
    @copist
    Empower people to give
    Знать про функции (особенно deprecated) версии 5.3+ будет хорошо, а начать лучше с 5.6 - это последняя стабильная в ветке 5.x
    Книгу порекомендую «PHP. Объекты, шаблоны и методики программирования» Мэт Зандстра, четвёртое издание, 2015 год - там PHP 5.6 - книга прям по канонам шаблонов проектирования
    По версии 5.4 можно взять «PHP. Рецепты программирования» Дэвид Скляр, Адам Трахтенберг, третье издание, 2015 год - там отличные примеры кода, которые часто пригодятся на практике.

    Ещё я бы порекомендовал посмотреть на код в ООП стиле для версии 5.0 - он довольно часто фрагментарно (по привычке наверное) используется в 5.3+. Это для общей эрудиции, чтобы не запутаться в синтаксисе приложений, которые могут попасть в руки. Например, передача по ссылке объектов как параметров функций, присвоение объектов по ссылке - это уже не используется, объекты и так передаются и присваиваются по ссылке.

    В руки может попасться код любой версии PHP в процедурном стиле. Весьма своеобразный код. С глобалами, константами и прочей "не ООП" трухой. Процедурный стиль всё ещё используется, особенно для одноразовых консольных скриптов.

    Нужно знать, как мигрировать код с deprecated библиотеками, которые предыдущим программистам лень было заменять на новые (например, mysql_ или ereg_ ).
    Ответ написан
    3 комментария
  • Знайте ли вы онлайн-сервисы по изучению PHP наподобие HTMLAcademy.ru или codecademy.com?

    copist
    @copist
    Empower people to give
    https://vc.ru/p/online-courses Где учиться программисту: 19 онлайн-курсов
    https://habrahabr.ru/post/156241/ 27+ ресурсов для онлайн-обучения
    Там много чего есть по разным языкам, включая PHP
    Ответ написан
    Комментировать
  • Как убрать свободное пространство у svg?

    copist
    @copist
    Empower people to give
    SVG - это текстовый формат, XML. Отредактируй его руками или с помощью Adobe Illustrator или Inkscape

    Пример "до"
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" viewBox="0 0 48 48">
      <path fill="#CFD8DC" d="M6,29V19h36v10H6z M42,16V6H6v10H42z M42,42V32H6v10H42z"></path>
      <path fill="#8BC34A" d="M6,16V6h10v10H6z M25,42V32H6v10H25z M32,29V19H6v10H32z"></path>
    </svg>


    Пример "после"
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" fill="#c0392b">
      <path d="M0 23V13h36v10H0zm36-13V0H0v10h36zm0 26V26H0v10h36z" fill="#e0cbdc"/>
      <path d="M0 10V0h10v10H0zm19 26V26H0v10h19zm7-13V13H0v10h26z" fill="#2196f3"/>
    </svg>


    Скриншот из Inkscape
    3196db7f9c4a4e08834aa5ea1b29e38e.png

    Все редакторы вставляют в SVG свои комментарии и дополнительную служебную информацию, поэтому будет полезно "сжать" файл через утилиту svgo (консоль или веб-сервис).

    Link: иконка Tasks от Icons8

    А вообще свободное пространство появляется в результате выравнивания иконок "по плотности изображения среди всех иконок", а также это может быть авторский стиль. Описание: https://icons8.com/articles/windows-10-icons-style/

    Ещё одним способом выравнивания может быть размещение иконки в контейнер с жёсткими размерами без скроллбаров и чуть смещённая иконка внутри контейнера.
    <div style="position: relative; width: WWWpx; height: HHHpx; overflow: hidden;>
       <img src="..." style="width: WWWpx; height: HHHpx; position: absolute; top: -Tpx; left: -Lpx;>
    </div>
    Ответ написан
    Комментировать
  • Почему возникает такая ошибка с сокетами?

    copist
    @copist
    Empower people to give
    <script src="/socket.io/socket.io.js"></script>
    <script>
    var socket = io('http://localhost:3000'); // <-- хост:порт
    socket.on('news',function (data) {
        console.log(data);
        socket.emit('my other event',{my:'data'});
    });
    </script>
    Ответ написан
    Комментировать
  • Как организовать связь "родительской" таблицы с 2мя одинаковыми наборами данных в "дочерних"?

    copist
    @copist
    Empower people to give
    Не очень понятно слово "связь". Ты подразумеваешь понятие "отношение" реляционной модели данных? (wikipedia)

    CREATE TABLE `A` (
      `ID` INT(11) NOT NULL AUTO_INCREMENT,
       PRIMARY KEY (`ID`)
    );
    
    CREATE TABLE `B` (
      `ID` INT(11) NOT NULL AUTO_INCREMENT,
      `A_ID` INT(11) NOT NULL,
      PRIMARY KEY (`ID`)
    );
    
    -- связь между дочерними записями и родительской записью
    ALTER TABLE `B` ADD CONSTRAINT `B_A_ID` FOREIGN KEY `B` (`A_ID`) REFERENCES `A` (`ID`);


    А то, что у тебя должно быть не больше двух записей B, ссылающихся на A.ID - это средствами MySQL не решается. Можно было бы триггерами решить, но нельзя в триггере обращаться к записям той же таблицы.
    Поэтому это решают внешними средствами, в прикладном приложении.
    Ответ написан
  • Как сохранить значение переменной в интернете?

    copist
    @copist
    Empower people to give
    Ну раз вы упомянули BaaS, то и смотрите на соответствующих сервисах, как это реализуется

    Например, Firebase и его пример приложения для Javascript по работе с хранилищем
    Ответ написан
    Комментировать
  • Как сделать так что бы при заполнении одной textarea заполнялась вторая?

    copist
    @copist
    Empower people to give
    В задаче не стояло указание не использовать jQuery :)
    <textarea id="t1"></textarea>
    <textarea id="t2"></textarea>

    $('#t1').on('keyup', function() {
       $('#t2').val($('#t1').val());  
    });

    Рабочий пример: codepen.io/copist/pen/GjKPzm
    Ответ написан
    2 комментария
  • Как сделать скрытую авторизацию?

    copist
    @copist
    Empower people to give
    Используй HTTP MiddleWare

    Вот решение по ограничению доступа к некоторым URL с проверкой прав доступа авторизованного пользователя
    laravel.io/forum/02-17-2015-laravel-5-routes-restr...

    Но у них при отсутствии некоторой роли идёт редирект на /home , а тебе надо (я так понимаю) вернуть 404 Page Not Found

    public function handle($request, Closure $next)
    {
        if ($request->user()->type != 'A')
        {
            abort(404,'Page not found');
        }
    
         return $next($request);
    }
    Ответ написан
    4 комментария
  • Как реализовать опрос сайта yii2?

    copist
    @copist
    Empower people to give
    Я бы поискал утилиту на любом языке, которая опрашивает сайты и хранит данные в MySQL или другой СУБД. А из PHP написал "мост", который позволяет записать в СУБД задачи для мониторинга и читать оттуда результаты.

    На PHP делать монитор не стал бы принципиально - он медленный в этом вопросе и мульти-поточностью придётся возиться.
    Ответ написан
    Комментировать
  • Почему не собрались svg иконки в шрифт?

    copist
    @copist
    Empower people to give
    Символы для генерации шрифта должны быть максимально упрощены силами Adobe Illustrator или Inkscape.
    • Должен быть только один путь или другой примитив, без пересечений
    • Один цвет, любой
    • Без градиентов, клипов, анимации, текста, скриптов

    В твоём случае - скорее всего элемент чёрного цвета находится поверх квадратика белого цвета или прозрачного квадратика. Открой файл, удали этот квадратик.

    Спонсором ответа является сервис Icons8
    30 000+ иконок в 6 стилях, бесплатно, в любом цвете и размере + редактор + генератор шрифтов

    Я помогу разобраться. Приложи, пожалуйста, в вопросу или в комментариях несколько проблемных иконок и ZIP с результатом генерации (CSS, файлы TTF/OET/SVG/WOFF/WOFF2) и страницу HTML с подключенными файлами стилей c фрагментом, где используются эти символы.
    Ответ написан
    Комментировать