• Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, возможно Вам стоит поискать решение с использованием js на стороне клиента (ajax, iframe)

    Что касается серверной стороны, то других вариантов не вижу. Если у Вас больше не осталось вопросов по серверной стороне, я откланяюсь.

    PS: не забудте отметить решением если у Вас нет объективных причин не делать этого)
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, редиректа в иходном коде видно не будет
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, всеравно при закачке файла с первоисточника во вкладке нетворк появится запись об этом с сылкой на файл
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, либо редирект либо гонять тафик через себя, других вариантов нк вижу (не зависимо от того на чем сервер, на node.js или на php)

    PS: могу конечно и ошибаться, попробуйте задать на тостере такой вопрос с тегом http: возможно ли при редиректе скрыть от клиента ссылку, на которую производится редирект.
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard,
    3. Фронтэнд впринципе не может быть на php. Опишите вашу мысль по подробнее.
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard,
    2. Есть еще вариант. Если удаленный сервер ваш, то на нем тоже поставить систему с временными ссылками
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard,
    1. Да, вкладка нетворк все покажет
    2. Да, загружать нодой удаленный файл и тут же отдавать его пользователю от имени своего сервера (трафик ляжет на ваш сервер в двойном обьеме. Размер файла при скачке на сервер плюс размер файла при отдаче его клиенту). Слегка улучшить ситуацию можно кэшируя файлы локально, чтобы один раз скачаный с удаленного сервера файл не качался заново при повторном запросе на негоже, а раздавался уже с локального кэша
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, тогда решение что я дал вполне рабочее)

    Дописал пару нужных строчек в код, предложенный в ответе
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, есть ньюанс, редирект не сильно спрячет ваш файл. Знающие люди с легкостью добудут на него прямую ссылку. Эту поблему вы не сможете в полном объеме решить никакими средствами, ни экспресом ни нгинксом ни чем либо еще если удаленный сервер не ваш.

    Разве что не делать редирект а гонять трафик через свой серв.
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, в случае res.redirect трафик от файла будет идти НЕ через Вас.
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    nezzard, данный вариант только для локальных, для удаленных вместо
    res.sendFile('/путь/до/файла/имяфайла');

    Сделать редирект
    res.redirect('remote.server/test.img');

    Остальное также.

    PS: более подробно api экспресса расписан тут expressjs.com/ru/4x/api.html#res.redirect
  • Как правильно протестировать Express приложение? Запуск http сервера - это норма или нет?

    lastuniverse
    @lastuniverse
    PQR, всегда рады помочь.

    PS: Мне незнакома инфраструктура php, знаю только что для работы php в бэкэнде нужен полноценный вебсервер (apache, nginx и т.п.). Хотя допускаю возможность что мои скромные знания о php не отражают современную действительность.
    Я это к тому, что при таком раскладе наверное сущесвование средств тестирования, не требующие сервера действительно имеет смысл.
    С експрессом же ситуация такова, то он сам себе веб сервер, и надобность в таких средствах на мой взгляд отпадает, что конечено не дает никакой гарантии того, что их не существует. Просто я таких не слышал )
  • Какое имя для функции найлучшее?

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

    lastuniverse
    @lastuniverse
    hoppiN, Alams Stoyne, вот только это не будет работать если на стпанице будет несколько таких блоков с кнопками
  • Как получить id элемента используя addEventListener и getElementsByClassName?

    lastuniverse
    @lastuniverse
    Не стал приводить свои варианты, потому что вопрос был о том как работает именно тот вариант. Но вы правы, ваш по симпатичнее и хаков меньше (только замыкание, которое и не хак вовсе:)

    Так же можно было в цикле фор сделать так


    или так
  • Полёт пули в игре html5+js?

    lastuniverse
    @lastuniverse
    ArtC, поковыряюсь на досуге в Вашем коде, но не сегодня.
  • Полёт пули в игре html5+js?

    lastuniverse
    @lastuniverse
    ArtC, в следующий раз, если кода много выкладываете его обернув его в теги spoiler и code, если немного то просто в тег code.

    <spoiler title=""><code lang="javascript">
    тут вставить код
    </code></spoiler>


    в результате должно получится так
    $.Bullet = function(opt) {
    	for (var k in opt) {
    		this[k] = opt[k];
    	}
    	this.enemiesHit = [];
    	this.inView = 0;
    	$.particleEmitters.push(new $.ParticleEmitter({
    		x: this.x,
    		y: this.y,
    		count: 1,
    		spawnRange: 1,
    		friction: 0.75,
    		minSpeed: 2,
    		maxSpeed: 10,
    		minDirection: 0,
    		maxDirection: $.twopi,
    		hue: 0,
    		saturation: 0
    	}));
    };
    
    /*==============================================================================
    Update
    ==============================================================================*/
    $.Bullet.prototype.update = function(i) {
    	/*==============================================================================
    	Apply Forces
    	==============================================================================*/
    	this.x += Math.cos(this.direction) * (this.speed * $.dt);
    	this.y += Math.sin(this.direction) * (this.speed * $.dt);
    	this.ex = this.x - Math.cos(this.direction) * this.size;
    	this.ey = this.y - Math.sin(this.direction) * this.size;
    
    	/*==============================================================================
    	Check Collisions
    	==============================================================================*/
    	var ei = $.enemies.length;
    	while (ei--) {
    		var enemy = $.enemies[ei];
    		if ($.util.distance(this.x, this.y, enemy.x, enemy.y) <= enemy.radius) {
    			if (this.enemiesHit.indexOf(enemy.index) == -1) {
    				$.particleEmitters.push(new $.ParticleEmitter({
    					x: this.x,
    					y: this.y,
    					count: Math.floor($.util.rand(1, 4)),
    					spawnRange: 0,
    					friction: 0.85,
    					minSpeed: 5,
    					maxSpeed: 12,
    					minDirection: (this.direction - $.pi) - $.pi / 5,
    					maxDirection: (this.direction - $.pi) + $.pi / 5,
    					hue: enemy.hue
    				}));
    
    				this.enemiesHit.push(enemy.index);
    				enemy.receiveDamage(ei, this.damage);
    
    				if (this.enemiesHit.length > 3) {
    					$.bullets.splice(i, 1);
    				}
    			}
    			if (!this.piercing) {
    				$.bullets.splice(i, 1);
    			}
    		}
    	}
    
    	/*==============================================================================
    	Lock Bounds
    	==============================================================================*/
    	if (!$.util.pointInRect(this.ex, this.ey, 0, 0, $.ww, $.wh)) {
    		$.bullets.splice(i, 1);
    	}
    
    	/*==============================================================================
    	Update View
    	==============================================================================*/
    	if ($.util.pointInRect(this.ex, this.ey, -$.screen.x, -$.screen.y, $.cw, $.ch)) {
    		this.inView = 1;
    	} else {
    		this.inView = 0;
    	}
    };
    
    /*==============================================================================
    Render
    ==============================================================================*/
    $.Bullet.prototype.render = function(i) {
    	if (this.inView) {
    		$.ctxmg.beginPath();
    		$.ctxmg.moveTo(this.x, this.y);
    		$.ctxmg.lineTo(this.ex, this.ey);
    		$.ctxmg.lineWidth = this.lineWidth;
    		$.ctxmg.strokeStyle = this.strokeStyle;
    		$.ctxmg.stroke();
    	}
    };

  • Полёт пули в игре html5+js?

    lastuniverse
    @lastuniverse
    ArtC,
    Почему-то при добавлении кода:
    const Vector = window.libs.Vector;
    Вся игра перестаёт работать.


    потому что:
    1. скачать код файла vector.js
    2. сохранить vector.js в папку с другими скриптами сайта
    3. подключить его в index.html като так
    <script src="js/vector.js" type="text/javascript" charset="utf-8"></script>


    PS: я почему то думал что вы сами догадаетесь это сделать :)
  • Ввести N целых чисел в 1-мерный массив. Вычислить количество элементов массива=0 и сумму их индексов. Как реализовать динамический массив?

    lastuniverse
    @lastuniverse
    GoodOrlov, ну тогда Шарпер все верно говорит. Либо использовать имеющиеся в С++ аналоги динамических списков либо писать свой класс Array с методами push pop shift и unshift которые на лету будут довыделять память спомощью всяких realloc-ов.

    чтото типа этого
    #include <cstdlib>
    #include <iostream>
    #include <sstream>
    #include <string>
    
    class Array {
        public:
            Array(int length){
                length = length;
                // выделяет память
                if(length>0){
                    arr = (int*)std::malloc(length*sizeof(int));
                }
            }
            // деструктор
            ~Array(){
                // освобождает выделеную память
                std::free(arr);
            }
            // метод добавления нового значения в конец массива
            void push(int value){
                length++;
                arr = (int*) realloc (arr, length * sizeof(int));
                arr[length - 1] = value;
            }
            // в идеале в этот клас также надо добавить методы:
            // int pop(void) - вынимает из массива последнее значение
            // void unshift(int value) - добавляет новое значение в начало массива
            // int shift(void) - вынимает из массива первое значение
            // int length(void) - возвращает длинну массива
            // а также итерационные функции, которые в цикле проходят все элементы массива вызывая для каждого callback функцию
            // Array* forEach(void (*callback)(int, int)) - функциональный аналог for
            // Array* map(int (*callback)(int, int)) - заменяет значение каждого элемента на значение возвращаемое для него callback функцией
            // Array* filter(false (*callback)(int, int)) - удаляет значения для которых callback функция вернула false
            // Array* sort(false (*callback)(int, int)) - сортирует массив 
            // и еще много много много всего включая переопределение операторов))
        private:
        // ссылка на выделенную память
        int* arr;
        // длинна массива
        int length = 0;
    
    };
    
    void main(void){
        // счетчик введенных значений
        int count = 0;
    
        // переменная для колличества значений==0
        int zero = 0;
        // переменная для суммы индексов со значениями==0
        int zeroindex = 0;
    
    
        // создаем объект класса Array
        Array arr;
    
        // ввод пользователем произвольного значений (бесконечный цикл)
        while (){
            // временные переменные для ввода
            std::string str;
            std::string num;
    
            std::cout << "введите значение №" << count << ":";
            std::getline( std::cin, str );
            // если введено пустое значение прекращаем ввод
            if ( str.empty() ) {
                break;
            }
            
            // иначе увеличиваем счетчик введенных значений
            count++; 
    
            // преобразуем в число
            std::istringstream stream( str );
            stream >> num;
    
            // добавляем введеное число в объект класса Array
            arr.push(num);
    
            // если введен 0 то увеличиваем счетчик zero
            if( num == 0){
                zero++;
                zeroindex+=count;
            }
        }
    
        // выводим результаты расчетов
        std::cout << "колличество значений равных нулю:" << zero;
        std::cout << "сумма их индексов:" << zeroindex;
    
        // освобождаем выделеную память перед выходом
        std::free(arr);
    }