• Что такое git checkout?

    toxa82
    @toxa82
    Основная функция git checkout это перемещать указатель HEAD, т.е. то куда смотрит ваша локальная копия. Вы можете переместить его на вершину ветки: git checkout <branch> или на отдельный коммит: git checkout <sha>Ну а вспомогательные это создание веток:git checkout -b, отмена изменений в файле:git checkout -- <file>
    Ответ написан
    2 комментария
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    Почему генераторы потребляют меньше памяти, чем массивы?

    Простой ответ.

    Потому что генератор не хранит результат своих промежуточных вычислений в памяти.
    Массив это структура данных, которая хранит все свои значение в памяти, последовательно и безапелляционно :-)

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

    Сложный ответ (для тех, кто умеет читать много букв)

    Генератор это подвид итератора. Итератор в контексте программирования это поведенческий паттерн, описанный в знаменитой книге "банды четырех". Его суть - в предоставлении "возможности последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления."

    Итераторы в разных языках программирования как правило представлены специальным интерфейсом (или протоколом), который нужно реализовать для создания собственных итераторов.

    Генератор это частный случай итератора, который, как правило, создается функцией возвращающей объект итератора. Для упрощения создания генераторов языки программирования предоставляют программистам специальное ключевое слово yield, которое должно использоваться вместо return (либо совместно с ним). yield создает итератор под капотом, позволяя не реализовывать весь протокол Итератора вручную.

    Справка из википедии:
    Одним из способов реализации итераторов является использование сопроцедур, которые могут возвращать управление (и вычисленные результаты) несколько раз, запоминая своё состояние и точку возврата в предыдущем вызове. В некоторых языках сопроцедуры могут быть представлены особого вида функциями, называемыми генераторами. Генератор — функция, которая помнит, в каком месте был предыдущий return (yield), и при следующем вызове возобновляет работу с прерванного места
    .

    Еще одно определение генераторов:
    Генератор — это объект, который сразу при создании не вычисляет значения всех своих элементов.
    Он хранит в памяти только последний вычисленный элемент, правило перехода к следующему и условие, при котором выполнение прерывается.
    Вычисление следующего значения происходит лишь при выполнении метода next(). Предыдущее значение при этом теряется.
    Этим генераторы отличаются от списков — те хранят в памяти все свои элементы, и удалить их можно только программно. Вычисления с помощью генераторов называются ленивыми, они экономят память


    Суть работы yield одинакова для всех ЯП.
    Вот описание принципа работы yield для языка C# ( вы же все знаете Джона Скита? - главного эксперта stackoverflow и автора известных книг), где это ключевое слово появилось довольно давно (в 2005-м, в Python -2001-м, а вообще - в 1975 году) и многие другие ЯП со временем переняли его.

    При наличии оператора yield return внутри метода компилятор строит на основе данного метода конечный автомат. Для реализации итератора конечный автомат обладает следующими свойствами:

    1. Он имеет некое начальное состояние
    2. При вызове MoveNext() выполняется код из метода GetEnumerator() по тех по, пока не будет достигнут оператор yield return;
    3. Когда используется свойство Current, он возвращает последнее выданное значение.
    4. Он должен знать, когда выдача значений завершена, чтобы метод MoveNext() мог возвратить false;



    Генераторы как подкласс итераторов имеют огромное значение для так называемых "ленивых вычислений".

    Они позволяют создавать (вычислять) значения на лету и тем самым экономить память, в отличие от "энергичных вычислений".
    Таким образом, на основе генераторов можно реализовать создание бесконечных последовательностей, чтение из бесконечного потока, чтение данных не вмещающихся в ОЗУ компьютера, ленивые вычисления, конвейерную обработку данных (можно создавать целые pipelines из генераторов), асинхронные корутины и т .д.

    P.S. Генераторы не имеют никакого отношения к циклам (цикл это только лишь один из способов обхода генераторных коллекций - извлечения значений из них ). Также генераторы не являются никаким синтаксическим сахаром ("красивой оберткой для цикла"), как было написано в других ответах. Синтаксических сахаром является исключительно само ключевое слово yield. При выполнении кода с yield он компилируется в Finite State Machine .
    Ответ написан
    6 комментариев
  • Ошибка выполнения команды консоли в Firefox?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Потому, что формально вы вызываете примерно такой код
    let age = prompt('Сколько тебе лет?');
    alert(`Тебе ${age} лет!`);
    
    let age = prompt('Сколько тебе лет?');
    alert(`Тебе ${age} лет!`);

    Переменная age объявлена дважды в пределах одного контекста. Что является ошибкой. Хром тоже так себя вёл до недавних пор. Потом, разрешил непосредственно в консоли повторно объявлять переменные с использованием let/const
    Ответ написан
    2 комментария
  • Практическое применение ИИ?

    dom1n1k
    @dom1n1k
    Современный ИИ - это по сути классификаторы разной направленности и сложности.
    То есть слово "интеллект" там употребляется условно.
    Ответ написан
    Комментировать
  • Виртуальное существо(червяк) на чём делать, чтоб двигалось, имело смысл жизни, питалось?

    Zifix
    @Zifix
    Barbatum
    Тут не у всех людей смысл жизни есть, а вы про червяков!

    Делать можно на любом языке программирования.
    Ответ написан
    Комментировать
  • Какова правильная логика обновления клиента игры?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Есть версия и есть хеш-сумма текущей версии всех данных приложения (файлы + БД).
    При запуске - проверяются оба значения.
    При несоответствии - выполняется операция синхронизации:
    1. Выявление различий
    2. Подготовка списка изменений относительно текущей версии у пользователя
    3. Резервирование текущей версии пользователя
    4. Загрузка всех необходимых файлов на устройство пользователя. (с возможностью докачки при разрыве соединения)
    5. Выполнение изменений.
    6. Проверка сделанных изменений (п.1)
    7. Удаление резервной копии (созданную в п.3)
    При прерывании любого из пунктов (сел аккумулятор у ПК или смартфона и прочее) - всегда должна быть возможность продолжить обновление с прерванного шага.
    Ответ написан
    Комментировать
  • Как взламывают сим-карты?

    @qweqwa
    Потом в зоне видимости были замечены какие-то парни и девушки со смартфонами, что-то упорно ковыряющие в них.


    Взлом SIM-карты осуществляется путём подключения к сети SS7 через интернет.
    При этом можно находиться на другой стороне земного шара.

    На Хабре с месяц назад была подробная статья как это делается.

    Второй вариант: троян/вирус и т.п.
    Решение: используй примитивный телефон, который умеет только звонить. В него невозможно ничего подсадить.
    Ответ написан
    6 комментариев
  • Куда развиваться в C#?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Го на работу устраиваться, а то так можно всю жизнь учиться.
    Ответ написан
  • Сидячий образ жизни кодера на самом деле ухудшает здоровье?

    I_CaR
    @I_CaR
    программист в прошлом.
    Лень фото искать...
    Вообще всё лень...
    Так вот там, на фото, на рабочем столе свободно только пространство коврика, для мышки (ей нужно активно бегать - геймер ещё тот я).
    И перед клавой, там бумажки всякие для набросков, эскизов и так, для заметок.
    А по периметру... Одни бутылки пустые из-под тёмного! Какие-то пакеты от чипсов и т.п. ерунды.
    Вокруг стола, под столом и на колонках тоже бутылки. (благо монитор не загораживают)
    Кодер с начала 2000-х.
    Возраст 37 лет.
    Рост 175.
    Вес 58-63.
    Жены нет 7 лет.
    Головные боли.
    Апатия.
    Сплю много и как попало.
    Вечно голодный.
    Чувство собственной нереализованности в обществе.
    Очень похож на... Радиона Расскольникова!
    (Уже готов грабить и убивать)
    (зря в конце 90-х решил завязать с криминальными перспективами.)
    Сейчас бы был с ходкой, с наколками - люди бы уважали!
    Имел бы бизнес - "Деньга на дом" или что-то в этом роде.
    Короче компьютерные технологии это тупиковая ветвь развития человека.
    О чем и мультик Wall•е.
    Ответ написан
    4 комментария
  • Кто такой кодер? и чем он отличается от программиста?

    @beduin01
    Мне интересно откуда в голове у людей такая каша в стиле: кодер это плохой специалист, а программист хороший.

    У меня куча хороших кодеров есть и она себя точно так же кодерами называют, хотя пишут и алгоритмы и рыночные продукты.

    Это как-то самопридумалось или откуда такие шаблоны пошли?
    Ответ написан
    3 комментария
  • Кем можно работать, учась на программиста?

    @Alexey_Kutepov
    Разработчик программного обеспечения
    А сам чем хочешь заниматься?
    Ответ написан
    Комментировать
  • В чём фишка https?

    SagePtr
    @SagePtr
    Еда - это святое
    Потому что злоумышленник может подменить трафик по пути. И информация на этом "информационном" сайте станет такой, которая выгодна злоумышленнику.
    Ответ написан
    2 комментария
  • Какие ЯП не требуют кучу прикладнухи для устройства на работу?

    barmaley_exe
    @barmaley_exe
    Никакие.

    Один лишь ЯП в вакууме с точки зрения применения в конечном продукте абсолютно бесполезен. Ибо, как правило, программный продукт существует не обособленно, а, так или иначе, взаимодействует с другими программами (операционной системой, например). Более того, зачастую разумно не изобретать велосипед, а воспользоваться уже готовым решением, которое было проверено временем. Таким образом, приходится знакомиться с кучей уже существующих технологий.

    Вообще, в области server / desktop / mobile очень сложно уйти далеко без, как минимум, следующего:
    • Объектно-ориентированное программирование и проектирование — ведь код не должен быть говном
    • Параллельное программирование — ведь делать нужно много и быстро, а у нас уже 10 лет как многоядерные машины есть
    • Сети — ведь нельзя жить без интернета
    • Базы данных — ведь данные надо где-то хранить, и хранить надёжно


    hardware не комментирую, но там ещё хардкорнее.

    Собственно, для программиста не столько важно знать какой-либо конкретный ЯП, а важно владеть технологиями разработки. ЯП, конечно, входит в это множество, но им оно совсем не ограничивается.
    Ответ написан
    3 комментария
  • Программист без технического образования: быть или не быть?

    opium
    @opium
    Просто люблю качественно работать
    может
    ни на каком этапе
    Ответ написан
    Комментировать
  • "Запасная" профессия для программиста?

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

    @Dum_spiro_spero
    Опишите ситуацию целиком.
    По опыту - бывает ситуация когда клиент хочет чтобы ему не только сделали некую работу, но и научили делать такую же работу самому, рассказали о ситуации на рынке, конкурентах, ценах у конкурентов, и т.п...
    Простой пример - клиент хочет купить компьютер - но сомневается в своих возможностях купить рассыпь комплектующих и все скрутить/собрать. Поэтому у потенциального продавца он выспрашивает массу инфы - чтобы использовать ответственные знания, а не из книжки, и сэкономить на оплате сборщика-компьютерщика. Но возможно в процессе беседы он решит, что игра не стоит свеч и тогда продавец получит свои деньги. Правда таких клиентов все же очень мало.
    Наверное в любой деятельности есть некие моменты связанные с коммерческой тайной, если это не навык формирующийся годами - я могу во всех подробностях рассказать как надо играть на пианино например ))).
    Или то, что клиент мог бы сделать в принципе сам, но не хочет - нет времени-желания-инструмента-навыки недостаточно качественны. И если клиент сам представляет как и что надо делать - то вопросы логичны - потому что способ выполнения работы будет влиять на качество результата. А роль качества может проявиться существенно после гарантийного срока.
    Ответ написан
    Комментировать
  • Каким способом лучше хранить большое количество константных значений в C#?

    aush
    @aush
    Для таких вещей есть стандартное встроенное средство - ресурсные (.resx) файлы.
    Ответ написан
    Комментировать
  • Как понять, что жесткому диску пора на покой?

    goldena
    @goldena
    Если шумит и долго откликается, даже если «субъективно» — меняйте, как советовали выше.

    SMART и программы это конечно хорошо и замечательно, но не панацея (бэкапы тоже не всегда и не полностью спасают). WD Green 1Tb, если мне не изменяет память это около 60-70 долларов. Мне трудно судить сколько стоит ваше время и на сколько ваша работа зависит от диска на вашем компьютере, но согласитесь, это не так уж много. В большинстве случаев стоимость информации несравнима с этой суммой. Цены на восстановление данных с «битого» диска тоже кусаются. Может не стоит рисковать?
    Ответ написан
    1 комментарий