• Почему анонимная функция работает только с последним значением переменной?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Тут суть в том, что в момент, когда анонимная функция начнёт выполняться - выполнение цикла к тому моменту уже закончится и i будет равна 10.
    Т.е. шедулер не успевает запустить горутины, они фактически запускаются уже после цикла, но часть из них может успеть и во время цикла запуститься...

    Самый простой способ получить желаемый результат передать значение как параметр
    go func(idx int) {
        ...
    }(i)


    Полный пример:
    package main
    
    import (
        "sync"
    )
    
    const N = 10
    
    func main() {
        m := make(map[int]int)
        wg := &sync.WaitGroup{}
        mu := &sync.Mutex{}
        wg.Add(N)
        for i := 0; i < N; i++ {
            k := 5
            go func(idx int) {
                defer wg.Done()
                mu.Lock()
                println(idx, k)
                m[idx] = k
                mu.Unlock()
            }(i)
        }
        wg.Wait()
        println(len(m))
        println(m[0])
    }
    Ответ написан
    4 комментария
  • Кто-нибудь использует очки для компьютера?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Значит так комрады:
    Сижу за компом с 1989 года... по 8-16 часов в день. 2 месяца назад первый раз за 20 лет проверял зрение, проходил коммисию для водительских прав. Окулист был в шоке, зрение практически 100%.

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

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

    Для того что бы описанных выше являений не было, решение есть:
    • бросьте курить;
    • делайте зарядку для глаз, хотябы раз в день и при усталости (но лучше отдохнуть);
    • поставьте два монитора, тогда двигать глазами будете больше и будет лучше кровообращение и отвод лимфы (в очках ви будете двигать головой, а не глазами);
    • два раза в день по 1-му часу выходите на свежий воздух, например к турнику;
    Ответ написан
    2 комментария
  • Зачем нужен __invoke и когда его нужно использовать?

    @inFureal
    Метод __invoke() вызывается, когда скрипт пытается выполнить объект как функцию.

    <?php
    class CallableClass
    {
        public function __invoke($x)
        {
            var_dump($x);
        }
    }
    $obj = new CallableClass;
    $obj(5);
    var_dump(is_callable($obj));
    ?>


    Из официальной документации. Когда вместо вызова метода класса, класс вызывается как функция.
    Ответ написан
    3 комментария
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
    2 комментария
  • [решено] Как сделать запрос с $or в Doctrine MongoDB ODM?

    zvuki
    @zvuki Автор вопроса
    нашлось )

    /**
    * Adds an "or" expression to the current query.
    *
    * You can create the expression using the expr() method:
    *
    * $qb = $this->createQueryBuilder('User');
    * $qb
    * ->addOr($qb->expr()->field('first_name')->equals('Kris'))
    * ->addOr($qb->expr()->field('first_name')->equals('Chris'));
    *
    */
    Ответ написан
    Комментировать
  • PDO или ORM в PHP?

    @Imenem
    Мне нравится подход, используемый в Yii framework — простые запросы можно реализовать с помощью ORM, а для сложных есть более низкий уровень абстракции, основанный на PDO. Таким образом можно сочетать оба подхода в зависимости от сложности того или иного элемента проекта.
    Ответ написан
    Комментировать
  • PDO или ORM в PHP?

    MARDEN
    @MARDEN
    Тоже задавался подобным вопросом. Пробовал доктрину и пропел, но откинул их ввиду большой прожорливости и костылей при сложных запросах. Также раздражало огромное количество вспомогательных файлов (базовые классы, мапперы и т.п.) на каждую модель, сгенерированные этими библиотеками. В итоге сделал свою ORM на базе Zend_Db_Table, Zend_Select (это особенно выгодно, когда сам проект построен на ZF).
    Для простых случаев удобно использовать Active Record. Самым удачным примером реализации считаю AR в фреймворке Yii.
    Ответ написан
    1 комментарий
  • Позднее статическое связывание php: как это работает?

    MegaMufa
    @MegaMufa
    Смотрите. Есть такая простая иерархия классов:
    class A
    {
        public static $text = 'class A';
    
        public function selfTest()
        {
            echo self::$text;
        }
    
        public function staticTest()
        {
            echo static::$text;
        }
    }
    
    class B extends A
    {
        public static $text = 'class B';
    }


    Мы создаем экземпляк субкласа и вызываем методы, определенные в предке.
    $obj = new B();
    $obj->selfTest(); // выведет "class A"
    $obj->staticTest(); // выведет "class B"

    self всегда указывает на тот класс, в котором он написал. Здесь метод описан в классе A, и self указывает на класс A, хоть и вызывается из класса B.
    Значение static вычисляется при вызове. И static указывает на класс объекта в котором произошел вызов. В нашем случае он указывает на B, хотя сам код описан в классе A.

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

    С обычными не статичными членами это и так работает, потому что они собираются, когда вы создаете объект класса. Что бы это работало для статичных методов, надо использовать static
    Ответ написан
    1 комментарий
  • Как правильно вести разработку php приложения в docker?

    @IgoNsk
    backend web developer
    Вот мой доклад на конференции на эту тему
    https://2018.codefest.ru/lecture/1260/
    Может быть будет что то полезно от туда.
    Ответ написан
    Комментировать
  • Jquery-плагин для таймлайн-таблицы (занятость номеров)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    arshaw.com/fullcalendar/ — применял на проекте где требовался функционал, похожий на описанный вами.
    Ответ написан
    Комментировать
  • PHP как суммировать массив по ключам?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    о господи.
    никакой таблицы archive, никакого ада с explode, никакого крона и никакого колупания с массивами в пхп тут быть не должно.
    в таблице results должно быть поле с датой.
    вся нужная информация берется из нее одним запросом
    SELECT user, sum(km) FROM results WHERE date BETWEEN начало AND конец GROUP BY user

    Вместо начало и конец подставить нужные даты - хоть неделя, хоть месяц, хоть год.
    Ответ написан
    Комментировать
  • Какой стиль программирования выбрать, чтобы не вникать спустя время в проект?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Тут как раз речь о том, что применимо для всех языков, а не только для PHP.
    Если будете применять устоявшиеся практики и паттерны; не изобретать велосипеды, а искать и интегрировать имеющиеся решения; а также уместно комментировать код и вести документацию - через год поблагодарите себя, даже если не придётся возвращаться к написанному и править, потому что вырастите в целом как востребованный специалист.
    Ответ написан
    Комментировать
  • Есть ли готовые решения для сайта по работе с таблицами на подобие exсel?

    daemonhk
    @daemonhk
    ПсиХоПат
    Google Docs подключите ему, пусть радуется
    Ответ написан
    Комментировать
  • Как сделать каждому checkbox свой input в Yii2?

    qonand
    @qonand
    Software Engineer
    Для построение такой штуки лучше использовать готовое расширение, например вот а не делать самому ...
    Ответ написан
    4 комментария
  • Как сделать подсказки в phpstorm?

    65536
    @65536
    в авторежиме тревожно. лучше при необходимости Ctrl+Q нажать

    или если прямо постоянно нужна пока что-нибудь изучаешь, приделать это окно где нибудь сбоку и зажать в нем кнопку автоапдейт фром сорц
    Ответ написан
    3 комментария
  • (Yii2) Как убрать web с url?

    pro100ShCoder
    @pro100ShCoder
    программист
    вот одно из решений https://github.com/ilopX/yii2-basic-htaccess
    единственно на что обратите внимание - это на директиву Options +FollowSymlinks
    могут некоторые хостеры ругаться - 500 error
    в этом случае можно будет заменить на Options +SymLinksIfOwnerMatch
    Ответ написан
    Комментировать
  • Как удалить приложение из Launchpad Mac OS X?

    donkaban
    @donkaban
    Умею рисовать тени
    Нажать и держать cmd-alt :)
    Ответ написан
    6 комментариев
  • Как удалить приложение из Launchpad Mac OS X?

    hummingbird
    @hummingbird Автор вопроса
    Помогла команда
    defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock


    Но будьте готовы потом расставлять ярлыки...
    Ответ написан
    2 комментария
  • Странное поведение pycharm?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сейчас я проясню ситуацию=).
    Текст бывает либо в какой-то кодировке (cp1251, utf-8, win866, ascii, и т.д.), тогда это байты; либо в юникоде (это, как бы, абстрактное представление символов), тогда это строки из абстрактных юникодовых символов.
    Все файлы, потоки ввода-вывода и т.д. у нас в компьютере работает с байтами, а не с абстрактными юникодовыми символами. Это значит, что перед выводом в файл или консоль должно производиться кодирование юникода в конкретную кодировку.
    Кодировка -- это способ представить байтами абстрактных символов юникода. Каждый юникодовый символ, в зависимости от кодировки, будет задаваться одним или более байтом. Некоторые абстрактные символы не поддерживаются некоторыми кодировками.

    Так, например, кодировка ascii поддерживает только стандартные 128 символов и при попытке конвертировать в неё (явно или неявно) букву "Ж", будет такая же ошибка как у вас. Надо полагать метод parse в вашем случае возвращает юникод, а оператор print делает неявное преобразование в кодировку по умолчанию (ascii, судя по сообщению об ошибке).
    Осталось выяснить в каких случаях как определяется кодировка по умолчанию.
    Артём Клименко правильно предложил в своём ответе проверить что берётся в качестве кодировки по умолчанию в том и другом случае.
    Однако решением проблемы должно быть явное преобразование текста в нужную кодировку. Я в таких случаях придерживаюсь следующих правил:
    • Всё, что приходит в программу, привожу в юникод (если это не произошло неявно в той библиотеке, посредством которой я получил данные).
    • В программе работаю с текстом только в юникоде (если речь не идёт о каких-то низкоуровневых операциях над байтами, вроде парсинга протоколов и прочего.
    • Перед выводом конвертирую текст в нужную кодировку или настраиваю потоки вывода на автоматическое преобразование.
    • Когда не понятно в какой кодировке делать вывод, руководствуюсь следующими правилами:
      • Выходной поток -- это виндовый stdout и в нём не задана кодировка (bat-файлы, консоль) -- cp866
      • Файлы, БД и прочее, что поддерживает юникод и сделано правильно -- UTF-8
      • Когда в винде не помогают пердыдущие пункты -- cp1251
      • В других операционках utf-8.


    Подчеркиваю. Если выходной поток сконфигурирован на ascii, а у нас в программе могут попасться не-ascii символы, то нужно приводить текст в какую-то кодировку (см выше)), а иначе ничего не трогаем и пишем юникод.
    Ответ написан
    Комментировать