• Как правило организовать рабочее окружение web разработчика?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Самый простой вариант для PHP-WEB-DEV под винду: https://www.easyphp.org/
    Ответ написан
    Комментировать
  • Как правило организовать рабочее окружение web разработчика?

    Sanes
    @Sanes
    windows wsl
    Ответ написан
    Комментировать
  • Что такое обратный вызов в программировании?

    bingo347
    @bingo347
    Crazy on performance...
    Что такое обратные вызовы?
    Я знаю только что это функция которая передается как аргумент в другую функцию.
    В принципе, можно и так сказать. Если быть более точным - это вызов функции переданной в качестве аргумента.
    Почему они так называются?
    Это игра слов. На английском callback - это не только обратный вызов, но и обратный звонок (по телефону). Данная абстракция позволяет вызываемому коду вызвать вызывающий код, подобно тому как собеседник может перезвонить Вам позднее, если Вы сообщите ему куда.
    В чем их смысл и зачем нужны?
    В принципе я уже ответил, они нужны для возможности вызываемому коду вызвать вызывающий код. Это позволяет строить высокоуровневые абстракции, вроде обобщенных функций или асинхронных функций.
    Обобщенные функции позволяют не писать однотипный код, снижая тем самым вероятность ошибок, а с помощью обратных вызовов они могут принимать в себя фрагменты кода, которые могут меняться от использования к использованию. Для примера, абстрагируем цикл от 0 до n на C:
    // абстракция цикла
    void each(int n, void (*callback)(int, void*), void* closure_data) {
      if(n <= 0) { return; }
      for(int i = 0; i < n; i++) {
        (*callback)(i, closure_data);
      }
    }
    
    // колбэк - тело цикла, вариант 1
    void cb_body1(int i, void*) {
      printf("%d", i);
    }
    
    // колбэк - тело цикла, вариант 2
    void cb_body2(int i, void* acc) {
      int* normalized_acc = (int*)acc;
      *normalized_acc += i;
    }
    
    int main() {
      each(10, cb_body1, null); // напечатает строки 0, 1, ...9
    
      int result = 0;
      each(10, cb_body2, &result); // посчитает в result сумму чисел от 0 до 9
      printf("%d", result);
      return 0;
    }

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

    Так же стоит заметить, что во многих высокоуровневых языках наряду с обратными вызовами используется механизм замыканий, который позволяет объявлять функции внутри других функций и захватывать окружающие переменные. Но нужно понимать, что это лишь компиляторный сахар, и на самом деле в функцию просто передаются указатели на захваченные переменные в качестве аргументов, подобно тому, как я сделал это руками в примере выше, с помощью аргумента closure_data в функции each. Обычно компилятор создает для этого анонимные структуры (C++, Rust) или анонимные классы (C#), которые хранят указатель на функцию и указатели на окружение. А в некоторых языках, например в js, замыкания возведены в абсолют, и каждая функция является замыканием.
    Ответ написан
    2 комментария
  • Что такое обратный вызов в программировании?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Некоторые случаи использования коллбека (помимо асинхронного упомянутого использования):

    В коде: отложенный (ленивый) вызов.
    Например есть некий контейнер, в него мы регистрируем некие объекты с некоторой логикой.
    Но так как очень много таких кандидатов и они все запускаются, замедляя и работу и нагружая ресурсы, то мы бы хотели, чтобы контейнер просто знал о них, но при инициализации не запускал весь код создания этих объектов. На помощь приходят коллбеки — в коллбеке мы описываем логику создания объекта и (внимание) регистрируем именно коллбек с этой логикой создания, все — это очень быстро и легко, тк не наплодили объектов. Далее только при вызове нужного объекта контейнер видит, что зареган коллбек и вызывает его, тем самым инициализирует создание нужного объекта, описанное в этом коллбеке! ПРОФИТ!

    В коде: рекурсивно применить некоторый функционал к элементам коллекции.
    Очень популярное использование в Java в стримах.
    Есть коллекция элементов, запускаем некий map(), reduce(), filter(). walk() по набору элементов (коллекции) передавая в этот обход коллбек, и ожидаем, что получим результирующий набор после применения коллбека к каждому элементу. То есть этот коллбек будет выполнени внутри обхода, сама конструкция этих методов подразумевает, что вы передадите что-то что потом вызовется.

    Между системами: асинхронное взаимодействие
    Hook, callback
    Есть программа, которая ждет событий от внешней системы. Например есть платежная система Яндекс.Касса и есть ваш магазин. Вы отправили клиента на оплату в платежку, но он ушел "в путешествие" и вы не можете узнать судьбу платежа сразу. Вы можете бомбить сайт платежки, проверяя статус по номеру транзакции, а можете дождаться обратного вызова (коллбека, хука) от платежной системы с событием "Оплатил" или "Не оплатил, тк не хватило".
    Также в др системах — само оповестит, вызвав обратно уже меня.
    Ответ написан
    3 комментария
  • Что такое обратный вызов в программировании?

    Обратный вызов (англ. callback) — это ещё одна функция, которую вызовут «потом».

    Бытовой аналог – когда отправляешь в письме на радиостанцию пустой конверт со своим же адресом и марками, чтобы в нём прислали ответ.

    Обычно это нужно при асинхронном выполнении — когда строчки кода не последовательно выполняются одна за другой, а запускается (и отпускается) какая-то долгая задача и ещё неизвестно, когда она закончится.

    Например, нужно выполнить HTTP запрос к далёкому серверу и получить от него ответ.

    Тогда в функцию, которая займётся общением с далёким сервером, передают не только параметры запроса, но и callback-функцию, которая будет вызвана после получения ответа, с данными из ответа.
    Ответ написан
    1 комментарий
  • Что такое обратный вызов в программировании?

    @AlexSku
    не буду отвечать из-за модератора
    Я применял в Direct Show (обработка видео). Есть сторонний поток, который пропускает через себя кадры. Главная программа может постоянно его опрашивать, не появился ли новый кадр. Но зачем тратить время на опросы, когда они только редко будут возвращать положительный результат? Поэтому главная программа просто передаёт ссылку на свой обработчик (функция обратного вызова), а поток, пропускающий видео будет её вызывать всегда в нужное время (желательно, чтобы обработчик успевал всё сделать быстро).
    Ответ написан
    Комментировать
  • Что такое обратный вызов в программировании?

    Griboks
    @Griboks
    Когда функция выполняется долго, нет смысла ожидать её завершения (визуально это будет выглядеть как зависший браузер, и пользователь закроет сайт). Поэтому ей передают callback, мол, сама сообщишь, когда закончишь работу.
    Ответ написан
    Комментировать
  • Что такое обратный вызов в программировании?

    andreydobrin
    @andreydobrin
    Сложно , но это пока
    Все очень просто:
    Вы правильно сказали, что это функция, передающаяся как аргумент в другую функцию:
    пример с js
    function  first(callbak){
    ----здесь пишем код функции----
    ---- здесь можно записать код "функции обратного вызова" 
    и она сработает тогда, когда выполнится функция first()----
    }

    Простым языком - есть одна функция и у нее в параметре другая. Сперва выполнится сама функция, а потом та, которая является аргументом этой функции.
    Ответ написан
    Комментировать
  • Как изменить кодировку в консоли windows для отображения кириллицы?

    @res2001
    Developer, ex-admin
    Что cmd в винде уже нормально переносит UTF8?
    Помнится в Вин7 и ниже его корежило если выставить UTF8. Правда я с тех пор этой темой не интересовался.

    По вопросу - посмотрите эти ссылки:
    https://otvet.mail.ru/question/174325990
    https://superuser.com/questions/269818/change-defa...

    Но я бы просто использовал chcp. Можете сделать себе ярлык на раб.столе на cmd.exe, чтоб там при запуске срабатывала эта команда.
    Ответ написан
    Комментировать
  • Как в C# подключить свою библиотеку dll при работе из консоли?

    @none7
    shared1.cs
    public class MyShared {
        public static string getHello() => "Hello, World";
    }
    prog.cs
    class MyProgram {
    	static void Main(string[] args) => System.Console.WriteLine(MyShared.getHello());
    }

    csc /t:library shared1.cs
    csc /t:exe /r:shared1.dll prog.cs
    Ответ написан
    Комментировать
  • Объясните что такое полиморфизм простыми словами ?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Полиморфизм указывает, какую версию метода текущего объекта запустить.
    Например, у вас есть несколько наследуемых классов, с разной реализацией одного и того же метода. То есть, у вас есть несколько разных методов с одинаковым именем (и сигнатурой), реализованных в разных классах. Какую версию метода вызвать? Это зависит от типа переменной, в которой находится объект.
    Также с помощью полиморфизма можно поместить объекты разных классов в один массив с типом базового класса.

    Создадим три класса с двумя методами - один виртуальный, а другой нет. Виртуальный метод переопределён (override) в классах-наследниках. Невиртуальный метод просто скрыт в наследниках новой реализацией (невиртуальные нельзя переопределять).
    class Animal {
        public void Info() { Console.WriteLine("Animal"); }
        public virtual void Say() { Console.WriteLine("Nothing to say"); }
    }
        
    class Cat : Animal {
        public void Info() { Console.WriteLine("Cat"); }
        public override void Say() { Console.WriteLine("Meow"); }
    }
        
    class Dog : Animal {
        public void Info() { Console.WriteLine("Dog"); }
        public override void Say() { Console.WriteLine("Woof"); }
    }

    При создании объекта важно, в переменную какого типа объект будет записан:
    Dog dog1 = new Dog();
    Animal dog2 = new Dog();
    // Не виртуальный метод - вызовется метод класса, указанного у переменной 
    dog1.Info(); // напишет Dog
    dog2.Info(); // напишет Animal
    // Виртуальный метод - вызовется метод класса, которого переменная реально имеет
    dog1.Say(); // напишет Woof
    dog2.Say(); // напишет Woof


    А теперь частая ситуация, когда полиморфизм нужен - при итерации массива:
    Animal[] animals = new Animal[10];
    FillAnimals(animals); // заполним массив вперемешку собаками и кошками
    
    foreach (var animal in animals) animal.Say(); // вызовется правильный метод
    // У невиртуальных методов так сделать нельзя! Полиморфизм в действии

    Наследование без виртуальных методов полезен только фиксацией интерфейса.

    Вот весь код примера: code.re/5ZC
    Вставьте его вот сюда и проверьте.

    P.S. Написал код на C#, чтобы подчеркнуть разницу между виртуальными и невиртуальными методами. В Javascript все методы виртуальные (как и в php, например).

    UPD. (спасибо @Petroveg)
    В языке C# (и других статически типизированных) обычно делают так - если метод в базовом классе записывается для всех потомков и оттуда будут использоваться напрямую, то он помечается обычным, невиртуальным. А если метод предназначен для того, чтобы в наследниках его переопределить, то необходимо его сделать виртуальным, чтобы при вызове метода компилятор выбрал нужную версию метода. То есть некоторые методы лучше делать виртуальными, а некоторые нет.
    И ещё раз - виртуальность важна только в одном случае - если объект-наследник записан в переменную базового класса:
    Animal animal = new Dog();
    В javascript невиртуальных методов не бывает - динамическая основа этого языка ВСЕГДА автоматически вызывает именно последнюю версию метода, определяя конкретную по цепочке прототипов. Поэтому в Javascipt, по большому счёту, сильно думать о полиморфизме смысла нет - это только абстрактная концепция, не влияющая на сам код, а только на архитектуру.
    Ответ написан
    6 комментариев
  • Почему не работают горячие клавиши в Unity3d по Ubuntu?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Как минимум потому, что официально Linux для юнити идет так, "между делом". Хорошо что вообще работает )
    Кстати, в винде тоже периодически отваливаются хоткеи юнити - так что не нойте )))
    Ответ написан
    Комментировать
  • По вашему опыту - поможет ли от выгорания смена работы?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Мне лично помогают мои личные домашние проекты. Щупаю технологии и языки, которые хочу и мне это помогает от выгорания.
    Когда вообще всё надоедает, я увольняюсь и полгода-год не работаю, а катаюсь по разным странам пока не надоест.
    Ответ написан
    Комментировать
  • Как обосновать повышение зарплаты?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Ищи другую работу с повышенной оплатой. Когда найдёшь - приходи с этим аргументом к руководству за повышением с суммой выше той, что нашёл. Не согласятся - уходи на новое место.
    Самый беспроигрышный вариант. В любом из двух вариантов будешь в выигрыше.
    Ответ написан
    6 комментариев
  • Векторная графика в Unity для 2D игры?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Экспорт в PNG это нормальная практика, все так делают. Если хочется получить честную векторную графику в юнити, то начиная с 2018.1 существует пакет com.unity.vectorgraphics, здесь можете почитать о нём подробнее. Либо можете воспользоваться плагином.
    Ответ написан
    Комментировать
  • Векторная графика в Unity для 2D игры?

    GavriKos
    @GavriKos Куратор тега Unity
    Некоторым художникам проще работать в векторе - раз. В некоторых случаях вектор легче редактировать (UI, например) - два. Вектор всегда легче перегнать в большее разрешение, чем растр - три. Надо - используйте в юнити сразу вектор (правда нативно вроде бы пока нельзя) - четыре.
    Ответ написан
    Комментировать
  • Где кроется ошибка в коде php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Пустая строка равна false при нестрогом сравнении.
    Ответ написан
    Комментировать
  • Где кроется ошибка в коде php?

    bitniks
    @bitniks
    Go/PHP/Symfony developer
    Потому что идет проверка на равенство $url и false. А они равны, если учитывать приведение типов, поэтому выполняется первый case. Вы как-то не так используете switch
    Ответ написан
    2 комментария
  • Чем в c# заменяют многомерные ассоциативные массивы?

    @AlexP11223
    У меня в проекте из бд вытаскиваются данные о объекте

    Ну так и создайте класс и объект (можно еще на ORM типа Entity Framework посмотреть), причем тут массив?

    А вообще для ассоциативных массивов можно использовать Dictionary msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.1...
    Ответ написан
    Комментировать