• Простые TypeScript-хитрости, которые позволят масштабировать ваши приложения бесконечно
    0

    К пункту "не использовать any". Типы можно "доставать" из окружения — переменных, массивов, аргументов функций и их ReturnType. Это конечно не очень красиво, но на порядок лучше any — так что, используйте с умом.


    // 1. из переменной
    let foo = { foo: 'f' };
    let bar: typeof foo = null;
    // 2. из массива
    let foo = [{ foo: 'f' }];
    let bar: (typeof foo)[0] = null;
    // 3. из аргументов
    function doBar (foo: { foo: string }) {
    }
    let bar: Parameters<typeof doBar>[0] = null;
    // 4. из возврата
    function doBar () {
        return { foo: 'f' };
    }
    let bar: ReturnType<typeof doBar> = null;
  • 10 идей, о которых стоит знать всем программистам
    0

    Не будьте так однозначны. Разумеется, пожар может быть губительным для леса и его обитателей. Мы тут не про такой пожар, такого рода пожары и для кода ужасны. Пожары в небольших количествах, а если ещё и контролируемые — вполне нужны экосистеме.


  • 10 идей, о которых стоит знать всем программистам
    +8

    Пассаж про лес достоин оваций!

  • Quartet 9: Allegro | TypeScript
    0

    Оказиваеться, можно делить приложение на слои, которые имеют свои модели: UserDto, User и т.д. И "мапперы" тут тоже никто не отменял.

  • Quartet 9: Allegro | TypeScript
    0

    Да, создано с оглядкой на Json.Net. По декораторам: мы не боимся — рано или поздно они войдут в стандарт. И даже если спека немного подправится, то тут тоже всё в норме — на коленке за пару минут можно будет миграционную утилиту написать. Из этого следует — декораторами можно уже наслаждаться. Тут вся прелесть в том, что модель и мета данные к ней — в одном месте, плюс работает наследование.


    А то что вы в примере написали, это только валидация, или ещё десериализация? То-есть, например, временные строки будут преобразованы в Date?

  • Quartet 9: Allegro | TypeScript
    0

    Да, мы тоже используем для де-/сериализации и валидации декораторы и обычные классы:


    import { Json, Rule } from 'class-json';
    
    class Address {
        @Rule.validate(FooCustomValidator)
        @Json.type(String)
        line: string
    }
    class User {
        @Rule.minimum(1)
        @Json.type(Number)
        id: number
    
        @Rule.required()
        @Json.type(Date)
        date: Date
    
        @Rule.pattern(/^\w+$/)
        @Rule.required()
        @Json.type(String)
        name: string
    
        @Rule.type(Address)
        address: Address
    }
  • Оптическая компенсация
    0
    Нужни искать центр масс выпуклого полигона для фигуры. Для c внутри — это будет круг (ну или если более точно, то почти круг) — и тут как раз центр масс верно ложиться на центр «круга».
  • История одной задачи: Кратчайший мемоизатор на JavaScript
    0

    Тогда уже можно и:


    f=>(...a)=>f[a]=a in f?f[a]:f(...a);
  • Как работает JS: сервис-воркеры
    0

    Это хорошо, что нет доступа к дом, что бы не было никаких побочных эфектов. Интересен был момент или можно часть приложения вынести в сервис воркер. Возврат готового html из сервис воркера был лишь примером. Для это наш сервис воркер будет довольно увесист: данные, и/или бизнес модели, и/или бизнес сценарии, и/или шаблонизаторы и прочие вещи. Это уже всё детали реализации, просто стало интерсно, или кто-то думал о сервис воркере как о чем-то большем чем транспорт-кэш middleware.

  • Как работает JS: сервис-воркеры
    0

    А что думаете о таком сценарии, что бы целые части приложения (некоторые слои) выносить в service worker? Грубый пример — делаем запрос, а из service worker создаем нужные запросы в backend, производим нужные вычисления, рендерим шаблон и отдаем уже как результат выполнения сервиса.

  • Typescript. Тип object
    +3

    На самом деле, такое наименование следует тому же принципи что и Number:number, String:string, Boolean:boolean. С этим же ни у кого проблем не возникает.

  • Полезный NaN
    +2

    Например, проверить или распарсенная строка действительно была датой.


    let date = new Date('foo');
    let isInvalidDate= isNaN(date);
    console.log(isInvalidDate ? "Yes, it was invalid" : "Ooops, was OK");
  • Полезные функции Google Таблиц, которых нет в Excel
    0

    А в какие нибудь квоты упирались? Или может знаете, как много на самом деле гугл дает бесплатно cpu и io?

  • Полезные функции Google Таблиц, которых нет в Excel
    0

    А кто-то создавал web-apps поверх гугл таблиц? Могли бы в кратце поделиться впечатлениями? Для себя буквально недавно открыли google apps script, и были удивленны, что раньше не обращали внимание на столь мощную фичу. Можно создавать полноценные http api, где таблицы играют роль DB. А учитывая, что поддерживаются cross-origin запросы, можно создавать разные single page приложения, где уже в свою очередь данные с таблиц можно хоть в каком виде анализировать, отображать, редактировать. И самое классное это то, что права доступа к таблицам и апи настраиваются раздельно.

  • Объектное Реактивное Программирование
    0

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

  • Vue.js для сомневающихся. Все, что нужно знать
    0

    Верно, но это только для релиза. А вот при разработке сборки и таскраннеры только мешают.

  • Асинхронный JavaScript против отложенного
    –1

    Без defer скрипты грузятся параллельно. С defer создается отдельная очередь, хотя скрипты тоже грузятся параллельно. Преимуществ defer, если скрипты в конце документа попросту нет.



  • Асинхронный JavaScript против отложенного
    –2

    Смело оставляйте как есть, без defer/async. Браузеры не парсинг html останавливают, а обработку html. То-есть они вполне знают какие скрипты следуют за актуальным и грузят их параллельно. И даже напротив, defer в хроме замедляет начало их загрузки, по видимому тратиться время на создание отдельного queue

  • Асинхронный JavaScript против отложенного
    +1

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

  • Асинхронный JavaScript против отложенного
    0

    Уточните пожалуйста, из вашего примера, все 3 скрипта с defer атрибутом или без?

  • Асинхронный JavaScript против отложенного
    0
    Если внешний JavaScript-файл размещается непосредственно перед закрывающим тегом body, то использование async и defer становится менее уместным

    Менее уместно, но всё же уместно? Например, если у нас 5 внешних скриптов в конце body то без defer, они будут загружаться один за другим (так как парсер соответственно поочередно будет переходить от одного тэга script к другому). А вот с defer у каждого тэга можно загрузку распараллелить. Я правильно понимаю?

  • Мой Material Design Framework
    +1

    Вау, шикарный и чистый код. Вот бы у всех так)

  • Знакомство с Styled components 
    0

    Ясно, спасибо. Немного подправлю и этот пример, потому что — интерполяция в интерполяции, а там ещё и трансформация?! :) Кхэ кхэ ...


    styled.h1`
      font-size: 1.5em;
      color: ${props => props.theme.colors[props.type] || 'someDefaultColor'};
    `;

    И вижу, что мы всё же работаем с каждым конкретным свойством. Если и font size зависит от type, выносите это тоже в тему? Не раздуваются ли темы тогда, что в них слишком много стейтов для разных компонент? Можно как-то именно расширять стили? Пример из вакуума:


    const Title = styled.h1`
      font-size: 1.5em;
      color: someDefaultColor;
    `;
    
    Title = when(props.primary, Title)`
        color: ${ theme.colors.green }
        font-weight: bold;
        font-size: 1.7em;
    `;
  • Знакомство с Styled components 
    +2

    Пример абсолютно не удачный, и мне жалко тех, кто так пишет:


    const Title = styled.h1`
      font-size: 1.5em;
      color: ${props => props.primary ? 'blue' : 'purple'};
    `;

    Просто потому, что это его максимум. Он не расширяеться никак. Вот нам нужны ещё стейты danger, success, как нам условие переписать?
    Немогли бы вы привести пример который хорошо и удобно масштабируется?

  • AngularJS vs Angular 2: ключевые различия
    0

    А как собирается проект/компонент? С импортами понятно, а что происходит со всеми этими литералами './player.component.html', ['./player.component.styl']?

  • WebAssembly – путь к новым горизонтам производительности
    +5

    Сразу бросились в глаза 2 ошибки производительности в fiboJsMemo


    • нельзя переопределять аргументы
    • нельзя динамически добавлять свойства к объекту

    Почему автор не написал этот вариант также как и си. Не умышленно ли часом?


    const memo = new Array(10000);
    function fiboJsMemoOpt (num) {
      if (num <= 1) return 1;
      const x = memo[num];
      if (x !== void 0) {
        return x;
      }
      return memo[num] = fiboJsMemoOpt(num - 1) + fiboJsMemoOpt(num - 2);
    }

    Js x 11,501,607 ops/sec ±2.53% (70 runs sampled)
    Js memoization x 465,102 ops/sec ±0.82% (86 runs sampled)
    Js memoization opt x 59,388,502 ops/sec ±2.89% (82 runs sampled)

    Главное, проценты у авторa получились красивые.

  • Навыки опытного программиста: Самые популярные советы начинающим
    0

    А вы сравните два способа, через google и через msdn.com)
    Google: в адр. строке "msdn CreateFile" [Enter] [Tab] (первый результат) [Enter] и вы уже на странице.


    Msdn.com: в адр. строке "msdn.com" [Enter] [ Мышкой кликаем на поле пoиска] ["CreateFile"] [Enter] [Мышкой кликаем на первый результат].


    Сравнили? И как вам, к тому же, скорость загрузки msdn?)

  • Навыки опытного программиста: Самые популярные советы начинающим
    0

    Вместо windows лучше сразу писать "msdn open file". Для поиска по Mozilla Developer Network пишем "mdn open file".

  • О том как я написал блокировщик рекламы и трекеров для смартфонов Samsung на Android. Adhell
    0

    Отлично, в браузере стало действительно легче "дышать". А реклама в youtube приложении блокируется? А то у меня без рекламы только youtube в браузере. Но и это уже шикарно)


    И такой вопрос, по теме Knox и фаервола, или возможно с их API как-то блокировать отдельные приложения для доступа в интернет по мобильной сети? А то в этой области такая же ситуация, или рут нужен, или приложения создают vpn и на том уровне блокируют, но работает это ужасно не стабильно.

  • JavaScript 2016, а можно попроще?
    0

    Скажите пожалуйста, везде читаю про "глобальную" сборку, а как выглядит разбиение и сборка по страницам. Я сейчас имею ввиду не классические страницы, а всё ещё single page app. Просто его нужно же тоже разбивать на страницы (view), таким образом, что если пользователь заходит изначально в один view, то ресурсы для других не загружаются, переходит пользователь в другое вью, мы просто подгружаем ресурсы для него, и так далее, ну вы меня понимаете. Так вот, например, react-router: есть у нас компоненты UserList и UserEditor под разные маршруты. У каждой страницы свои зависимости. Но есть и глобальные зависимости для приложения, jquery.js например. И теперь когда собираем приложение:


    • будут ли ресурсы разделены по бандлам, например global.js, user-list.js и user-editor.js?
    • будут ли бандлы грузиться в зависимости от маршрута?
    • что будет происходить с компонентами которые будут и в UserList, и в UserEditor использованы, но не в глобальных зависимостях?
    • система сборки как-то перепишет мой код, что бы грузить сначала нужный бандл, вместо десятка скриптов для страницы?

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

  • Promises 101
    +1

    Жаль, что не продуманы 2 вещи — прогресс и отмена. Особенно отмена, или как минимум прерывание цепочки .then(...).then(...).then(...), предлагают самому в каждом then проверять "флаги". И жаль, что always таки не попал в спецификацию.

  • Открытая трибуна для разработчиков opensource-проектов
    +1

    Очень заманчивое предложение, однозначно было бы интересно поучаствовать и рассказать про мой опыт в atma и в частности о maskjs.

  • Как по маслу, или анимируем со скоростью 60 FPS на CSS 3
    0
    это свойство лучше всего использовать ровно перед тем, как сама анимация будет совершена, например, навешивать это свойство при ховере

    А как поступать, если мы открываем меню по нажатию горячих клавиш, на пример "m"? Добавлять свойство на keydown, а на keyup уже показывать? Но что если нужно показать непосредственно сразу при нажатии?

  • Sprute.js. Ещё один изоморфный JavaScript фреймворк
    0
    Если считать, что на сервере нет рендеринга, то они оказываются ненужными.

    Всё ясно, спасибо)

  • Sprute.js. Ещё один изоморфный JavaScript фреймворк
    0

    Ну не скажите, а утилиты, хэлперы, сервисы? А если строить систему на интерфейсах с внедрением зависимостей? А юнит-тесты? В любом случае, валидаторами дело не заканчиваеться, поэтому зря вы ими ограничиваетесь. По второму пункту: с чего вы взяли что клиент отресует картинку быстрее? Даже если скрипты закешированы их нужно вытащить-распарсить; шаблоны закешированы? и сново достать распарсить, без этого шаблонизатор не начинает создавать dom/html; также для рендеринга нужны данные, и за ними обычно идут по http. Как бы вы не противились, если трезво оценить ситуацию, это действительно два плюса. Я не утверждаю, что это прям всем нужно и без этого никак, но от этого они не перестают быть плюсами)

  • Sprute.js. Ещё один изоморфный JavaScript фреймворк
    0

    У "изоморфности" двя плюса с которыми, как по мне, сложно спорить: переиспользование кода и скорость отображения контента.

  • Важные аспекты работы браузера для разработчиков. Часть 2
    +1
    I. Не меняйте стили элемента напрямую в коде, используйте css-классы для переключения внешнего вида элемента. Или используйте свойство cssText.

    А разве reflow это не отложенное действие, которое откладываеться на конец ивент лупа или до принудительного перерасчета? То-есть, изменяя свойства top, left произойдет лишь один reflow, как и в случаях с css классом и cssText.

  • Асинхронность в JavaScript: Пособие для тех, кто хочет разобраться
    0
    Умеющий читать — да прочтёт:
    … здесь нет никого, кто бы выполнял какой либо таск вне потока ивэнт лупа..
  • Асинхронность в JavaScript: Пособие для тех, кто хочет разобраться
    0

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

  • Асинхронность в JavaScript: Пособие для тех, кто хочет разобраться
    0

    Ну какая же это асинхронность, это всего лишь отложенный вызов функции, который достигается перекладыванием на верх ивэнт лупа. Так же как и nextTick. Есть ещё setImmediate, который кладёт вызов функции вниз ивэнт лупа. Поэтому манипуляции с ивэнт лупом можно назвать "отложенностью", но никак не "асинхронностью".