• Почему модуль, собранный webpack, возвращает число при Code Split?

    youngmysteriouslight
    @youngmysteriouslight Автор вопроса
    ТК, ТТ, JS, FP, WM
    Решил свою проблему. Правда, пришлось перейти на rollup.
    // rollup.config.js
    import { nodeResolve } from '@rollup/plugin-node-resolve';
    import commonjs from '@rollup/plugin-commonjs';
    
    export default {
      external: [/node_modules/],
      input: {
        core: 'src/core',
        all: 'src/all',
      },
      output: {
        dir: 'dist',
        format: 'cjs',
        entryFileNames: '[name].js',
      },
      plugins: [commonjs(), nodeResolve()],
    };
    Ответ написан
    Комментировать
  • Почему не выводится график?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Если Вы используете стандартную цветовую схему для кода, функции f, a, b, c не определены. Нельзя нарисовать то, что не определено.

    Приведите полный код, воспроизводимый на чистом ноутбуке.
    Ответ написан
    Комментировать
  • Как порождать двоичные векторы в Haskell?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Если подключить Control.Monad, то все возможные двоичные векторы, представленные списком компонент, порождаются функцией
    vectors :: Int -> [[Int]]
    vectors n = replicateM n [0, 1]

    Вместо [0,1] могут быть любые другие значения компонент (True и False, например). Аргумент n задаёт длину векторов, которое будет равняться числу переменных в логическом выражении.

    upd.
    С учётом пожеланий новый вариант:
    data BinTree = Leaf [Int] | Node BinTree BinTree deriving Show
    vars :: Int -> [Int] -> BinTree
    vars 1 context = Node (Leaf (0:context)) (Leaf (1:context))
    vars n context = Node (vars (n-1) (0:context)) (vars (n-1) (1:context))
    
    Prelude> vars 2 []
    Node (Node (Leaf [0,0]) (Leaf [1,0])) (Node (Leaf [0,1]) (Leaf [1,1]))
    Ответ написан
    5 комментариев
  • Git - как узнать были ли изменения в определенных файлах?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    git diff --name-only $(git merge-base <текущая ветка> master) -- dirname
    Ответ написан
  • Почему в git обычно игнорируют картинки? Разве нормально, что если кто-то скачает и развернет мой сайт, у него поедет верстка и все будет некрасиво?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Странный совет, если рассматриваеть его категорично.
    Скажу тривиальную мысль: версионировать нужно то, что является предметом версионирования.
    То есть, если конкретная картинка является неотъемлемой частью самого проекта, а не внешней зависимостью или внешним ресурсом, то она должна быть в репозитории.

    Сходу нашёл пример в Github: https://github.com/rancher/ui/tree/master/public/a...

    Единственно только нужно понимать, что версионирование бинарников обычно сопровождается большими накладными расходами и есть проблемы со слиянием, поэтому если есть возможность исключить картинки из [версионируемого части] проекта, ею стоит воспользоваться. То же касается базы данных: не комильфо держать дамп базы в том же репозитории, что и сам код, поскольку слишком дорогой становится история.
    Ответ написан
    Комментировать
  • Как отнять UTCTIme от UTCTime и получить разницу в днях?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Самый лобовой способ состоит в использовании diffTimeToPicoseconds с последующим делением на некий коэффициент, равный числу пикосекунд в сутках.
    Ответ написан
    1 комментарий
  • Как вернуть ветку которая была случайно смерджина с мастером, а потом ее откатили?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Есть грубый способ:
    0) git-checkout на нужную ветку.
    1) git-reset на коммит, который был головным до слияния.
    Из-за особенностей гита из истории в общем случае узнать нельзя, поэтому придётся угадывать, ориентируясь на названия коммитов, или на git-revlog, если имеется.
    2) git push -f <имя репозитория> <имя изменённой ветки>
    В этом случае нужно убедиться, что никто из коллег не запушит в эти ветки.
    Ответ написан
    Комментировать
  • Как из даты,которую ввёл пользователь,отнять текущую дату?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    сравнить две даты [...] отнимать текущую дату - и получаю разницу в днях. И эта разница должна быть не более чем 16 То есть дата от пользователя должна быть не раньше текущей (чтобы не улететь в прошлое), но не позже чем "текущая + 16 дней"

    -- количество дней (но не меньше 0 и не больше 16) от сего дня (today) до указанного дня (day)
    -- возвращаемое число лежит в интервале [0, 16]
    strippedDayDiff :: Day -> Day -> Integer
    strippedDayDiff day today = let d = diffDays day today in if d > 16 then 16 else if d < 0 then 0 else d

    Использование:
    if strippedDayDiff forecastDay (utctDay currentTime) >= ...

    Если нужно проверить, что разница лежит ровно в диапазоне [0, 16], то
    diffDaysIn0_16 day today = let d = diffDays day today in 0 <= d && d <= 16


    P.S. Сергей, там есть более узкоспециализированные функции. Думаю, основная проблема изначально состояла в том, что в коде не были проставлены типы и/или выбор возвращаемых значений не соответствует поставленной устно задаче.
    Ответ написан
    Комментировать
  • Почему git не показывается изменения файла при помощи diff?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    git-diff по умолчанию показывает недобавленные изменения. После git-add изменения переходят в "Changes to be committed" и не показываются в git-diff.
    Однако, если сделать
    git diff HEAD
    увидите все изменения между предыдущей ревизией и текущим состоянием рабочей директории.
    Ответ написан
    2 комментария
  • Как можно доработать функцию для собственного типа?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    при вводе getByTypes [MyInt, MyString] base выдает ["first","next","str"]
    Значит, функция работает.

    если в качестве аргумента задать MyStruct , то выдает ошибку , как сделать так чтоб функция работала с этим типом ?
    Как происходит вызов?
    getByTypes [MyStruct[("s1",MyInt),("s2",MyDouble)]] base
    Ответ написан
    3 комментария
  • Подтянуть изменения из ветки - как пройти уровень за 4 команды?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Четвёртое действие (перемещение master на C3'', когда HEAD->caption)
    git branch -f master HEAD
    Я бы и не знал, если бы не одно из заданий, и использовал связку git checkout master && git reset --hard caption.

    По поводу git rebase caption (когда находимся в master). Там срабатывает fast-forward, поэтому ветка автоматически продвигается вперёд. Чтобы удать этот эффект, пишем git rebaes --no-ff. Интерактивный режим по умолчанию отключает ff.
    Ответ написан
    5 комментариев
  • Git: как убрать определенные файлы из 'untracked'?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    $ git clean -i
    Would remove the following items:
      file2.php  file3.php
    *** Commands ***
        1: clean                2: filter by pattern    3: select by numbers
        4: ask each             5: quit                 6: help
    What now> a
    remove file2.php? y
    remove file3.php? n
    Removing file2.php
    Ответ написан
    Комментировать
  • Может wget качать файлы по внешним ссылкам?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    wget --page-requisites -r -H -l 2 -k https://habrahabr.ru/company/ods/blog/350440/

    У меня загружаются страницы с других доменов.
    Можно так:
    wget -p -r -H -D "habrahabr.ru,ru.wikipedia.org" -l 1 -k -e robots=off --random-wait https://habrahabr.ru/company/ods/blog/350440/
    Ответ написан
  • Как работают Function.bind.apply и function.apply.bind?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Предполагаю, что описание и принцип работы bind и apply нам известен.
    Для простоты рассуждений удобно считать, что this является как бы нулевым аргументом.
    Нам потребуется следующее: g.bind(t, x)условно эквивалентно
    function (a) {
      return g.call(t, x, a);
    }


    Что делает приведённый код

    Строго говоря, Function.apply не то же самое, что Function.prototype.apply. Но в рассматриваемом случае, как мы увидим, они взаимозаменяемы, потому что их значения совпадают (указывают на одну функцию с одним кодом).
    Function.apply.bind(f, null) возвращает функцию, грубо говоря (потому что неявно предполагается, что эта функция в будущем будет вызвана ровно с одним аргументом), такого вида
    function (a) {
      return Function.apply.call(f, null, a);
    }
    что условно (потому что здесь происходит изменение f как объекта; в действительности, вызывается apply с this=f) эквивалентно
    function (a) {
      f.apply = Function.apply;
      return f.apply(null, a);
    }
    Поскольку функция f при нормальных обстоятельствах наследует тот же apply, что и Function, Function.apply.apply(f, null, a) полностью эквивалентно f.apply(null, a).

    Почему важно указать null
    Потому что, если его не указать, получится функция
    function (a) {
      return f.apply(a);
    }
    то есть a будет передано как this.

    Это тоже может иметь смысл. Сравните:
    альтернативный пример
    function foo(bar,baz) {
      var x = bar * baz;
    
      return [
        Promise.resolve(x),
        Promise.resolve(x*2 )
      ];
    }
    
    Promise.all(
      foo( 10, 20 )
    )
    .then( Function.apply.bind(
      function() {
        console.log( this[0], this[1] );
      }
    ) );
    Ответ написан
    Комментировать
  • Конструктор прототипа?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    А есть ли смысл указывать для дочернего объекта конструктор прототипа, я так понимаю это только ссылка на функцию, и если его необязательно использовать?
    У каждого конструктора есть прототип. По умолчанию это Object.prototype.
    Если Вам нужен прототип, указывайте. Если не нужен, но и не за чем. Очевидно же.
    Только одна поправка: прототип это объект, который (как и прочие объекты) состоит из полей, среди которых есть функции.

    Как лучше всего добавлять в прототип свои свойства
    Я не знаю. ИМХО, для прикладных задач лучше делать так, чтоб читало проще.

    Как лучше добавлять свои методы, вариант только так, или есть более элегантное решение, например создать объект со своими методами и склеить его с прототипом?
    Без разницы, но нужно учитывать один момент.
    Пусть мы определили конструктор Son и ему задали Son.prototype тем или иным образом. Для простоты положим, что прототип состоит только из функций. Затем создали несколько экземпляров (new Son).
    Далее, предположим, мы хотим добавить в прототип новый метод или изменить существующий.
    Здесь необходимо решить, будем ли (1) мы менять прототип уже созданных экземпляров или же (2) у созданных экземпляров оставим их старый прототип, а у создаваемых будет уже новый.

    P.S. наконец, в последних редакциях появились новые синтаксические конструкции. О них тоже забывать не нужно.
    Ответ написан
  • Как сделать наследование базового класса?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Есть такое. Опера, например, кричит:
    Unhandled Error: String.prototype.toString: this is not a String object

    Согласно спецификации toString кидает исключение, если this не является строкой, то есть грубо
    String.prototype.toString = function() {
      if (typeof this === 'string')
        return this.valueOf();
      else
        throw new TypeError();
    };

    Чтобы можно было наследовать от String, нужно переопределить метод.

    P.S. я не могу объяснить, почему код с extend работает.
    Ответ написан
  • Как создать пакет в WMathematica с приватными функциями?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    Один из способов решить проблему заключается в использовании относительного контекста: `Pr`pB[d]

    Я обычно делаю так:
    1. перед началом приватного контекста перечисляю все публичные символы (всё равно нужно usage и warnings прописать)
    2. определения публичных символов делаю в том же блоке, где приватные, то есть до End[].
    Из-за №1 публичные символы не захватываются контекстом, зато внутри приватного контекста можно его явно не писать.

    Пример:
    BeginPackage["P`"];
    b::usage = "My b var";
    Begin["`Pr`"];
    a = 2;
    b := a;
    End[];
    EndPackage[];

    In[9]:= OwnValues[b]
    
    Out[9]= {HoldPattern[b] :> P`Pr`a}
    Ответ написан
    4 комментария
  • Сопоставление с образцом( Haskell )?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    В Haskell в отличие от, например, Wolfram Mathematica в перечне образцов в рамках одного случая каждая переменная может быть использована только единожды.
    На самом деле образцы являются краткой формой записи системы проекций для произведений-типов и разбора случаев для сумм-типов.
    Например,
    substitute x y [] = ...
    substitute x y (h:hs) = ...
    является краткой формой записи (кстати, "упрощенный" Хаскель, к которому ghc приводит код перед компиляцией, как раз такое представление использует)
    substitute x y z = case z of
      [] -> ...
      (h:hs) -> ...
    или, если гиперболизировать,
    substitute x y z = if null z then ... else let h = head z; hs = tail z in ...

    Основная мысль: все переменные в образцах принципиально обязаны быть разными в общем случае.
    Например, как быть с func x x = ..., когда x :: a -> b?
    Исключение есть всего одно: когда тип обеих переменных имплементирует Eq. Но современный Haskell этого ещё не умеет. Возможно, в будущем такая фишка будет добавлена как одно из многочисленных расширений языка.
    Ответ написан
    2 комментария
  • Как откатить unstaged изменения?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    А что насчёт
    git clean -d -x -f && git reset --hard
    или Вам принципиально, чтобы именно одной командой?
    Ответ написан
    6 комментариев
  • Как совместить head и master?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    git checkout master && git reset 65db748
    Ответ написан