Задать вопрос
  • Как правильно писать на ООП?

    Adamos
    @Adamos
    ООП - это компьютерная мечта о дамской сумочке. Которая большая внутри и крошечная снаружи.
    Главное в хорошем классе - это интерфейс, позволяющий вообще не думать о том, что находится внутри класса.
    Представьте себе черный ящик, решающий вашу задачу. Сформулируйте, каких внешних данных ему должно быть достаточно и какими внешними же признаками и логикой должен обладать этот ящик. Старательно абстрагируясь от того, что там будет происходить внутри (процедурное программирование приучает думать об этом, придется напрячься).

    Простейший пример - jQuery.cookies. Кукисы в браузере хранятся неудобно для редактирования, но это проблемы внутри черного ящика, снаружи их быть не должно. Снаружи вам надо поставить куку и прочитать куку. С коротким списком возможных свойств. Вот это класс и реализует, вполне успешно. Буквально одним методом.
    Мог бы этот метод быть простой процедурой? Да, конечно. Но как раз это - неважно.
    Ответ написан
    2 комментария
  • Как стать "законченным" специалистом по бекенду?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    не стоит становиться
    «законченным»
    ценный специалист, всегда растет и обгоняет... не обязательно во всем, хотя бы в чем то (и лучше востребованном)
    Ответ написан
    Комментировать
  • Как стать "законченным" специалистом по бекенду?

    Теория баз данных, их архитектура и проектирование
    Реализация высоконагруженных систем

    одного этого на пол жизни хватить может

    Еще бы добавил в список
    - очереди RebbitMQ, Kafka и тд
    - MongoDb
    - ElasticSearch
    - Docker
    Ответ написан
    1 комментарий
  • Как стать "законченным" специалистом по бекенду?

    GTRxShock
    @GTRxShock
    SA
    Ответ написан
    Комментировать
  • Как стать "законченным" специалистом по бекенду?

    Redis, в качестве основной NoSQL-СУБД - Плохая идея
    Для изучения, так как планируете работать с бекендом, то очень кстати изучить основы безопастности приложения, так как это очень важный момент
    Ответ написан
    5 комментариев
  • Как запретить загрузку сайта при отключенном javascript в браузере?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Подписывайте ссылки на файлы через ajax по клику (или другому событию).
    Нет JS - нет файлов)

    2. Создайте "ширму" доп.слоем поверх всего контента (на всю ширину и высоту страницы) и отключайте её через JS.
    Ответ написан
    Комментировать
  • Как запретить загрузку сайта при отключенном javascript в браузере?

    @Dorothy
    Возможно,
    <html>
    <head>
    <noscript>
    <meta http-equiv="refresh" content="0;url=http://site/blank.html">
    </noscript>
    </head>
    </html>
    Ответ написан
    1 комментарий
  • Как сделать ленивую загрузку без рывков при скролле?

    Exploding
    @Exploding
    wtf?
    Ну очевидно же, что блоку, в который загрузится изображение нужно установить ширину и высоту, такую же как у изображения, которое будет загружено.

    UPD.
    Добавьте в свою lazy-функцию плавное изменение размера блока и "рывков" не будет... Да и вообще, сколько "экземпляров" задач, столько и вариантов решений
    Ответ написан
  • Json или html что лучше?

    @codemafia
    Самоотвод
    JSON - универсальнее, нет привяки к шаблонам сервера, меньше по размеру
    Ответ написан
    3 комментария
  • Как роутер узнает маску подсети?

    fzfx
    @fzfx
    18,5 дм
    > Зачем в таблице маршрутиризации хранятся маски.
    для того, чтобы комп знал, какой диапазон IP-адресов имеется ввиду (маска определяет диапазон адресов).
    > Они же не передаются вместе с пакетом.
    нет, потому что незачем.
    > И как роутер поймет куда отправить пакет, если к нему подключены 2 компьютера с одинаковыми ip адресами, но разными масками?
    отправит на тот, для которого на данный момент у роутера имеется запись в arp-таблице.
    Ответ написан
    2 комментария
  • Где брать примеры хорошего ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Если у вас проблема с тем, как делить код на объекты, это означает, что
    1. Вы плохо продумали архитектуру проекта, либо вообще плохо представляете что должен делать проект.

    2. Мало опыта - в таком случае не парьтесь, просто пишите код как можете. опыт придет с набиванием шишек, когда будете рефакторить код и понимать что наверное надо было вот так изначально разбить, чтобы сейчас было проще.

    3. ООП был придуман как выход для написания крупных приложений, которые пишутся большим количеством программистов. В отличие от модульного программирования ООП позволяло не только разбить код на отдельные куски, но еще и сделать эти куски инкапсулированными независимыми "объектами", каждый из которых может поместиться в голову среднестатистического программиста, чтобы упростить процесс разработки.
    Это одна из причин, почему ООП достаточно сложно освоить на маленьких проектах.
    Ответ написан
    Комментировать
  • Где брать примеры хорошего ООП?

    Stalker_RED
    @Stalker_RED
    Посмотрите исходники nodejs, vue, или еще чего-нибудь, у чего тыщщи звезд.
    Даже если окажется, что ООП там не идеальный - вы будете не в одиночестве. Найдутся тысячи единомышленников, готовых вести святую войну за единственно правильный ООП. (По крайней мере на этой неделе.)
    Ответ написан
    Комментировать
  • Как создать flexible верстку?

    be_a_dancer
    @be_a_dancer
    Backend/Fullstack Developer
    То, что вы пытаетесь сделать называется Mansory Layout. Короткая обзорная статья с примерами.
    Существует несколько способов это сделать. Если хотите с использованием флексбоксов, то, пожалуйте в эту статью.
    Есть возможность сделать с помощью grid-сетки. Для этого посмотрите на эту реализацию.
    И наконец, наиболее простое и удобное в плане организации решение - вот такой вот плагин, с которого все началось.
    Ответ написан
    4 комментария
  • Как сверстать анимацию заполнения шкалы?

    makarenya
    @makarenya
    программист
    Если сложность картинки совсем уж запредельная, то всегда можно взять и использовать svg. Я так и сделал тут: внизу таймлайн с годами. Но тут надо синхронизировать размер, и в вашем случае видится решение проще.

    Если ширина сайта фиксированная, то просто будет использовать 2 div-а: один над другим (то есть у второго position=absolute). Внутри верхрнего лежит ещё один с шириной сайта (А ещё у него должен быть position=absolute и right=0. В нём изображение серого таймлайна. Сам таймлайн можно сделать из обычных div-ов, расположенных слева направо во flexbox-е или с флоатами. div со скруглёнными углами - это точка, с margin сверху и меньшей высотой - линия. А в первом диве (который снизу) вы составляете тот-же таймлайн, но уже цветной. Посчитать цвета градиентов для него - задача не сложная. Ну и вся магия во втором блоке, который с absolute. У него проставлен right=0, и уменьшая его width вы будете понемного скрывать серый таймлайн, а на его месте будет появляться цветной
    Ответ написан
    5 комментариев
  • Хороший фреймворк для разработки бота?

    tomnolane
    @tomnolane
    профессиональный разработчик
    botman на данный момент самый "лучший" (ИМХО), ибо не очень большой выбор. В целом, он не плох (если) хорошо изучить документацию. Я, например, ВК драйвер недавно сделал для него (скоро залью на гитхаб). Проблемы только с Телеграмм - если использовать сервер из РФ, он работать не будет. А так, в целом, очень неплохой. Лучше, я пока не встречал

    п.с. до него я написал трёх ботов "в ручную" (для ВК, Фейсбук и Web). Работают норм, но больше похоже на "костыли", и не очень удобно. А в botman "Hello world" в 39 строк кода, у меня выглядит так:
    <?php
    require_once 'vendor/autoload.php';
    
    use BotMan\BotMan\BotMan;
    use BotMan\BotMan\BotManFactory;
    use BotMan\BotMan\Drivers\DriverManager;
    use BotMan\BotMan\Cache\CodeIgniterCache;
    
    $config = [
        'facebook' => [
          'token' => 'EAAZAT6dcgYDQBAC6x7X******85SLSPF0BRCVeRPPgutgtfvZCkZC9lxnP5pYcRXtF0m7sOAliTEztGPR45cOxx3rZAMZBc9Mb9UhB62gBSG2kXTo7ldyk2fTquadMJQVY8nqKxiOakLXLUZBCSavncCljoe5IAZDZD',
          'app_secret' => 'b52517e****71b6afa76dca657',
          'verification'=>'my_example_veryfy_token',
        ],
        "vkontakte" => [
           "token" => "9af81c610faf0ea319*****d17b0b2b53b164ff3b18cc1b9d4e422fd15db046594139078"
        ],
        'telegram' => [
            'token' => '60176***:****fVCz43IblR72siiyfbebv7wgqCn8tc'
        ]
    ];
    
    DriverManager::loadDriver(\BotMan\Drivers\Vkontakte\VkontakteDriver::class);
    DriverManager::loadDriver(\BotMan\Drivers\Facebook\FacebookDriver::class);
    DriverManager::loadDriver(\BotMan\Drivers\Telegram\TelegramDriver::class); 
    
    $this->load->driver('cache');
    
    $botman = BotManFactory::create($config, new CodeIgniterCache($this->cache->file)); 
    
    $botman->hears('привет', function (BotMan $bot) {
        $bot->reply('Хай.');
    });
    
    $botman->fallback(function($bot) {
        $bot->reply('Чё ??? ...');
    });
    
    $botman->listen();


    UPD
    на этом фреймворке возможны проблемы с русским языком (кодировкой).
    Чтобы её решить, нужно использовать iconv
    iconv('utf-8', 'windows-1251', тут_ваш_ответ_сервера);
    Ответ написан
    1 комментарий
  • Как сделать тяжелый импорт из excel 800к товаров?

    danial72
    @danial72
    flutter dart.
    Перевести xls в csv и использовать pipe подход. Построчно считывать файл, не загружая в память полностью.

    https://m.habr.com/post/345024/
    Тут отлично описано что вам нужно
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    @mykolaim
    PHP developer
    Импортировал 1,5 ляма строк в бд - все довольно быстро.
    1 - консольное приложение, зачем вам мучать сервер.
    2 - для чтения советую https://github.com/box/spout
    3 - выгрузить фото архивом на хост, там распаковать ну и в скрипте только путь правильный подставить.

    И не нужно никакой магии.
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    xls сохранить в csv, дальше LOAD DATA INFILE в mysql-ной консоли. Загружал таким образом файлики на десятки миллионов строк - залетает на ура.
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    syschel
    @syschel
    freelance/python/django/backend
    1. У вас именно EXEL файл или всётаки CSV который вы открываете на десктопе с помощью экселя?
    2. Если всётаки EXEL файл. Там слишком много всего нагорожено, на вроде вёрсток и формул или голые таблицы?
    3. Если всётаки голые таблицы. Вы можете делать именно CSV файл?

    Если данные будут в CVS формате, то можно всё загрузить средствами MYSQL и не использовать для обработки PHP или его библиотеки. Тогда результат будет в разы выше, чем если перебирать с помощью ПХП и потом кормить в MSQL

    Когда я в своё время сталкивался с проблемой загрузки файла товаров в базу, там было несколько миллионов единиц, то оптимальным стало именно такое решение > LOAD DATA

    Кусок моего старого MySQL кода, для наглядности
    // Загружаем кашерный файл
    LOAD DATA LOCAL INFILE '/srv/cms_cpa/files/adimport_items.csv' INTO TABLE adimport_tmp CHARACTER SET utf8 FIELDS TERMINATED BY '|' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (id_adimport,article,available,currencyId,delivery,description,id,name,oldprice,param,picture,price,url,vendor,advcampaign_id,advcampaign_name);
    
    // Загружаем только нужные поля (!!!)
    LOAD DATA LOCAL INFILE '/srv/cms_cpa/files/adimport_items.csv' INTO TABLE adimport_tmp CHARACTER SET utf8 FIELDS TERMINATED BY '|' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (id_adimport,@ISBN,@adult,@age,article,@attrs,@author,available,@barcode,@binding,@brand,@categoryId,@country_of_origin,currencyId,delivery,description,@downloadable,@format,@gender,id,@local_delivery_cost,@manufacturer_warranty,@market_category,@model,@modified_time,name,oldprice,@orderingTime,@page_extent,param,@performed_by,@pickup,picture,price,@publisher,@sales_notes,@series,@store,@syns,@topseller,@type,@typePrefix,url,vendor,@vendorCode,@weight,@year,advcampaign_id,advcampaign_name,@deeplink);
    
    // Все поля
    LOAD DATA LOCAL INFILE '/srv/cms_cpa/files/adimport_items.csv' INTO TABLE adimport_tmp CHARACTER SET utf8 FIELDS TERMINATED BY '|' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (id_adimport,ISBN,adult,age,article,attrs,author,available,barcode,binding,brand,categoryId,country_of_origin,currencyId,delivery,description,downloadable,format,gender,id,local_delivery_cost,manufacturer_warranty,market_category,model,modified_time,name,oldprice,orderingTime,page_extent,param,performed_by,pickup,picture,price,publisher,sales_notes,series,store,syns,topseller,type,typePrefix,url,vendor,vendorCode,weight,year,advcampaign_id,advcampaign_name,deeplink);

    Ответ написан
    Комментировать
  • Что нынче должен знать php junior без опыта?

    @HellWalk
    На мой взгляд у вас уже достаточный уровень знаний для крепкого php джуна

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

    Все же на первый план надо выставлять свой лучший код :)
    Ответ написан
    1 комментарий