• Где лучше всего инициализировать библиотеку в Laravel?

    greabock
    @greabock
    Могу
    use Illuminate\Support\ServiceProvider;
    
    class ApiClientServiceProvider extends ServiceProvider 
    {
        /** @var boolean  Отложенный, потому не при каждом запросе нам нужно дергать это апи */
        public $deffered = true;
    
        public function register ( ) 
        {
            
            $this->app->singleton(VeryUsefulApi::class, function($app) {
                 // Не очень хорошо дергать env из провайдера, поэтому поместим-ка настройки в конфиг
                // А уж из конфига будем дергать env
                new VeryUsefulApi([$app['config']['services.verify_user']); 
            });
    
            $this->app->singleton(ApiClient::class); // Ну это если нужен именно синглтон
        }
    
         /** @return array | string[]  Сообщаем контейнеру, что если вдруг нужны эти ключи, то они тут */
        public function provides() {
            return [VeryUsefulApi::class, ApiClient::class];
        }
    }

    class ApiClient 
    {
        /** @var VeryUsefulApi */
        protected $api;
    
        public function __construct (VeryUsefulApi $api)  
        {
            $this->api = $api;
        }
        #...
    }

    class SomeController {
    
        /** @var ApiClient */
        protected $client;
    
        public fuction __construct(ApiClient  $client)
        {
              $this->clien = $client;
        }
    }

    Ну это если буквально то, что вы просили.

    С другой стороны, не очень понятно зачем вообще нужна эта обертка.
    Почему бы не дергать VeryUsefulApi напрямую, минуя обертку ApiClient.
    Ну это так, мысли вслух... "Вам из колодца виднее"(с) )
    Ответ написан
    1 комментарий
  • Где лучше всего инициализировать библиотеку в Laravel?

    orlov0562
    @orlov0562
    I'm cool!
    Примерно так и делается. Только VeryUsefulApi лучше так же внедрять в адаптер через DI, иначе ApiClient получается жестко связан с VeryUsefulApi. Но, я предполагаю, что есть причины почему так сделано.
    Если причин нет, то вот тут посмотри как это делается: Laravel's Dependency Injection Container in Depth.
    Ответ написан
    1 комментарий
  • Научился создавать сайты, но не обладаю "дизайнерским взглядом", как его получить?

    delphinpro
    @delphinpro
    frontend developer
    Не согласен с предыдущими ораторами. Фронтэндер должен обладать хотя бы минимальным "чувством прекрасного". Также не согласен с тезисом, что "это либо дано либо нет".

    Возьмите книжек по UI и UX и просвещайтесь.
    Ответ написан
    10 комментариев
  • Почему при отправке письма с вложением на rambler приходит непонятный файл bin?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Потому, что Mail.Ru, Yandex и GMail анализируют вложения и пытаются определить их Content-Type, а Rambler этого не делает и просто показывает вложение в соответствии с указанным вами типом "octet-stream".
    Ответ написан
    5 комментариев
  • Как правильно писать на ООП?

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

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

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Imho все адекватные люди аполитичны и предпочитают тратить время на зарабатывание денег.
    В текущих реалиях проще эмигрировать, чем тратить время на это вот все.

    А про забастовку, ну право смешно. Вы реально считаете что правительство рассматривать it отрасль как социально значимую? Это скорее что-то непонятное, мешающее свету из телевизора проникать глубь народных масс.

    Тем более что государственных то it компаний практически нет. Будете бастовать внутри своей коммерческой структуры - никому кроме этой структуры вы не навредите.

    Поднимите столько хайпа что государство обратит внимание на регулирование работников - вот тут то вы и взвоете по настоящему.
    Ответ написан
    10 комментариев
  • Какое самое короткое выржение на JS, выдающее в результате True?

    @asdz
    function _send (s) {
    	var input = document.getElementById("input");
    	input.value=s;
    	var evt = document.createEvent("HTMLEvents");
    	evt.initEvent("input", false, true);
    	input.dispatchEvent(evt);
    	var t = document.querySelector('.well span')
    	console.log("%s => %s", s, (t.textContent.search ("true") > -1) );
    }
    
    for(var code = 0; code < 1000; code++) {
      _send (String.fromCharCode(code));
    }
    Ответ написан
    2 комментария
  • Как сделать удобный доступ к страницам в АПАЧ без расширения?

    Maksclub
    @Maksclub Куратор тега Веб-разработка
    maksfedorov.ru
    На многих сайтах это сделано не так, как вы думаете

    Пример 1 (современный) -- одна точка входа
    На сайте нет физических файлов с любым расширением, есть одна точка входа и есть роутер, который парсит строку с адресом и определяет -- какую часть системы вызвать,

    Например /category/womens
    Роутер парсит и отправляет в метод контроллера CategoryController параметр url=womens
    Этот экшн уже работает с БД и выбирает из нее нужную категорию с таким урлом и заодно все данные в придачу, потом это все выплевывает в верстку (как пример) и вы получаете страницу

    Пример 2 -- старенький
    До этого некоторые ЦМС делали так, точка входа одна index.php, но разруливанием какой контроллер вызвать -- занимался веб-сервер, а не роутер

    Например в htaccess прописываются регулярные выражения, которые например адрес вида /category/womens перенаправляют на адрес index.php?module=CategoryController&url=womens

    Только вместо womens в htaccess записано выражение, соответствующее любой строке

    Возможно вам это рано или вообще не нужно, так -- для развития, чтобы знали
    Ответ написан
    Комментировать
  • Как сделать удобный доступ к страницам в АПАЧ без расширения?

    odobrygin
    @odobrygin
    Front-end / Back-end Developer
    Вам нужна директива RewriteRule. Ознакомьтесь что такое .htaccess файлы и как они могут вам помочь.

    https://ruseller.com/lessons.php?id=309
    www.htaccess-guide.com
    https://www.nic.ru/help/fajl-htaccess-nastrojka-pe...
    Ответ написан
    2 комментария
  • Какое самое короткое выржение на JS, выдающее в результате True?

    rockon404
    @rockon404
    Frontend Developer
    Уверен, самое короткое выражение !0, а таблица, либо троллинг, либо хак.
    Ответ написан
    3 комментария
  • Какое самое короткое выржение на JS, выдающее в результате True?

    0xD34F
    @0xD34F Куратор тега JavaScript
    в таблице рекордов (которую заполнял вручную автор по запросам на почту) были люди, выполнившие эту задачу за 1 символ. Вопрос: какой это был символ или как иначе они это сделали?

    Символ, полагаю, никакой - поскольку проверка решения выполняется на клиенте, просто подменили функцию или результат проверки через отладчик, ничего вручную автор там не заполняет. Можно и решение из 0 символов оформить как корректное.
    Ответ написан
    1 комментарий
  • Литература по ассемблеру студент?

    Godless
    @Godless
    3 книги по асму.
    1. как посоветовали в комментах "Питер Абель. Ассемблер и программирование для IBM PC "
      Книга крутая. Но академическая. Дает очень хорошую картинку в голову про связь асма и железа. MUST READ. но покупать можно и не покупать.
    2. Зубков. Assembler. Для DOS, Windows и Unix. КУПИТЬ. Это мало того что учебник с азов, дык там справочник по инструкциям. Прям кодишь и читаешь справку - пока в памяти нет понимания разницы между movsb и movsd или jnc и jne.
    3. В. Н. Пильщиков Программирование на языке ассемблера IBM PС
      Эту книгу я прочитал первой за несколько дней, она дала абстрактное понимание асма - как высокоуровневые конструкции (условия, циклы, процедуры) реализовать на асме. Несмотря на то что это DOS и PASCAL для примеров, в самом начале пути это очень полезно.


    Зубкова у меня еще первое издание, вроде бы последнее 11-е. Но не уверен.
    Ну и да, все это ИМХО конечно.
    Ответ написан
    Комментировать
  • Как сделать простой php маршрутизатор (роутер)?

    devg
    @devg
    I am Yenior software developer
    Очень простой роутер, не без недостатков, но довольно быстрый и легко использовать, дописывать под себя.

    <?php
    /**
     * Простой роутер
     * @devg
     */
    final class RouterLite {
    
      public static $routes = array();
      private static $params = array();
      public static $requestedUrl = '';
    
      /**
       * Добавить маршрут
       */
      public static function addRoute($route, $destination=null) {
        if ($destination != null && !is_array($route)) {
          $route = array($route => $destination);
        }
        self::$routes = array_merge(self::$routes, $route);
      }
    
      /**
       * Разделить переданный URL на компоненты
       */
      public static function splitUrl($url) {
        return preg_split('/\//', $url, -1, PREG_SPLIT_NO_EMPTY);
      }
      
      /**
       * Текущий обработанный URL
       */    
      public static function getCurrentUrl() {
        return (self::$requestedUrl?:'/');
      }
    
      /**
       * Обработка переданного URL
       */
      public static function dispatch($requestedUrl = null) {
    
          // Если URL не передан, берем его из REQUEST_URI
          if ($requestedUrl === null) {
            $uri = reset(explode('?', $_SERVER["REQUEST_URI"]));
            $requestedUrl = urldecode(rtrim($uri, '/'));
          }
    
          self::$requestedUrl = $requestedUrl;
    
          // если URL и маршрут полностью совпадают
          if (isset(self::$routes[$requestedUrl])) {
            self::$params = self::splitUrl(self::$routes[$requestedUrl]);
            return self::executeAction();
          }
    
          foreach (self::$routes as $route => $uri) {
            // Заменяем wildcards на рег. выражения
            if (strpos($route, ':') !== false) {
              $route = str_replace(':any', '(.+)', str_replace(':num', '([0-9]+)', $route));
            }
    
            if (preg_match('#^'.$route.'$#', $requestedUrl)) {
              if (strpos($uri, '$') !== false && strpos($route, '(') !== false) {
                $uri = preg_replace('#^'.$route.'$#', $uri, $requestedUrl);
              }
              self::$params = self::splitUrl($uri);
                
              break; // URL обработан!
            }
          } 
          return self::executeAction();
      } 
    
     /**
       * Запуск соответствующего действия/экшена/метода контроллера
       */
      public static function executeAction() {
        $controller = isset(self::$params[0]) ? self::$params[0]: 'DefaultController';
        $action = isset(self::$params[1]) ? self::$params[1]: 'default_method';
        $params = array_slice(self::$params, 2);
    
        return call_user_func_array(array($controller, $action), $params);
      }
    
    }
    ?>


    Пример использования:
    <?php
    // маршруты (можно хранить в конфиге приложения)
    // можно использовать wildcards (подстановки):
    // :any - любое цифробуквенное сочетание
    // :num - только цифры
    // в результирующее выражение записываются как $1, $2 и т.д. по порядку
    
    $routes = array(
      // 'url' => 'контроллер/действие/параметр1/параметр2/параметр3'
      '/' => 'MainController/index', // главная страница
      '/contacts' => 'MainController/contacts', // страница контактов
      '/blog' => 'BlogController/index', // список постов блога
      '/blog/:num' => 'BlogController/viewPost/$1' // просмотр отдельного поста, например, /blog/123
      '/blog/:any/:num' => 'BlogController/$1/$2' // действия над постом, например, /blog/edit/123 или /blog/dеlete/123
      '/:any' => 'MainController/anyAction' // все остальные запросы обрабатываются здесь
    ));
    
    // добавляем все маршруты за раз
    RouterLite::addRoute($routes);
    
    // а можно добавлять по одному
    RouterLite::addRoute('/about', 'MainController/about');
    
    // непосредственно запуск обработки
    RouterLite::dispatch();
    ?>


    UPDATE (07.08.2017):
    Дальнейшее развитие данного роутера см. в проекте Litero (https://github.com/bit55/litero)
    Ответ написан
    1 комментарий
  • Как взаимодействовать с указателем в структуре через указатель?

    0xD34F
    @0xD34F
    Не разыменовывать указатель. Вместо return *head->... должно быть return head->....
    Ответ написан
    2 комментария
  • Как взаимодействовать с указателем в структуре через указатель?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    head->nextaddres - ListElement*
    *head->nextaddres - ListElement
    А ещё если у тебя не будет вершины, при вызове метода Empty будет UB
    Ответ написан
    1 комментарий
  • Как детектировать взмах рукой?

    @AlexSku
    не буду отвечать из-за модератора
    Анализ ускорений смартфона в Матлабе (статистика, спектр) для определения состояния человека: стоит, сидит, лежит, идёт, опускается, поднимается.
    Ответ написан
    Комментировать
  • Как детектировать взмах рукой?

    @evgeniy_lm
    Думаю самый надежный и точный и простой вариант это акселерометр. Думаю MPU-6050 будет достаточно
    Ответ написан
    2 комментария
  • Возможна ли обработка обращений к неопределенным методам класса в Python?

    https://docs.python.org/3/reference/datamodel.html...
    >>> class Foo:
        def __getattr__(self, item):
            return lambda: item
    >>> foo = Foo()
    >>> foo.a
    Out[8]: <function __main__.Foo.__getattr__.<locals>.<lambda>>
    >>> foo.a()
    Out[9]: 'a'
    Ответ написан
    Комментировать
  • Возможна ли обработка обращений к неопределенным методам класса в Python?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Для этого есть магический метод __getattr__, он вызывается тогда, когда нет атрибута в классе.

    Вот простой пример:
    class Foo(object):
    
        def __init__(self, value):
            self.value = value
    
        def __getattr__(self, name):
            return lambda: print("'{0}' doesn't exists!".format(name))
    
    
    foo = Foo(10)
    print(foo.value)
    foo.some_function()
    Ответ написан
    2 комментария
  • Есть ли жизнь без дискретного видеоадаптера?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Под ваши задачи не нужна дискретная видеокарта. Имеющиеся интегрированные видеочипы неплохо справляются и с 4K видео.

    Играться же без дискретки во что-то поновее уже не выйдет. Но для этого проще консоль купить.
    Ответ написан
    1 комментарий