• Замыкание в Python?

    Nikolino
    @Nikolino Автор вопроса
    решено через nonlocal

    def counter():
        counter = 0
        
        def increase():
            nonlocal counter
            counter = counter+1
            return counter
        return increase
    
    a = counter()
    
    print(a()) // 1
    print(a()) // 2
    Ответ написан
    Комментировать
  • Python junior, возможно ли?

    Nikolino
    @Nikolino
    Ну Python ты знаешь (наверное), учишь Django, делаешь один-два CRUD проекта. Локальное окружение разворачиваешь в Docker (MySQL, Redis, RabbitMQ всё там).
    И вот, ты почти познал современную веб-backend разработку. Затем на собеседовании уверенно утверждаешь, что всё это умеешь, можешь с нуля до деплоя сделать проект, делаешь тестовое задание на том же Django.
    Ответ написан
    3 комментария
  • Как учить стандартные библиотеки?

    Nikolino
    @Nikolino
    Изучайте как работают операционные системы: процессы, треды, права пользователя, файлы и файловые дескрипторы, стандартные потоки, перенаправления, пайпы, сокеты.
    Тогда и поймете зачем те или иные функции есть в стандартных библиотеках языков программирования. Дело тут не в Python.
    Ответ написан
    1 комментарий
  • Правильно ли я понимаю, как работает refresh token?

    Nikolino
    @Nikolino
    По истечению часа, на запрос со старым access token будут приходить отлупы в виде "access token is expired", на клиентах обычно ловят этот ответ и шлют запрос с refresh token, чтобы получить новую пару и сразу же отправляют повторный запрос на тот же endpoint с уже новым access token. Поэтому для пользователя приложения это может происходить незаметно.
    Ответ написан
  • Как лучше отобрать претендента на должность джуна?

    Nikolino
    @Nikolino
    По-моему это попытка искать джунов, но с навыками мидла. Чтобы самостоятельно закрывали задачи, не дергали "старших", умели думать.
    Многие скажут, что "джун это готовый специалист". Но готовый специалист, если он уверен в себе, будет себя пробовать на роль мидла, немного приукрасив свой опыт.
    Вы сказали это уже случается систематически, что джуны "тупят", значит вам нужны не джуны. Как в анекдоте "если третий муж бьет по роже...".

    И с собой сравнивать тут не стоит, вы говорите, что быстрее разбирались с задачами и проектом, получается вы себя недооценили и пошли на джуна, а могли бы и на мидла. Ведь понятно, что джун/мидл/сеньор это формальность, важнее быстрообучаемость, сообразительность и желание.
    Ответ написан
    Комментировать
  • Может ли Google контролировать golang?

    Nikolino
    @Nikolino
    Может конечно.
    Скоро рекламу в консоли показывать начнет, когда пишешь go run (go build).
    Пока рекламу не посмотришь, не скомпилируется.
    Ответ написан
  • Почему сейчас такой спрос на go?

    Nikolino
    @Nikolino
    Скорее тут вопрос почему такой хайп вокруг микросервисной архитектуры.

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

    А конкретно Go хорош потому, что шустрый, легкий в изучении, многопоточный. В ютубе полно видео с митапов крупных проектов: Авито, Badoo, VK, Gett такси и т.д. И там очень понятно объясняют где им Go помог. Например, вот видео от Badoo: https://www.youtube.com/watch?v=uO268voCGwA
    Тимлиды разных других компаний насмотрелись на это всё, и тоже захотели попробовать. И начали появляться вакансии и от неизвестных компаний.

    В php тоже появилась асинхронность и многопоточность (React PHP, Swoole и т.д.) и по производительности всё хорошо. Но в продакшн крупные компании, по всей видимости, (пока) это брать не хотят.
    Ответ написан
    Комментировать
  • Как организовать архитектуру проекта для Vue + Laravel?

    Nikolino
    @Nikolino
    В файле resources/js/app.js можно регистрировать компоненты вручную (после window.Vue = require('vue')):

    /**
     * The following block of code may be used to automatically register your
     * Vue components. It will recursively scan this directory for the Vue
     * components and automatically register them with their "basename".
     *
     * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
     */
    
    Vue.component('something', require('./components/Something.vue').default);
    Vue.component('whatever', require('./components/Whatever.vue').default);


    А можно и сборщиком:
    const files = require.context('./', true, /\.vue$/i)
    files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))


    Используешь их в blade шаблонах
    Ответ написан
    Комментировать
  • Как подключить js файлы к определенным компонентам в Vuejs?

    Nikolino
    @Nikolino
    Использовать JavaScript модули, то есть import

    <script>
    import { something } from "./folder/something";
    export default {
      data() {
        return {      
        };
      },
    };
    </script>


    А в самом файле something.js вы можете экспортировать переменные, константы, функции так:

    // something.js
    export const something = 'Whatever string you want';
    Ответ написан
  • Как исправить переход на другой Layout?

    Nikolino
    @Nikolino
    В том компоненте, в темплейте которого вы используете , нужно импортировать этот AdminPanelLayout компонент. А в самом этом AdminPanelLayout компоненте задать его имя.
    <script>
    export default {
      name: "AdminPanelLayout ",
    };
    </script>
    Ответ написан
    Комментировать
  • Как вывести количество подписчиков группы ВК на PHP?

    Nikolino
    @Nikolino
    У VK есть API, и есть документация к этому API. В этой документации содержится информация о синтаксисе запроса, который возвращает в том числе и кол-во подписчиков.
    https://vk.com/dev/groups.getMembers

    Чтобы получить данные в формате JSON, нужно вызвать URL вида: https://api.vk.com/method/METHOD_NAME?PARAMETERS&a...

    В данном случае METHOD_NAME будет равен groups.getMembers.

    Чтобы получить ответ именно в PHP, можно, как вариант, использовать функцию file_get_contents(), например так:
    file_get_contents("https://api.vk.com/method/groups.getMembers?group_...");
    (измените id группы, и используйте access token, который вам предоставляет vk)
    Далее нужно распарсить JSON ответ, это можно сделать с помощью функции json_decode(), примерный код:

    $jsonResponse = file_get_contents("https://api.vk.com/method/groups.getMembers?group_id=123123&access_token=ACCESS_TOKEN");
    $responseData = json_decode($jsonResponse, true);
    
    // Выводим кол-во участников группы
    echo $responseData["response"]["count"];


    Написал без проверки, если не выводится, то сделайте var_dump($responseData) и посмотрите данные, которые содержит массив. Если в ответе будет содержаться ошибка, то вы это увидите по ключу "error".
    Ответ написан
    Комментировать
  • Как соотносится токсичность в IT с другими сферами деятельности?

    Nikolino
    @Nikolino
    Среди представителей стран СНГ, к сожалению, "токсичность" наблюдается во многих областях деятельности: ИТ, маркетинг, музыка (написание/создание музыки), а в компьютерных играх, там, где большая часть это школьники, думаю и рассказывать не стоит.

    Если почитать западные форумы и соц. сети, то можно увидеть, что люди относятся друг к другу очень тактично, даже к новичкам, чья (музыка, код, дизайн еще что-то) оставляет желать лучшего.

    В медицине, по понятным причинам, врачи более уважительно друг к другу относятся, даже если крайне несогласны друг с другом. Обвинения в некомпетентности редко увидишь, возможно потому, что очень молодых врачей не бывает. Высшее образование + интернатура + хоть пару лет практики и ты уже взрослый/зрелый человек, и юношеского пыла уже не осталось. В медицину с улицы не попасть, дома за компьютером не научиться этому, как "php за 10 часов", оттого и отношение к другим практикующим врачам соответствующее.

    В it порог входа ниже за счет того, что можно почитать пару статей с домашнего компьютера, написать 'Hello world' и ты уже "вайтишник". В итоге после двух-трех недель практики, новички лезут сюда и на форумы, задавать глупые вопросы, которые гуглятся на раз-два. Глупостью это, наверное, называть не правильно, просто "гугление" это тоже навык, который тренируется по мере роста в целом. Так что, "токсичность" на тостере проявляется, в основном, к новичкам. На сложные вопросы так резко не реагируют.

    На хабре, например, каждый хочет показать, что он много знает и умеет, и если найдет недостаток в статье автора, то указав на это, имеет шансы получить плюсы. На западных площадках, чаще всего, комментарии типа "Спасибо, мне очень помогло", реже "Спасибо, полезно но...", тогда как у нас: "Пфф... к чему эта статья вообще, если можно почитать что-то там, что-то сям и будешь знать то, о чем написано в статье, не зачет тебе, автор." и придут синьоры-помидоры и наставят такому комменту лайков. Автор, в свою очередь, начинает оправдываться тем, что статья вообще-то не для крутых сеньоров, коих тут набежало. Ну и полетели палки...
    С другой стороны, это вынуждает авторов писать по делу, без воды, не повторять очевидных моментов.

    Ну а в компьютерных играх (дотка, CS), вероятно сами знаете как любят "мамку в кино водить", да в микрофон матами кричать как сумасшедшие. А фразы богатого русского, типа "cyka blyat", от представителей нашего геймерского сообщества, уже каждый иностранец знает, этими мемами весь интернет переполнен.
    Ответ написан
    3 комментария
  • PHP+JS Трудности с выбором учебно-боевого проекта?

    Nikolino
    @Nikolino
    Сделайте приложение по оптимизации и ресайзингу картинок, по типу tinypng.com

    Пользователь может залить картинку любого размера, ваше приложение должно "сжать" эту картинку без потерь.
    Пользователь также может выбрать фичу уменьшения размера изображения, допустим, до 50% от исходного изображения. То есть картинка 800х600 будет уменьшена до 400х300 и сжата без потерь.

    Если усложнить задачу, то позволить пользователю заливать zip/rar архивы с изображениями, также указывает свою почту куда скинуть итоговый архив с обработанными изображениями.

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

    Но это может быть слишком сложно для новичка. Поэтому:

    Поэтому простой блог с админ панелью (на bootstrap).

    Усложняем:
    В блоге есть посты, категории и теги. Пост может быть в нескольких категориях. У категорий могут быть родительские категории. Ajax комментарии и лайки к постам и комментариям, комментарии должны быть вложенными (как на хабре или vc.ru).

    Еще усложняем:
    Пост добавляется через WYSIWYG редактор, в редакторе можно добавлять картинки, которые будут сохраняться на сервере. Желательно, чтобы картинки можно было ресайзить прям на лету. Лучше использовать какой-нибудь filemanager.

    Еще усложняем:
    Регистрация/авторизация пользователей через соц. сети.

    Еще усложняем:
    Сделайте полнотекстовый поиск по блогу, в том числе и по комментариям. Освойте Sphinx или Elasticsearch, научитесь устанавливать и настраивать все это на фреймворке (Laravel или Symfony).
    Познакомьтесь с Redis, научитесь кешировать данные из базы в redis'e. Обновляйте кэш, когда кто-то добавил комментарий/like или вы добавили пост.

    Еще усложняем:
    Познакомьтесь с Websocket'ами, научитесь делать так, что если кто-то ставит лайк под постом или комментарием, то все, кто онлайн, видят сразу, что кол-во лайков у поста/комментария увеличилось.
    Чтобы со всем этим поиграться, освойте Docker.
    Покройте приложение простейшими Unit тестами.
    Ну и конечно же, коммитьте это всё на Github(Bitbucket).

    Если всё это получилось, то вы уже почти готовый fullstack больше в сторону backend'a. Для middle backend'ера еще нужно подтянуть Rest API, чтобы умели api'шки пилить (с авторизацией), и желательно еще одну СУБД, лучше PostgreSQL, а также анализ запросов к БД (индексы, explain и т.д.). Для полноценного fullstack'a нужно освоить получше JS, верстку(БЭМ) и frontend framework'и: Vue.js, React, Angular, чтобы уметь в одиночку запилить SPA приложение, которое по api тащит данные с вашего же сервера.

    Сейчас меня закидают помидорами потому, что сказал middle, и кто-то скажет, что middle это больше n лет реальной разработки. Но описанное выше решает большую часть всех повседневных задач в коммерческих проектах. Если научились делать это, значит научитесь решать и остальные задачи, пусть и немного (или много) погуглив. Здесь на тостере есть те, у кого 5 лет опыта в разработке, но по-прежнему junior'ы, потому что всё время пилили лендинги или сайты-визитки на 3-5 страниц.
    Также следует сказать, что грейды (junior, middle, senior) сильно отличаются в разных компаниях

    Всё описанное это дело в лучшем случае, полугода. В худшем случае может затянуться и на года.

    Скорей всего такого не случится, что вы будете всё время заниматься только этим блогом. На протяжении обучения у вас появится желание сделать что-то еще, потестировать то или это, поиграться с какой-то технологией (Sphinx, Elasticsearch, Redis, RabbitMQ и т.д.) отдельно, или проштудировать верстку, js, возможности фреймворка отдельно. К проекту вы будете возвращаться время от времени, почерпнув знания из промежуточных тестовых проектов.
    Ответ написан
    Комментировать
  • Как накатывать миграции на проде?

    Nikolino
    @Nikolino Автор вопроса
    Как оказалось, на проде стоит какая-то система деплоя и миграции накатываются автоматически после пуша на прод файлов с миграциями. Поэтому php artisan migrate и не надо было запускать.
    Но из молчаливого сисадмина и двух слов не вытянешь, поэтому всё узнаётся после.
    Ответ написан
    Комментировать
  • Как реализовать комментарии на сайте на ООП с помощью MVC?

    Nikolino
    @Nikolino
    Делают по-разному. Для каждой сущности можно создавать свой контроллер, а можно создать что-то обобщенное, вроде BlogController, и вписать методы работы с постами и комментариями туда. Тогда методы будут называться как-то так: addComment(), storeComment(), deleteComment(), addPost(), deletePost() и т.д.
    Меньше контроллеров, но каждый из них "толще", что может несколько усложнить работу.

    Если создавать отдельные контроллеры, например: CommentController, CategoryController, PostController и т.д., то методы обычно не включают в себя название сущности, чтобы не повторяться. То есть называем методы так: store(), update(), delete(). Для сохранения, обновления и удаления, соответственно.
    Например, по-умолчанию комментарии не опубликованы, а вы из админки можете поменять их статус на "опубликован".
    Соответственно вызывается путь в роутере, который обращается к update методу контроллера комментариев, обновляет статус на "опубликован" в базе, и редиректит туда, куда вам надо, например к списку всех неопубликованных комментариев в админке.
    А при добавлении, допустим, поста, обращаемся через роутер к add() методу контроллера постов, который просто выводит форму поста, а вот сама форма при сабмите уже обращается к методу store() этого же контроллера постов.
    Ответ написан
    Комментировать
  • Клонировать Windows 7 с Kingston SSD на Samsung SSD?

    Nikolino
    @Nikolino Автор вопроса
    UPD: Так и не получилось у меня склонировать через Samsung Data Migration. Копируется полностью, затем выдает ошибку
    При изменении размера раздела произошла ошибка. 400110(061aee)

    Проверку диска делал, всё ок вроде. Попробовал еще раз, опять копируется полностью и в конце выдает ошибку.
    В целом старый SSD конечно подустал:

    872f961ad4.png

    Похожую проблему нагуглил и в наших и в англоязычных форумах.

    В итоге решил так:
    Софтом Macrium Reflect Free склонировал исходный диск.
    Но исходный диск у меня 55гб с забитыми 52гб, этот раздел и создался на новом диске, то есть те же 55гб с 52гб данных и 180гб оставшихся не распределились.
    После этого пошел в стандартную тулзу Windows 7 и расширил раздел(том) до всего размера.
    В общем всё ок, диск летает:

    511a0467d3.png
    Ответ написан
    Комментировать
  • Можно ли найти работу php+react?

    Nikolino
    @Nikolino
    В некоторых вакансиях full stack разработчиков, указаны требования знать один из популярных фреймворков PHP, и один из популярных фронтенд фреймворков (Vue, React, Angular).
    И тестовое задание желательно делать используя два фреймворка, например написать просто Api на Laravel, а клиентскую часть (которая тянет данные из api) на Vue.js, например.
    Пример задания: https://github.com/GinzaDigital/fullstack-test

    Но как уже выше сказали, fullstack это разработчик "для бедных", вместо того, чтобы нанять одного backend'a и одного frontend'a, компания берет двух (или даже одного) fullstack'a. Иногда задач по бэкенду может не хватать, и тогда в маленьких проектах он может простаивать, тогда fullstack'a нагружают фронтендом.
    На западе, кстати, salary у фронтендов выше. У нас, по данным "Мой круг", такие же, как и у отдельных спецов.
    Ответ написан
  • Низкий FPS при раскрытии последнего подменю accordeon-menu?

    Nikolino
    @Nikolino Автор вопроса
    UPDATE:
    как оказалось, transition height это довольной сложный и медленный для браузера процесс, в сравнении, например, с transform translate. И анимации width и height не дают стабильных 60fps.
    Вот видео, снятое с 240FPS, показывающее разницу: https://www.youtube.com/watch?v=-62uPWUxgcg
    Вот здесь объяснение от ребят из гугла: https://www.html5rocks.com/en/tutorials/speed/high...
    Ответ написан
    Комментировать
  • Реально в 36-40 лет стать тестировщиком или программистом если есть свободное время?

    Nikolino
    @Nikolino
    Реально, но есть нюансы.

    Если на собеседовании и на тестовом задании вы (40 летний, так называемый, switcher) и 20-ти летний соискатель показали плюс минус одинаковые результаты, то возьмут, скорее всего, его, чем вас.

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

    Если коротко, то молодой возраст и высшее профильное это конкурентные преимущества. Реальный "вес" этих преимуществ оценить сложно, на фоне кучи других факторов.

    А понятия "40 летний джун", "30 летний мидл" это всё относительно. Сеньор какой-нибудь региональной веб-студии будет джуном в какой-нибудь крупной столичной IT компании, хоть и в годах опыт есть, но если доводилось работать лишь с лендингами или простыми сайтами на CMS, то джун с опытом работы в 1 год, но в крупной конторе, вероятно уже знает больше.
    Ответ написан
    Комментировать
  • Как стать web разработчиком на Python не прикасаясь к html, css и javascript?

    Nikolino
    @Nikolino
    Базу знать нужно (html, css, js, jquery). Так как проще и быстрее бэкендеру запилить админку, используя bootstrap и пару jquery плагинов, чем состыковывать в одной задаче двух человек (бэкендера и фронтендера), на написания ТЗ и прочие состыковочные организационные моменты уйдет больше времени, чем на написание простой админки в одиночку. Для фрондендеров это слишком просто и тратить их время выгоднее на более сложные задачи (SPA приложения на фреймворках и т.д.)

    Поэтому работодатели и требуют знание frontend базы от бэкендеров, и backend базы от фронтендеров. Команде будет легче общаться.
    А "бедные" веб-студии ищут fullstack'ов, потому, что пару fullstack'ов для маленькой студии выгоднее, ведь иногда может нехватать backend задач, но много фронта, а через пару недель наоборот и т.д.
    Ответ написан
    Комментировать