• Сkeditor5 - Как добавлять изображение по ссылки?

    Cheizer
    @Cheizer
    Тут есть ответ

    К тому же можете просто, URL с картинкой, вставить в поле ИМЯ ФАЙЛА, в окне вашей ОС которое откроется для выбора файла на вашем компьютере.
    Ответ написан
    Комментировать
  • Angular intercept - как сделать что-то, при abort запроса из вне?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Странно, вы должны завершать анимацию сразу по совершению запроса. потому что сначала в map попадет HttpEvent со статусом Sent, он будет всегда независимо от получения ответа.

    А так вот что удалось придумать https://stackblitz.com/edit/angular-m3quu3?file=sr...
    не совсем изящно, но работает, видно какие запросы были отменены, а какие успешны.

    Ну и следует просто завершать анимацию в finalize, независимо от статуса.
    Кстати что будет, если запросов одновременно будет несколько?
    Ответ написан
    2 комментария
  • RegEx проверка на конкретный элемент в xml?

    @dodo512
    https://regex101.com/r/rHGKZX/2/tests
    ^(\s*<resource[^>]*>)*\s*$
    Ответ написан
    Комментировать
  • Map не дожидается выполнения await?

    Используйте редюс, в нем есть возможность сохранить предыдущий промис и запустить текущий после того как предыдущий вернет значение.
    Ответ написан
    Комментировать
  • Angular route - как проверить на какой я странице?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Можно сделать
    this.route.events.pipe(
      map(() => this.route.currentUrlTree.root.children.primary.segments[1].path), // вместо 1 посмотреть ваш индекс
      distinctUntilChanged(), // или можно ловить только NavigationEnd
      map(path=> path === 'support')
    )

    И на него подписываться в компоненте.
    выглядит не очень.

    А можно сделать сделать сервис типа CurrentComponentService, инжектнуть его в вашем компоненте и на ngOnInit ngOnDestroy сообщать в сервис что компонент создан и удален. А в главном компоненте слушать эти события.
    В этом варианте можно вообще не смотреть на роутинг, он же ведь и поменяться может.

    У себя я держу сервис, который при роутинге парсит url из this.route.routerState.snapshot.url и содержит поток с текущей навигацией.

    Кстати надо поменять на общий сервис с сообщениями, это выглядит более логично, чем смотреть на роутер.
    Ответ написан
    Комментировать
  • Angular - Не работают стандартные значения переменой?

    @PavelPikat
    HttpClient не создает классы, вам нужно вызывать конструктор вручную, например через map

    this.http.get('api/namesurname')
    .pipe(
        map((resp) => resp.data.map(item => new NameSurName(item)),
    }
    .subscribe((resp) => {
        this.nameSurName = resp.data // {name: 'Вася'} 
      })
    
    export class NameSurName {
      name: string;
      surname: string = 'Иванов'
    
    constructor(props: Partial<NameSurName >) {
       Object.assign(this, props);
    }
    Ответ написан
    4 комментария
  • Angular - Не работают стандартные значения переменой?

    search
    @search
    мама говорит что я особенный
    Только ручками, тайпскрипт за вас это чинить не будет.

    // Класс здесь не нужен. Старайтесь предпочитать интерфейсы классам если у объекта нет методов
    export interface NameSurName {
      name: string;
      surname: string;
    }
    
    ...
    
    this.nameSurName = {
      name: '',
      surename: 'Иванов',
      ...resp.data
    }


    На вопрос "почему так" ответ: тайпскрит не добавляет в код никакой магии. Конечный код скомпилированный из тайпскрипта выглядет в JS почти так же как и с тайпскриптом, только без типов. Короче, TS не занимается преобразованием типов за вас.

    Вот есть официальный playground от создателей. Можно ради интереса иногда попроверять что получится из вашего TS кода.
    Ответ написан
    Комментировать
  • Что представляет из себя директория /proc, /tmp?

    @Vitsliputsli
    1) в /proc обычно монтируют виртуальную файловую систему дающую доступ к различной информации и ресурсам, предоставляемым ядром.
    2) можно, при наличии прав, смотрите устройства tty, или что-то вроде этого.
    3) можете при наличии прав.
    4) лимиты операционной системы и файловой системы не контролируют содержимое файлов. Но в зависимости от задачи, можно решить, например, с помощью pipe, или ротацией.
    Ответ написан
    Комментировать
  • Что представляет из себя директория /proc, /tmp?

    sotvm
    @sotvm
    Умный поймёт, а дураку и так всё равно.
    1)в озу tmpfs
    2)не понял вопроса
    3)можешь,если есть права
    4)а вот это не знаю/не умею ,будет срать в в своп,и если винт не ssd то будут тормоза
    у меня /tmp и кеш браузера смонтирован в оперативку
    Ответ написан
    8 комментариев
  • Что представляет из себя директория /proc, /tmp?

    @Karpion
    tmpfs обычно хранится в оперативке, но при нехватке памяти может свопиться на диск. Главное её свойство - это отсутствие транзакционных методов работы, необходимых нормальной файловой системе - это даёт скорость, а надёжность там не нужна, ибо при ребуте она чистится.
    Хранить там свои файлы - можно и нужно. Но надо помнить: "при ребуте она чистится".

    procfs не хранится нигде, а генерится на лету. Поясняю очень приблизительно:

    Когда команда ls смотрит обычную файловую систему (обращается в директории, которую обслуживает обычная файловая система), то драйвер файловой системы читает некое хранилище - обычно HDD/SSD. И там лежат имена файлов - их можно найти программой типа diskedit (если Вы заете, что это такое).

    Когда команда ls смотрит корень procfs - то драйвер procfs не читает никаких носителей, а запускает внутри себя команду ps (любители корректных формулировок сейчас закидают меня тапками). ps читает список запущенных процессов (который, вообще-то, хранится в памяти - в данных ядра) и передаёт его драйверу procfs. А драйвер procfs на основе этой информации формирует список номеров процессов.

    Если команда ls смотрит в поддиректорию procfs - то драйвер procfs берёт информацию из данных ядра конкретно про этот процесс; эта информация тоже лежит в памяти, тоже в данных ядра.

    Собственно, разница в том, что драйвер обычной файловой системы читает данные как они лежат - потому делает это строго в монопольном режиме, никто другое не имеет права их трогать. А драйвер procfs работает с данными, которые ядро в любой момент может поменять - и потому не читает их из места хранения, а запрашивает через "кладовщика" - через того же, через кого эти данные запрашивает программа ps и её "родственники".

    А есть ещё одна интересная файловая система: devfs для директории /dev ...
    Ответ написан
    Комментировать
  • Что представляет из себя директория /proc, /tmp?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1) Если /proc не хранит информация не на диске, не в рам - то где вообще? Не понимаю(

    /proc это вообще абстракция. Ядро системы знает какие процессы сейчас запущены и хранит это в памяти. А в /proc визуализирует это, предоставляя некий интерфейс в виде "все есть файл". Просто нужно понимать, что это не ext2/ext3/ext4 эмулируемый в памяти, это именно procfs

    2) Например я в bash. Возможно ли как-то получить мой вывод, смотря в папку /proc процесса bash?

    да, можете подключиться к вашему stdout, который собственно/proc/<PID>/fd/1
    можно посмотреть как вы подключились и куда смотрит ваш /proc/<PID>/fd/1 (скорее всего в какой-нить /dev/pts/0) и оттуда тоже смотреть.

    3) Если папка /tmp хранится в ОЗУ, могу ли я там хранить свои временные файлы для мгновенного доступа?

    Да. Только нужно помнить, что tmpfs не ограничен, то есть чем больше туда кладешь, тем меньше свободного ОЗУ остается

    4) Как можно реализовать подобное: Есть файл, в который постоянно пишется информация, чтобы он не занимал много места, я ставлю условный лимит в 10000кб, когда файл начинает весить больше, то разница будет стёрта из начала файла.

    Нужно понимать, что стереть 10 байт из начала файла нельзя, потому что нужно сдвинуть содержимое всего файла. Другими словами - файл целиком придется перезаписать.
    Поэтому применяют другой способ - log rotate - когда идет запись в файл, проверяется его размер. Если он превысил значение, файл переименовывается (например в file.log.1) и открывается новый файл file.log
    Можно контролировать сколько файлов может быть в списке и не забывать переименовываьт все файлы, чтобы они соответствовали порядку. Но этим нужно заниматься тому, кто пишет в файл.
    Ответ написан
    9 комментариев
  • Как повесить на все href аналогичный router-link?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Повесь обычные обработчики click, проверяешь ссылку, если она локальная, делаешь router.navigateByUrl иevent.preventDefault

    Директиву routerLink бесполезно вешать, шаблоны ангуляра только кажутся похожими на html, это код, который компилируется в js. А в живом html директивы не работают.

    И еще не надо впрямую присваивать innerHTML, прочитай это https://angular.io/guide/security
    Достаточно использовать директиву [innerHTML]
    Ответ написан
    6 комментариев
  • Как заменить у всех target на _blank?

    @StockholmSyndrome
    Ответ написан
    Комментировать
  • Rxjs - как сделать двойной subscribe?

    search
    @search
    мама говорит что я особенный
    Обзёрвер не выполняет никакой работы до тех пор пока не была вызвана функция subscribe. Сам процесс вызова subscribe называется "подписка". Как только функция subscribe была вызвана (т.е. на обзёрвер подписались) - дело пошло и обзёрвер начал свою работу. До тех пор пока subscribe не вызван, обзёрвер - это просто рецепт того что нужно делать когда прийдут данные.

    Сама функция subscribe возвращает деструктор. Деструктор - это что-то что нужно выполнить, если вдруг понадобилось остановить обсёрвер (например прервать HttpConnection).

    Код ниже возвращает функцию-деструктор

    let get = () => {
        return this.http.get(url)
            .subscribe((response: ResponseObject) => {...});
    }


    На функцию-деструктор невозможно подписаться. Коллбеков у неё тоже нет. Её можно только выполнить для того чтоб остановить обзёрвер.

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

    let get = () => {
        return this.http.get(url)
            .pipe(
              tap((response: ResponseObject) => {...})
            );
    }
    
    // а дальше где-то в коде сделать
    
    service.get().subscribe((response: ResponseObject) => {...})


    Более того, вы можете делать tap (и любой друго pipe оператор) пока у вас есть обзёрвбл:

    service.get()
      .pipe(
        tap(...),
        map(...),
        whatever(...),
      ).subscribe((response: ResponseObject) => {...})


    Вам будет проще понять механизм работы обзёрвблов, если вы будите рассматривать обзёрвбл как функцию, а метод subscribe как способ выполнить эту функцию.

    Учитывая вышесказанное:

    const observable = service.get();
    observable.subscribe((result) => {...}); //выполнит запрос к серверу
    observable.subscribe((result) => {...}); //выполнит запрос к серверу еще раз
    // запрос к серверу будет инициироваться каждый раз когда будет выполняться функция subscribe
    Ответ написан
    2 комментария
  • Top, как получить вывод в байтах?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    cat /proc/$PID/status | grep VmRSS | awk '{print $2 * 1024}'
    Ответ написан
    Комментировать
  • Top, как получить вывод в байтах?

    alfss
    @alfss
    https://career.habr.com/alfss
    Использовать PS?
    Ответ написан
    2 комментария