• Генеральная уборка в компании: как мы переворошили магазины
    0
    «я что еще должен и товаром сам идти?»
  • Генеральная уборка в компании: как мы переворошили магазины
    +1
    У нас в крупном тц в городе у dns'а магазин находится на втором этаже, а склад в цоколе на парковке. При этом на парковку можно попасть только на лифте, ибо лестница находится очень далеко. В итоге после покупки сотрудники несутся на лифте вниз, а потом с коробками опять вверх, забивая лифт иногда полностью.
  • Доступен PhpStorm 2017.3
    0
    А каким образом это заработало? У меня пути не подсвечиваются и не доступны для перехода в принципе, а клик на компоненте лишь переносит к секции components
  • Доступен PhpStorm 2017.3
    0
    Если открыть панель version control, вкладку log, то там можно выбрать файлы в отдельных коммитах и залить на фтп шоткатом с клавиатуры
  • Доступен PhpStorm 2017.3
    0
    Когда сделаете отключаемую проверку файлов на фтп? понятно что разные люди работают над разными вещами… но 7 лет игнорировать один из самых запрашиваемых реквестов… =((
  • Почему у Национального энциклопедического портала нет шансов против «Википедии»
    0
    Был у гугла такой сервис knol — ориентированный как раз на авторство: один человек подтверждает информацию помимо источников еще и своим именем. Но был он был закрыт.
  • Yii 2.0.8
    0
    Да, этот вариант я упустил…
  • Yii 2.0.8
    +2
    А зачем gii в том месте где есть доступ других людей?! Так, например в том же advanced модуль подключается только в main-local на рабочем компьютере.
  • Yii 2.0.8
    0
    Просто ту же миграцию быстрее имхо удобнее писать с автодополнением от ide. А браузер он и так открыт всегда =)
    Понятно, что тема чисто субъективная и просто каждый привык к своему.
  • Yii 2.0.8
    0
    Сокращения к консольным командам — это просто удобно! Спасибо!

    Но можно спросить глупый вопрос: зачем нужна gii генерация из консоли? Помнить параметры, дольше исправлять ошибки, дольше набирать — зачем, когда все есть наглядно в веб-версии? Единственно на ум приходит автоматизированная генерация кода для систем где можно создавать сущности на лету… но какие это?
  • Как ведут себя покупатели с Хабра
    +3
    В понедельник 28 декабря, я заказал у вас эту книгу с игрой и еще сделал заказ в hobbyworld, примерно с такой же суммой и доставкой тоже через постамат. Что вы, что они обещали доставку минимум после праздников, что я прекрасно понимал.

    В итоге получилось 2 интересных момента:
    1. Только во вторник позвонили мне с подтверждением заказа. Они отправили его в четверг 31го и заказ я получил 16го января… и доставка у них вышла в два раза дороже.
    2. Заказ от вас был отправлен в тот же день и пришел уже 30го декабря!
  • Новый 2ГИС для Android — начинаем публичное тестирование
    +1
    Верните, пожалуйста, в приложение для ios обратно древовидный каталог и пагинацию. Неудобно искать что-то кроме самых простых вещей, а при случайном сбросе поиска (например, нажали на ненужную метку) тяжело найти что-то уже найденное дальше 2й страницы.

    Пара примеров: Нужно найти запуск замерзшего автомобиля....? Набрав «запуск автомобиля» получаешь одни организации (часть попадается сто, которые этим не занимается) набрав «отогрев» — лишь несколько нужных. Когда в самом каталоге есть метка — «услуги по отогреву автомобилей».
    Или нужно отремонтировать телевизор. Набрав «ремонт телевизоров» — на карте 3-4 сервисных, когда в городе их несколько десятков. Ремонта бытовой техники — слишком общий (сюда и холодильники теже попадают). После поиска через конкретные карточки, находим метку «ремонт аудио\видео\цифровой техники » выпадает тот десяток, который и делает нужный ремонт.

    ps: прошу прощения, что не в тему топика, но знаю, что здесь хотя бы можно получить обратную связь, в отличие от той же формы на сайте…
  • Белым по чёрному. Разгружаем глаза
    0
    Мне, как веб-разработчику, всегда казалось неудобным использовать темную тему в ide, поскольку постоянно переключаюсь в браузер где светлый фон… Только глаза еще больше раздражает…
  • Космический спутник LightSail на солнечном парусе завис из-за программной ошибки
    0
    Спасибо
  • Космический спутник LightSail на солнечном парусе завис из-за программной ошибки
    0
    А что за история с генераторами?
  • Умножаем стоимость часа своей работы на 2
    +1
    Я с утра начал тратить час перед всем делами на себя, на английский, да на хобби.
    И в итоге голова стала быстрее соображать по утрам — и это резко мотивирует просыпаться раньше — проспишь, меньше времени достанется… А самое интересно, что в результате работа с утра стала делаться быстрее.
  • Текстовая трансляция Apple Spring Forward
    +1
    Интересно, а почему они в макбуке не использовали свой разьем lightning. Он же вроде поддерживает и несколько устройств и зарядку…
  • Lenovo Miix 3-1030: родила Царица в ночь не то сына, не то дочь
    0
    Не соглашусь с вами. Это вопрос привычки. У меня был msi x350 и постоянно работая с кодом, оказывается, очень удобно двигаться по коду боковыми клавишами, не поднимая руку!
  • Продукты JetBrains по ценам прошлого года
    +1
    А является ли использование 30 дневных EAP версий лицензионным?
  • Книги по Yii2
    0
    Может я и ошибаюсь, но зачем нужны книги, когда есть официальная документация, google и форумы? Что там есть, чего нет в вышеперечисленных источниках. Все концепции и компоненты разъяснены в руководстве. Да, мне иногда не хватает примеров, но почти все легко находится, либо спрашивается на форуме. Что я пропускаю?
  • Термобарьеры, надгробные камни и прочие прелести печатных плат
    +3
    Зацепившись за вступление прочитал статью не отрываясь. Теперь знаю про термобарьеры, термопрофили и какие могут быть неочевидные косяки при проектировки платы. Только зачем мне это, если никогда не занимался разработкой железа? Автор молодец — умеет заинтересовать!
  • Одиннадцатиклассница, или тестируем баги вёрстки
    –5
    Потому что есть разработчик, который не учел этого =))
  • TeamCity 9.0: импорт проектов, настройки в VCS, фоновая очистка и панды
    0
    А чем вас вики не устроила? По-моему вполне удобная, понятная и логичная по всем аспектам, плюс куча плагинов.
  • TeamCity 9.0: импорт проектов, настройки в VCS, фоновая очистка и панды
    0
    Скажу в защиту atlassian что тормозят в основном onDemand (облачные) версии их продуктов, в основном из-за больших пингов в сша…
    Но примеры многих компаний, да и jetbrains в частности (они используют confluence) доказывает что jira работает весьма успешно, в том числе и из-за собственного железа.
  • VarDumper — новый компонент в Symfony 2.6
    0
    Любой приложение не появляется из воздуха, а пишется планомерно. На одном из этапов и можно подключить модуль. Никто не говорит делать это каждый раз, когда нужно узнать про переменную.
    Вы правы про production — там есть логи, но мы и говорим о разработке на локальной машине, нет?
    И все равно, ничто не отменяет случай вывода нужной переменной/информации только для разработчика именно на рабочем сервере (именно вывода, никто не говорит про плохую привычку правок на лету)
  • VarDumper — новый компонент в Symfony 2.6
    +9
    Часто быстрее вывести переменную и обновить страницу, нежели использовать отладчик, что тем не менее не отрицает удобство использования…

  • Лучшие плагины для Sublime Text
    0
    В том то и дело, что на маке закрывая окно, ты не закрываешь программу. Она сама остается висеть в памяти…
  • Лучшие плагины для Sublime Text
    0
    да, вы правы — спрашивает, только закрывая окно (кнопка в заголовке, cmd-q — не спрашивает). А можно как то настроить поведение, чтобы и в этом случае не спрашивал?
  • Лучшие плагины для Sublime Text
    +1
    Я использую sublime вместо блокнота для всевозможных заметок и для просмотра отдельных файлов из других не открытых проектов (в том же PhpStorm)… то есть как дополняющий инструмент =)
  • Лучшие плагины для Sublime Text
    0
    Sublime (под mac, не знаю как с win), при нештатном закрытии (рестарт системы, принудительное закрытие) нормально показывает несохраненные файлы, однако при обычном закрытие требует обязательного их сохранения. Есть ли плагин/настройка, которая позволит просто держать файл в редакторе без обязательного сохранения?
  • Почему мы в космос в отпуск не летаем
    +3
    Как это не печально, космос развивался на энтузиазме отдельных людей, которые вложили в это свои жизни и тянули всю отрасль (они придумывали, находили финансирование теми или иными способами используя ситуацию), и лишь после этого началось сначало военное, а потом и коммерческое использование (спутники). Возможно сейчас именно этих первых шагов и не хватает, а коммерческое применение найдется уже позже…
  • Как мы обеспечивали связью «Сапсан» и «Аллегро»
    0
    Не спорю, в малонаселенных местах, да даже часто в районных центрах в области со связью проблемы.
    А по поводу 10 километрах, если, память не изменяет, здесь или на наге же были хорошие статьи про антенны и большие расстояния…
  • Как мы обеспечивали связью «Сапсан» и «Аллегро»
    +1
    Ездил на поезде от Читы до Новосибирска, связь у Билайна была почти все время кроме самых пустых мест… Но тем не менее местами было удивительно: едешь, вокруг кроме поезда ничего нет а ты сидишь в интернете. =)
  • Сравнение юзабилити современных браузеров со старой Оперой
    +5
    Выделение текста в ссылка очень сильно раздражает с тех пор, как пересел на chrome. Немного спасает ситуацию расширение ToggleLink: Select Text From Link — нажатие shift, на наведенной ссылке временно убирает тег . Костыль и не всегда работает, но чаще всего спасает, В других случаях приходится выделять сопутствующий текст, копировать его куда-нибудь (в ту же адресную строку, и там выделять нужный кусок…

    Быстрого отключения изображений так и не дождался, а вот повторная загрузка изображений решилась расширением Reload Image

    Не хватает до сих пор быстрого перехода по элементам страницам с помощью горячих клавиш: если память не изменяет q, a для ссылок и w, s для заголовком, но могу ошибаться… Есть расширение Vimium, но все же не то…

    И что, более интересно в браузере 10 летней давности можно было поменять любую горячую клавишу, любую менюшку! Было куча разных тем и оформлений: действительно разных по формам, иконкам, расположениями окон, а не просто другой картинкой на домашней странице!

    Да стоит вопрос в целесообразности некоторых вещей..., но как небольшая команда разработчиков умудрялась вместить кучу разных вещей, утилит в 10-15 мегабайтный инсталятор, до сих вызывает восхищение!
  • 2ГИС показал новое
    +3
    Уже давно замечаю, что по субъективным ощущениям ваши карты в браузере на десктопе и планшетах работают заметно быстрее чем решения от яндекса или гугла, при куда большем количестве отображаемой информации. Особенно в случаях с плохим интернетом. Как вы этого добились?
  • 2ГИС показал новое
    +2
    В вполне распространенной ситуации, когда обзваниваешь много фирм в поисках чего-либо, сильно не хватает встроенных заметок — есть ли товар (простой чекбокс хотя бы) и по какой цене. Было бы удобно: обзвонил, фирмы без товара скрылись, оставшиеся отобразились списком или на карте…
  • Yii обмен опытом: модели (окончание)
    0
    1. Про html:
    Я не отрицаю необходимость отделения кода от представления. О коде невозможно говорить в сферическом вакууме, и я скромно настаиваю лишь на адекватном отношении к каждой ситуации. Есть общие компоненты системы, которые почти не меняются от проекта к проекту: пользователи/rbac, а есть проектозависимые. И что в одной ситуации хорошо, то в другой будет плохо.

    Задача: Есть в проекте модели, с парой полей, значения которых определяется константами нужно их отобразить значение и возможно оформление (иконка/текст).

    Небольшие комментарии к модели
    Я исхожу из того, что всегда надо сделать проще и понятнее:
    • Если константы, то значит выбор был небольшой и заранее известный, что не потребовало отдельного справочника
    • Поскольку полей мало, то это также не требует отдельной таблицы (скажем, id,modelName,key,value)
    • Мало/много — понятие относительное, надеюсь на вашу адекватную оценку, я отталкивался от границы около десятка-двух моделей.
    • Сложность логики отображения оцениваю в строках кода — больше нескольких строк, значит сложная. (об этом писал Макконелл)




    Разберем разные ситуации:
    1. моделей мало, полей мало, логика отображения сложная — используем виджеты, код разделяется
    2. моделей мало, полей много, логика отображений простая — замечательно будет использовать класс хелпер, разные методы которого будут отображать разные вещи. При сложной логике используем, для отдельных элементов виджеты.
    3. моделей много, полей мало, логика простая — если создавать для отображения каждого поля отдельный виджет и хелпер в котором будет один метод с объемом в пару строк, то вы просто потонете в файлах. Надеюсь не ошибусь, если припомню статью на хабре, где обсуждалась ситуация в Java, когда повсеместным стало подобное поведение — там все было разложено по полочкам. И да, для сложных ситуаций все равно используем виджеты.


    И моя ошибка была в том, что я не указал, что у меня третий случай и в проекте весь интерфейс построен на бутстрапе, а значит ваш комментарий про css\js просто снимается (все уже включено)

    2.
    Чуть меньше не понравилась идея задавать символьные обозначения константам на естественном языке.

    Вы говорили об массиве $statusTitles? Это не обозначения констант, а расшифровка из значений.
  • Yii обмен опытом: модели (окончание)
    0
    Я не против критики, особенно конструктивной. Если уж и написал я пургу, то дайте знать в чем именно?
  • Yii обмен опытом: модели (окончание)
    –4
    1. К константам в моделях я часто сразу добавляю их названия и геттер. Удобно тем, что можно и в виджетах (ListView\GridView) можно сразу прописать вывод статуса и в формах сразу передать список возможных значений в radio или select.
    И не смотря на абсолютно правильную заметку об отделении html кода от логики, иногда отступаю от правила и добавляю метод, который выводит «разукрашенную» версию названия, поскольку добавление нового класса ради одного метода, считаю, внесет больше неудобства и путаницы.

    /**
    * @property string statusTitle
    */
    class MyModel extend CActive Record{
      const STATUS_CREATED = 1;
      const STATUS_SENT = 2;
    
      public static $statusTitles = array(
        self::STATUS_CREATED => 'Новый',
        self::STATUS_SENT => 'Отправленный',
      );
      
      public function getTypeTitle() {
        return self::$statusTitles[$this->status];
      }
    
    
      public function getTypeTitleDesigned() {
        return self::$statusTitles[$this->status];
      }
    
      /** 
      * для определенных случаев выводим "разукрашенную" версию статуса. 
      */ 
     public function getStatusTitleDesigned() {
        // по своей логике определяем украшения: скажем,  иконку и цвет в стиле Twitter Bootstrap'a
        $color = 'success'; 
        $icon = 'ok'; 
    
    
        return TbHtml::labelTb(TbHtml::icon($icon) . " " . $this->statusTitle, array(
          'color' => $color,
        ));
      }
    }
    
    }


    2. Связанные данные. (relations)
    У CActiveRecord есть замечательная особенность — можно целиком переопределять свойство модели зарезервированное уже под связные данные в relations.
    Если есть две модели Team и Member (думаю, связи и поля этих двух моделей очевидны) я использую этот прием для сохранения связанных табличных данных. В отличие от «официального» подхода здесь сохранение данных вынесено из контроллера в модель и можно работать с данными по имени связи сразу после их получения. Также становиться удобно одновременно сохранять данные родительской модели и связанных данных. (например, сразу создаем команду и заполняем информацию о ее участниках)

    Код моделей и контроллера
    /** 
    * @property Member[] $members 
    */ 
    class MyModel extend CActive Record{
     public function rules() {
        return array(
          //....
          array('newMembers', 'safe'), // для того чтобы можно было получить данные из формы
          array('newMembers', 'validateData'), // для их валидации
          //....
        );
      }
    
     public function relations() {
        return array(
          //....
          'members' => array(self::HAS_MANY, 'Member', 'teamId', 'index' => 'id'),
          //....
        );
      }
    
       /**
       * Получение из формы табличных данных и объединение их с уже существующими.
       * @param mixed $newMembers
       */
      public function setNewMembers($newMembers) {
        $members= $this->members; 
        foreach ($newMembers as $memberId=> $data) {
          if (is_numeric($memberId) && $memberId!= 0) { // отсекаем ненужные данные
            if ($members[$memberId]) { // если уже существует
              $member= $members[$memberId];
            } else { // если не находим, создаем новую модель
              $member= new Member('create');
              $member->teamId= $this->id;
              $members[$memberId] = $member; 
            }
            $member->team= $this; // для того чтобы избегать лишних запросов к базе
            $member->attributes= $data;
          };
        }
        $this->rates = $rates; // вся магия здесь =)
      }
    }
    
      /**
       * Проверка данных
       */
      public function validateData() {
        if (!$this->rates) return true;
        $ok = true;
        foreach ($this->rates as $rate) {
          $ok = $rate->validate() && $ok;
        }
        return $ok;
      }
    
      /**
       * Сохранение данных
       */
      protected function afterSave() {
        $this->saveData();
        parent::afterSave();
      }
    
      public function saveData() {
        if (!$this->members) return;
        foreach ($this->members as $member) {
          $member->save(false); // мы данные уже проверили в validateData()
        }
      }
    
    
     
    

    Код контроллера получается логичным

    class TeamController extends Controller{
    
    
      /**
       * Добавление нового команды и ее членов
       */
      public function actionCreate() {
        $model = new Team('create');
    
    
        if (isset($_POST['Team'])) {
          $model->attributes = $_POST['Team'];
          $model->setNewMembers($_POST['Member']);  
         /* 
         Подразумевается, что в представлении в одной форме мы 
         вместе заполняем данные и для команды и для ее членов.
    
         Хотя и здесь, конечно,  можно выпендриться и добавлять все данные о членах команды 
         в том же массиве, что и команда.    
         Таким образом сократиться второе присваивание, только можно будет запутаться в именах. =)
         */
    
          if ($model->save()){ 
             Yii::app()->user->setFlash('success', 'Все замечательно');
              $this->redirect(array('view', 'teamId' => $model->id));
          }else{
             Yii::app()->user->setFlash('alert', 'Возникли ошибки');
          }
    
        }
    
        $this->render('create', array(
          'model' => $model,
        ));
      }
    
    
    }
    
    

  • Часть 3. Знакомьтесь — лазер по имени Amaris. Переезды и первое пробуждение VisuMax
    0
    Подскажите, пожалуйста, а каким образом предотвращаются микродвижения глаз?