• Как правильно задать Types для объектов где есть несколько типиов "контента"?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    export interface Post {
      title: string;
      content: Content[]; // мы ждём тут массив, а не кортеж из одного элемента
    }
    
    export type TContentType = "text" | "video" | "header" | "code" | "images" | "remark" | "materials";
    
    // базовый интерфейс, чисто для надёжности, никуда не экспортируем
    interface IContentBase {
      type: TContentType
    }
    
    export interface ITextContent extends IContentBase {
      type: "text";
      value: string;
    }
    
    export interface IVideoContent extends IContentBase {
      type: "video";
      url: string;
    }
    
    // ...
    
    export interface IOtherContent extends IContentBase {
      type: "header" | "code" | "images" | "remark" | "materials";
    }
    
    // делаем union с type как discriminator field
    export type Content = ITextContent |  IVideoContent | IOtherContent;
    
    const items: Post = {
      title: "foo bar",
      content: [
        {type: "text", value: "lorem 1"},
        {type: "video", url: "lorem 2"},
        {type: "text", value: "lorem 3"}
        // ...
      ]
    };
    
    // используем тайпгард, тайпскрипт недостаточно умный, чтоб вывести Extract<Content, { type: "text" }> в таких случаях
    const onlyTextType: ITextContent[] = items.content.filter((it): it is ITextContent => it.type === "text");
    // ...
    Ответ написан
    Комментировать
  • Почему функции SCSS не работают для задания значения CSS переменной?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    --w: #{rem(24)};
    Ответ написан
    Комментировать
  • Как на JS создать цикл для неупорядоченного массива?

    @Interface
    Ну тут напрашивается обычный цикл for (key in array){...}

    UPDATE
    :
    Если вам действительно нужно обрабатывать огромные разреженные массивы на javascript и подвешивать процесс не желательно (что на самом то деле надо избегать вообще), то можно попробовать делать это асинхронно как писали Константин Отпущенников и evg_ (однако они не предложили как можно итерировать объект асинхронно, а нам нужна итерация именно объекта, а не массива в данном случае). Так вот я нашел одно решение, оно довольно.. кхм.. специфическое, если придумаете способ лучше - пишите. Проблема в том, что мы можем перебрать часть свойств мегообъекта и break'нуться из цикла, но мы не сможем вернуться в то же место, поэтому надо как-то добиться запоминания состояния цикла... и единственное, что я нашел - это удалять элементы первоначального объекта (их можно и восстановить в другой, но вы это можете добавить сами если будет нужно).
    Особенности метода:
    - изменение изначального объекта;
    - скорость просядет на порядки (без преувеличений, у меня этот способ оказался в 200 - 400 раз медленее);
    - зато можно не вешать всю страницу;
    - выбирать порцию данных за один проход (чем больше, тем медленнее алгоритм для одной части (больше тормозов на странице), за то быстрее обработка в целом);
    - можно повесить прогресс бар, отображающий прогресс итерации;

    Код:
    var arr = [];
    for (var i = 0; i < 100 * 1000; i++){
    	arr.push(i);
    };
    
    function bench(name, fn){
    	var startTime = performance.now();
    	var res = fn();
    	var finishTime = performance.now();
    	console.log(name + ' took: ', finishTime - startTime);
    	return res;
    };
    
    bench('get keys', ()=>
    	Object.keys(arr) // ~670 ms
    );
    
    // --------------
    
    function getKeyValAsync(bigObject, limit, cb){
    	var result = [];
    
    	function getPart(){
    		var doneAmount = 0;
    		for (var i in bigObject){
    			if (!bigObject.hasOwnProperty(i)){
    				continue;
    			};
    			result.push({
    				key: i,
    				val: bigObject[i]
    			});			
    			delete bigObject[i];
    			doneAmount++;
    			if (doneAmount > limit){
    				setTimeout(() => bench('part: ', getPart), 10);
    				return;
    			};
    		};
    		cb(result);		
    	};
    
    	getPart();
    };
    
    var keyValPairs;
    var start = performance.now();
    getKeyValAsync(arr, 10000, res => {
    	keyValPairs = res;
    	console.log('By parts time: ' + (performance.now() - start));
    });
    Ответ написан
    8 комментариев
  • Как расшифровать флаги от VK API?

    usdglander
    @usdglander
    Yipee-ki-yay
    if (x & 512) {
      //флаг MEDIA стоит
    } else {
      //флаг MEDIA сброшен
    }


    Так же с другими флагами: 2 - для OUTBOX, 4 - для REPLIED и т . д.
    Ответ написан
    8 комментариев
  • Как расшифровать флаги от VK API?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Смотрим четная или нечетная у нас сумма, если нечетная, значит точно есть флаг 1.
    Вычитаем его.

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

    Собственно вот набросал вариант на js(смотрите вывод в консоли):
    https://jsfiddle.net/littleguga/enzkq9gd/
    jsbin.com/mugucuhafu/edit?js,console,output

    upd:
    Lander предложил более красивый вариант: Как расшифровать флаги от VK API?
    Ответ написан
    Комментировать
  • Как получить результат в методе getUpdates Telegram API?

    crackedmind
    @crackedmind
    web-developer
    А что вы ему и куда пишете? Если в группу, то по умолчанию он принимает сообщения начинающиеся на / и где упоминают имя бота. Чтобы принимал весь текст /setprivacy disabled сделайте у BotFather
    Ответ написан
    1 комментарий
  • Нормально ли хранить json в MySql?

    @kondaurov
    Full stack developer
    Постановка вопроса интересная - Нормально ли блаблабла.
    Сделайте сначала как думаете, храните динамичные поля в json поле строки таблицы. Потом когда задолбает писать sql запросы по извлечению этих полей вы сами поймете что нужно где хранить. Нормально то что решает конкретно ваши проблемы.

    Postgresql умеет работать с json, но приходится писать десериалайзеры и сериалайзеры этих полей при сохранении и извлечении. Мне это не нравится, дополнительный код.
    Посмотрите для интереса что умеет делать Mongo. Сейчас меня будут критиковать, типа человек работает с релиационными бд, но если вы не знакомы с ней то я считаю это будет полезной информацией
    Ответ написан
    Комментировать
  • Как вытащить "узор" из присланного PSD макета?

    Есть такое решение - открываем палитру узоров и наводим курсор на желаемый. Нам всплывет подсказка с базовыми размерами узора. Вооружившись данной информацией создаем новый документ такого размера и делаем заливку нашим узором. В итоге получаем желаемую картинку.
    Источник
    Ответ написан
    Комментировать
  • iPhone зумит текст, как запретить?

    @IoannGrozny
    Front-end разработчик
    Понимаю, что некропост, но вот решение:
    поможет выставление для body вот этого свойства: -webkit-text-size-adjust: 100%;
    Ответ написан
    3 комментария
  • Как отправить HTTP запрос методом POST на URL через PHP?

    Tyranron
    @Tyranron
    Действительно, за время, которое потратили на создание вопроса, Вы могли без проблем найти интересующую Вас информацию в любом поисковике.

    Но раз вопрос уже задан, то должен быть и ответ(ы).
    Собственно, @OnYourLips дал ссылку на хороший фреймворк, но если нет смысла тащить в проект/скрипт целый фреймворк ради одного запроса, к примеру, то логичнее воспользоваться упомянутым CURL. В Вашем случае сценарий использования CURL будет выглядеть примерно следующим образом:
    $myCurl = curl_init();
    curl_setopt_array($myCurl, array(
        CURLOPT_URL => 'http://target.site.com/form.php',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query(array(/*здесь массив параметров запроса*/))
    ));
    $response = curl_exec($myCurl);
    curl_close($myCurl);
    
    echo "Ответ на Ваш запрос: ".$response;

    Если надо передать при этом ещё и файлы, или обратиться по https, или ещё чего Вам понадобится - добро пожаловать в документацию:
    http://php.net/manual/ru/book.curl.php
    Советую обратиться к документации в любом случае, дабы ознакомиться со всеми возможными нюансами, а также понять и выбрать то, что конкретно Вам потребуется для решения Вашей задачи.
    Ответ написан
    3 комментария
  • File_get_contents не получает страницу полностью?

    Stdit
    @Stdit
    Сервер отдаёт только первый чанк, видимо криво настроен. Её в текстовой форме не может скачать ни curl, ни wget. Браузер получает полную страницу потому, что использует gzip. Чтобы получить полную страницу через gzip на php, надо сделать что-то такое:
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://nightout.ru/photoreport/alpen-grotte/after-party-zolotoi-sostav-0?page=0');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    echo gzinflate(substr($result,10));
    
    Ответ написан
    3 комментария