The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Доступ к регистрам CPU (freebsd, arm) - как?, !*! OldMonster, (C/C++) 08-Дек-18, 10:17  [ | | | ] [линейный вид] [смотреть все]
ДВС.
Есть необходимость читать/писать регистры настройки перефирии SoC.
ОС - freebsd 12, gcc, камень BCM2837
Как пример - аппаратный ШИМ
из даташита:

PWM DMA is mapped to DMA channel 5.
DMA Controller Registers:
DMA Channel 5 is located at the address of 0x7E007500

регистры ШИМ
смещение адреса - имя - размер:
0x0 - CTL PWM Control - 32
0x4 - STA PWM Status - 32

Имею опыт писать под микроконтроллеры, но с какой стороны к ЭТОМУ колобку подступиться - пока не могу сообразить.
1. Фря вообще даст напрямую лезть в потрошки камню?
2. Мне бы вот простенький примерчик считать/записать, ну пусть, регистр CTL PWM Control...

  • gt оверквотинг удален Ммм https duckduckgo com q freebsd raspberry-pi pwm, !*! Andrey Mitrofanov (?), 09:29 , 10-Дек-18 (1)
    >[оверквотинг удален]
    > DMA Channel 5 is located at the address of 0x7E007500
    > регистры ШИМ
    > смещение адреса - имя - размер:
    > 0x0 - CTL PWM Control - 32
    > 0x4 - STA PWM Status - 32
    > Имею опыт писать под микроконтроллеры, но с какой стороны к ЭТОМУ колобку
    > подступиться - пока не могу сообразить.
    > 1. Фря вообще даст напрямую лезть в потрошки камню?
    > 2. Мне бы вот простенький примерчик считать/записать, ну пусть, регистр CTL PWM
    > Control...

    Ммм...
    https://duckduckgo.com/?q=freebsd+raspberry-pi+pwm&t=ffnt&ia...

    Убунтуи из питонов "ходят".  Нвскидку сочетания всех трёх слов по одной ссылки не вижу...

    По https://duckduckgo.com/?q=freebsd+rpi+pwm&t=ffnt&ia=web
    вторая ссылка = https://vzaigrin.wordpress.com/2014/04/18/working-with-gpio-.../

    RPi1 - 35й бродком, PPi2 - 36ой, вроде.  37ой д.б. где-то близко, похоже.

    сообщить модератору +/ответить
  • gt оверквотинг удален FreeBSD - общецелевая ОС Никто приложениям не даст дост, !*! wizard22 (ok), 16:13 , 10-Дек-18 (2)
    >[оверквотинг удален]
    > DMA Channel 5 is located at the address of 0x7E007500
    > регистры ШИМ
    > смещение адреса - имя - размер:
    > 0x0 - CTL PWM Control - 32
    > 0x4 - STA PWM Status - 32
    > Имею опыт писать под микроконтроллеры, но с какой стороны к ЭТОМУ колобку
    > подступиться - пока не могу сообразить.
    > 1. Фря вообще даст напрямую лезть в потрошки камню?
    > 2. Мне бы вот простенький примерчик считать/записать, ну пусть, регистр CTL PWM
    > Control...

    FreeBSD - общецелевая ОС. Никто приложениям не даст доступ к оборудованию. За разделение ресурсов отвечает ОС. Следовательно, либо используйте apropos или что-то аналогичное для поиска уже готового системного интерфейса (API, возможно уже есть модуль ядра, который реализует нужный функционал, либо смотрите тексты ядра для написания собственного модуля ядра (драйвера), а далее вашего приложения.

    сообщить модератору +/ответить
Bash Brainfuck , !*! pavlinux, (Shell скрипты) 29-Ноя-18, 16:32  [ | | | ] [линейный вид] [смотреть все]
Задание на зимние каникулы.

Создать скрипт выводящий элементы массива/списка в случайном порядке.
Элементы вводятся через аргументы (argv). Размер массива - динамический (не известен).

Прим.


$> ./test "Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton"  

Petya
Anton
Anton
Anton
Vova
Sasha
Gray
Dima
Vasya


На трояк - любое решение;
На 4 - без захламления кода, читаемый, вменяемое время работы.
на 5 - работа через stdin, работа на 10000 эл. не более 30 сек.
на 5+ - минимизация внешних вызовов (утилит)
на 5++  - прохождение теста DieHard http://webhome.phy.duke.edu/~rgb/General/dieharder.php
на 5+++ - время выполнения при 1 млн элементов не более 10 сек.

Freebsd Cron и Mysql, !*! botanik26rus, (Shell скрипты) 17-Ноя-18, 09:03  [ | | | ] [линейный вид] [смотреть все]
Добрый день.

Frebsd 8.4 Имеется скрипт

#/usr/local/bin/bash
for ip in `mysql -Ns -h1.1.1.1 -upolzak -pparol baza -e "select DISTINCT inet_ntoa(conv(HEX(ip), 16, 10)) as ip from tablica"`
do
echo $ip >> "/usr/home/user/mysql.txt"
done;
...........
Если я его выполняю вручную, то все работает норм. Если ставлю выполнение через cron, то скрипт сам выполняется, но из БД приходит 0
Запись из crontab:

10      *     *       *       *       user     sh /home/user/test.sh
Из-за чего так может быть?

Фильтр block device в Линукс, !*! DoubleHead, (Разное) 26-Июн-15, 15:34  [ | | | ] [линейный вид] [смотреть все]
Всем доброго времени суток.

Изучаю потихоньку разработку модулей ядра. И пытаюсь написать простенький фильтр для блочного устройства.

Если я все правильно понимаю, теоретически то на каждую операцию записи и чтения должны вызываться функция make_request_fn, которую я собственно перехватываю. Проблема в том, что я вижу вызовы этой функции на запись, и изредка на чтение. Такое ощущение, что данные либо где-то кэшируются, либо используется еще какой-то механизм..

Собственно вопрос в том, почему так происходит?

Вот мой код:

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/blkdev.h>
#include <linux/buffer_head.h>
#define PARTITION_NAME "/dev/sdb"


char *ptr;
int i;
struct block_device *bd;
make_request_fn *orig_mrqfn;

static void filter_mrqfn(struct request_queue *rq, struct bio *b)
{
    printk(KERN_INFO "filter: Sector=lu Size=%d bi_rw=%lu\n", b->bi_sector, b->bi_size, b->bi_rw);

    ptr=(char *)bio_data(b);
    for(i=0;i<b->bi_size;i++)  //4096 as bio is going to be in 4kb chunk?????
    {
       printk("%c",*ptr);
       ptr++;
    }


    orig_mrqfn(rq, b); /* calling the original make_request_fn() */
}

/*
* set_mrqfn() - Change the original make_request_fn() to our
* modules request function
*/
static void set_mrqfn(void)
{
    struct super_block *sb;
    printk(KERN_DEBUG "filter: %s\n", __FUNCTION__);
    /* lock filesystem to prevent any further changes */
    fsync_bdev(bd);
    sb = freeze_bdev(bd);
    if (bd->bd_disk->queue->make_request_fn == filter_mrqfn) {
        printk(KERN_INFO "filter: modules request function is already active\n");
    } else {
        /* save the pointer to the original make_request_fn() */
        orig_mrqfn = bd->bd_disk->queue->make_request_fn;
        /* replace the original with our modules request function */
        bd->bd_disk->queue->make_request_fn = filter_mrqfn;
    }
    
    /* unlock filesystem */
    thaw_bdev(bd, sb);
}

/*
* restore_mrqfn() - Restore the original make_request_fn()
*/
static void restore_mrqfn(void)
{
    struct super_block *sb = bd->bd_super;
    printk(KERN_DEBUG "filter: %s\n", __FUNCTION__);
    if (orig_mrqfn) {
        /* lock filesystem to prevent any further changes */
        fsync_bdev(bd);
        sb = freeze_bdev(bd);
        /* restore the original request function */
        bd->bd_disk->queue->make_request_fn = orig_mrqfn;
        /* unlock filesystem */
        thaw_bdev(bd, sb);
    }
    orig_mrqfn = NULL;
}

static int __init filter_init(void)
{
    printk(KERN_DEBUG "filter: %s\n", __FUNCTION__);
    orig_mrqfn = NULL;
    // Read block device from path
    bd = blkdev_get_by_path(PARTITION_NAME, FMODE_READ, NULL);
    if (IS_ERR(bd)) {
        printk(KERN_ERR "filter: failed to get block device\n");
        return 0;
    }
    
    printk(KERN_INFO "filter: found block device with major number %d\n", bd->bd_disk->major);
    printk(KERN_INFO "filter: file system block size %d\n", bd->bd_block_size);
    printk(KERN_INFO "filter: start sector %lu\n", (unsigned long)bd->bd_part->start_sect);
    printk(KERN_INFO "filter: number of sectors %lu\n", (unsigned long)bd->bd_part->nr_sects);
    printk(KERN_INFO "filter: logical block size %d\n", bdev_logical_block_size(bd));
    printk(KERN_INFO "filter: physical block size %d\n", bdev_physical_block_size(bd));
    set_mrqfn();
    return 0;
}

static void __exit filter_exit(void)
{
    printk(KERN_DEBUG "filter: %s\n", __FUNCTION__);
    restore_mrqfn();
    if (!IS_ERR(bd)) {
        blkdev_put(bd, FMODE_READ);
    }
}

module_init(filter_init);
module_exit(filter_exit);
MODULE_LICENSE("Dual MIT/GPL");
MODULE_AUTHOR("Me");

  • gt оверквотинг удален Что у вас на dev sdb Гадать не буду, такое поведение, , !*! Павел Самсонов (?), 20:13 , 26-Июн-15 (1)
    >[оверквотинг удален]
    >  printk(KERN_DEBUG "filter: %s\n", __FUNCTION__);
    >  restore_mrqfn();
    >  if (!IS_ERR(bd)) {
    >   blkdev_put(bd, FMODE_READ);
    >  }
    > }
    > module_init(filter_init);
    > module_exit(filter_exit);
    > MODULE_LICENSE("Dual MIT/GPL");
    > MODULE_AUTHOR("Me");

    Что у вас на /dev/sdb? Гадать не буду, такое поведение, значит так и есть. Может дисковый кэш сбрасывается. Можно посмотреть что при команде sync будет.

    сообщить модератору +/ответить
  • gt оверквотинг удален Диск примонтирован Может дисковый кэш Что будет при ко, !*! Павел Самсонов (?), 20:31 , 26-Июн-15 (2)
    >[оверквотинг удален]
    >  printk(KERN_DEBUG "filter: %s\n", __FUNCTION__);
    >  restore_mrqfn();
    >  if (!IS_ERR(bd)) {
    >   blkdev_put(bd, FMODE_READ);
    >  }
    > }
    > module_init(filter_init);
    > module_exit(filter_exit);
    > MODULE_LICENSE("Dual MIT/GPL");
    > MODULE_AUTHOR("Me");

    Диск примонтирован? Может дисковый кэш. Что будет при команде sync?

    сообщить модератору +/ответить
Преобразование палитры средствами Pillow., !*! Аноним, (Python) 07-Окт-18, 14:04  [ | | | ] [линейный вид] [смотреть все]
Нужно склеить 2 изображения с разными палитрами. (Одно требуется сохранить без изменений, в другом изменения допустимы.) Поступил просто: создал 3-е изображение нужного размера с палитрой от 1-го, Image.paste()-ом вставил туда 1-е и 2-е. В результате во 2-ом часть оттенков синего стала жёлтыми. Попробовал предварительно преобразовать 2-е в 24-битное — синие цвета покрылись красными точками. Если перед paste() обрабатывать вставляемое convert()-ом, результат тот же (как и следует из докуентации).

ar1 =  fromfile( f1, dtype=uint8 )
pal1 = fromfile( p1, dtype=uint8 )
pic1 = Image.frombuffer( 'P', (32*13, 32*3), ar1, 'raw', 'P', 0, 1 )
pic1.putpalette(pal1[0:768])

ar2 =  fromfile( f2, dtype=uint8 )
pal2 = fromfile( p2, dtype=uint8 )
pic2 = Image.frombuffer( 'P', (32*13, 32*3), ar2, 'raw', 'P', 0, 1 )
pic2.putpalette(pal2[0:768])
pic2.show()
#pict = pic2.convert( mode='RGB' )
#pic3 = pict.convert( mode='P', palette=pic1.getpalette() )

picc = Image.new( 'P', (32*13*2, 32*3) )
picc.putpalette(pal1[0:768])
picc.paste( pic1, ( 0, 0 ) )
picc.paste( pic2, ( 32*13, 0 ) )
#picc.paste( pict, ( 32*13, 0 ) )
#picc.paste( pic3, ( 32*13, 0 ) )
picc.show()

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

Документация на readthedocs.io устарела. В частности, она неверно описывает заголовок Image.frombuffer()

Заранее спасибо.

  • Разобрался сам 1 При paste из индексированного в индексированный различия пал, !*! Аноним (1), 19:34 , 07-Окт-18 (1)
    Разобрался сам:

    1. При paste() из индексированного в индексированный различия палитр не учитываются. Синий стал жёлтым из-за того, что серия оттенков жёлтого в 1-ой палитре и синего во 2-ой имели одинаковые индексы.
    2. При paste() из RGB в индексированный для вставляемого вызывается convert(), который в свою очередь вызывает quantize() с какой-то своей палитрой. Отсюда красные пятна на месте некоторых оттенков синего.
    3. Чтобы преобразовать индексированную картинку к другой палитре, нужно сперва вызвать convert( mode='RGB' ), затем quantize() с требуемой палитрой.
    4. Если нет подходящих цветов, quantize() добавит регулярную сетку пикселей для получения в среднем нужного цвета. Полезно на больших разрешениях, вредно на малых — в моём случае.
    5. Чтобы этого избежать, можно заменить цвета во 2-ой палитре близкими цветами из 1-ой.
    6. Правильный вариант скрипта: https://www.linux.org.ru/forum/development/14517401?cid=1451... Буду рад советам, как его ускорить.

    сообщить модератору +/ответить
ffmpeg/libav api, кто знает как выбрать input s_video/composite, !*! xxxx, (Библиотеки, функции) 16-Окт-18, 10:52  [ | | | ] [линейный вид] [смотреть все]
собственно сабж..
карта имеет два входа, как менять через API?
Нужно закомментировать блок теста, !*! universite, (Shell скрипты) 04-Окт-18, 19:35  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте.

Есть текстовый конфиг, в середине которого есть такой блок


/var/log/lastlog {
    monthly
    rotate 1
}

Как бы его закомментировать символом # в начале строки. Спасибо.

P.S. OS FreeBSD 11.2 или Debian 8.x.

  • Пожалуйста code perl -00pe s 124 A var log lastlog s n s monthly n s , !*! михалыч (ok), 17:16 , 05-Окт-18 (1)
    > Здравствуйте.
    > Есть текстовый конфиг, в середине которого есть такой блок
    >
     
    > /var/log/lastlog {
    >     monthly
    >     rotate 1
    > }
    >

    > Как бы его закомментировать символом # в начале строки. Спасибо.
    > P.S. OS FreeBSD 11.2 или Debian 8.x.

    Пожалуйста.

    perl -00pe 's|\A(/var/log/lastlog\s+{\n)(\s+monthly\n)(\s+rotate\s+1\n)(})|#$1#$2#$3#$4|' file

    сообщить модератору +/ответить


Как башем посчитать  самое большое кол-во запросов за секкунду, !*! Dark Smoke, (Shell скрипты) 17-Сен-18, 17:08  [ | | | ] [линейный вид] [смотреть все]
Добрый день
Подскажите, пожалуйста, как посчитать самое большое количество запросов в секунду.

Есть лог:
2018-08-31 09:29:42.873
2018-08-31 09:29:42.874
2018-08-31 09:29:42.874
2018-08-31 09:29:43.803
2018-08-31 09:29:44.270
2018-08-31 09:29:44.280

Мне надо найти ту секунду в которой было больше всего запросов и посчитать это количество запросов.

Т.е.
в 42ю секунду (09:29:42 ) было 3 запроса
в 43ю - один и два в 44ю секунду.
Значит в 9 часов 29 минут 42 секунды, была самая нагруженная секунда с кол-вом запросов равная 3.

Python crontab open() путь по умолчанию, !*! Alex, (Python) 12-Сен-18, 13:16  [ | | | ] [линейный вид] [смотреть все]
Есть код

my_file = open("some.txt", "w")
my_file.close()

При запуске он создает файл в текущей директории.

А если запустить этот файл из под крона. Файл будет создан в директории пользователя.

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

Вариант /home/vova/py/my.py не подходит, так как программа становится жестко привязанная к пути.

Как управлять питанием дисплея, !*! Аноним, (C/C++) 23-Авг-18, 16:59  [ | | | ] [линейный вид] [смотреть все]
Добрый день,

Интересует какие механизмы существуют для управления питанием дисплея (что-то вроде DPMS).
В частности интересует как сделать следующие действия:

- В терминале/framebuffer в системе Linux управлять питанием монитора (на сколько я понял это DPMS);
- В консоли отключить/включить гашение экрана (black screen) просто закраска черным, но подсветка у монитора продолжает работать;
- Есть ли возможность в принципе отключть функциональность black screen;

P.S. Расширения вроде xset смотрел, но рабочая станция не использует X11, так что направление работы с API X11 пока не интересны. Хотя вероятно неглубоко смотрел.

Буду благодарен информации по вопросу.

выполнить команду sql после падения сервиса в systemd, !*! evgeniy123, (Shell скрипты) 28-Авг-18, 17:46  [ | | | ] [линейный вид] [смотреть все]
Скажите как выполнить команду sql после падения сервиса и до его перезапуска ?  Задача -  очистить всё соответствия по  websocket  при падении самого сокета
запуск dpkg -i в скрипте postinst, !*! sovdep, (Shell скрипты) 26-Июл-18, 10:04  [ | | | ] [линейный вид] [смотреть все]
Добрый день.
В скрипте postinst необходимо скачать другой deb пакет и установить его командой dpkg, но по понятным причинам этого сделать не удается:
"dpkg: ошибка: база данных состояния dpkg заблокирована другим процессом"

deb пакет, который устанавливается в скрипте, в репозиториях отсутствует, т.е. возможность его получить одна - wget http://tratata.com/deb_x86_64/package_name.deb

Мой deb пакет, который я собираю, выкладывается в публичный репозиторий и попадает в систему пользователя через утилиту apt-get install my_package.

Вот такая вот задача. Может кто уже сталкивался или знает как одновременно запустить вторую установку deb пакета.
Спасибо

  • Вам нужно связаться с Микрософтом У них точно есть группа поддержки для пережи, !*! Andrey Mitrofanov (?), 10:29 , 26-Июл-18 (1)
    > Мой deb пакет, который я собираю, выкладывается в публичный репозиторий и попадает
    > в систему пользователя через утилиту apt-get install my_package.
    > запустить вторую установку deb пакета.

    Вам нужно связаться с Микрософтом.  У них точно есть группа поддержки для переживших травмирующее переживание "установки пакета в дебиан".

    http://www.opennet.me/openforum/vsluhforumID3/114582.html#107

    сообщить модератору +/ответить
  • gt оверквотинг удален Никак Указывайте зависимости должным образом и не приду, !*! Aliech (ok), 13:55 , 01-Авг-18 (3)
    >[оверквотинг удален]
    > В скрипте postinst необходимо скачать другой deb пакет и установить его командой
    > dpkg, но по понятным причинам этого сделать не удается:
    > "dpkg: ошибка: база данных состояния dpkg заблокирована другим процессом"
    > deb пакет, который устанавливается в скрипте, в репозиториях отсутствует, т.е. возможность
    > его получить одна - wget http://tratata.com/deb_x86_64/package_name.deb
    > Мой deb пакет, который я собираю, выкладывается в публичный репозиторий и попадает
    > в систему пользователя через утилиту apt-get install my_package.
    > Вот такая вот задача. Может кто уже сталкивался или знает как одновременно
    > запустить вторую установку deb пакета.
    > Спасибо

    Никак. Указывайте зависимости должным образом и не придумывайте велосипед.

    сообщить модератору +/ответить
  • gt оверквотинг удален Запустите асинхронно foo sh шелл-скрипт, ждущий заве, !*! PereresusNeVlezaetBuggy (ok), 19:58 , 04-Авг-18 (4)
    >[оверквотинг удален]
    > В скрипте postinst необходимо скачать другой deb пакет и установить его командой
    > dpkg, но по понятным причинам этого сделать не удается:
    > "dpkg: ошибка: база данных состояния dpkg заблокирована другим процессом"
    > deb пакет, который устанавливается в скрипте, в репозиториях отсутствует, т.е. возможность
    > его получить одна - wget http://tratata.com/deb_x86_64/package_name.deb
    > Мой deb пакет, который я собираю, выкладывается в публичный репозиторий и попадает
    > в систему пользователя через утилиту apt-get install my_package.
    > Вот такая вот задача. Может кто уже сталкивался или знает как одновременно
    > запустить вторую установку deb пакета.
    > Спасибо

    Запустите асинхронно (foo.sh &) шелл-скрипт, ждущий завершения сеанса работы dpkg и запускающий после этого dpkg.

    сообщить модератору +/ответить
Правка конфига nginx и отображение причины ошибки, !*! universite, (Shell скрипты) 01-Авг-18, 00:36  [ | | | ] [линейный вид] [смотреть все]
Имею небольшой скрипт который генерит специфический конфиг (${file1267_conf}).


# проверяем новые конфиг нгинкс, если ошибка, то выключаем генерируемый конфиг и требуем разобраться
nginx -t && service nginx reload || (
    mv ${file1267_conf} ${file1267_conf}.${bad_ending}
    nginx -t && service nginx reload || echo "Nginx config error!"
    )

В логи попадает только текст "Nginx config error!"
Как бы в output генерить ругань проверки конфига от nginx.

  • code code code 2 1 code , !*! Andrey Mitrofanov (?), 09:38 , 01-Авг-18 (1)
    > Имею небольшой скрипт который генерит специфический конфиг (${file1267_conf}).

     { 

    > # проверяем новые конфиг нгинкс, если ошибка, то выключаем генерируемый конфиг и
    > требуем разобраться
    > nginx -t && service nginx reload || (
    >  mv ${file1267_conf} ${file1267_conf}.${bad_ending}
    >  nginx -t && service nginx reload || echo "Nginx config error!"
    >  )  

     } 2>&1 

    > В логи попадает только текст "Nginx config error!"
    > Как бы в output генерить ругань проверки конфига от nginx.
    сообщить модератору +/ответить
Помогите удалить повторяющиеся строки, !*! mintolik, (Shell скрипты) 13-Май-18, 01:33  [ | | | ] [линейный вид] [смотреть все]
Есть файл, в нём постоянно повторяются строки. Необходимо удалить повторяющиеся строки, но без сортировки списка.
$ sort file.txt| uniq -u > sort.txt - не подходит, так как я не хочу сортировать текст. Мне нужно лишь избавиться от повторяющихся строк.

Заранее благодарю за помощь.

  • Пожалуйста code perl -e for cat file txt print unless s _ code или , !*! михалыч (ok), 07:03 , 13-Май-18 (1)
    > Есть файл, в нём постоянно повторяются строки. Необходимо удалить повторяющиеся строки,
    > но без сортировки списка.
    > $ sort file.txt| uniq -u > sort.txt - не подходит, так как
    > я не хочу сортировать текст. Мне нужно лишь избавиться от повторяющихся
    > строк.
    > Заранее благодарю за помощь.

    Пожалуйста.

    perl -e 'for(`cat file.txt`){print unless $s{$_}++}'

    или так
    perl -e '@u=grep{\!$s{$_}++} `cat file.txt`; print @u'

    в FreeBSD знак "!" приходится экранировать
    сообщить модератору +/ответить
  • юник без сорта предлагали 12345667889123456789, !*! Pahanivo (ok), 16:04 , 15-Май-18 (6) –9 [V]
    > Необходимо удалить повторяющиеся строки, но без сортировки списка.
    > $ sort file.txt| uniq -u > sort.txt - не подходит, так как
    > я не хочу сортировать текст. Мне нужно лишь избавиться от повторяющихся
    > строк.

    юник без сорта предлагали?

    > cat file

    1
    2
    3
    4
    5
    6
    6
    7
    8
    8
    9

    > cat file | uniq

    1
    2
    3
    4
    5
    6
    7
    8
    9

    сообщить модератору –9 +/ответить
  • Вообще uniq без sort, но могли бы свой юник переизобрести, напримерwhile read -r, !*! Аноним (28), 19:20 , 10-Июл-18 (28)
    Вообще uniq без sort, но могли бы свой юник переизобрести, например

    while read -r l ; do [ "$l" != "$p" ] && echo "$l" ; p="$l" ; done

    сообщить модератору +/ответить
  • b Идея b для большого количества строк данных 1 к исходному файлу добавляем , !*! iklingen (ok), 21:16 , 26-Июл-18 (29) +2
    Идея для большого количества строк данных:
    1) к исходному файлу добавляем нумерацию строк (индексы) как некоторое поле, например в первых нескольких позициях:

    $cat file
    7
    5
    2
    7
    2
    0
    3
    1
    2
    3
    4
    5
    0
    8
    4
    2


    $cat -n file
         1    7
         2    5
         3    2
         4    7
         5    2
         6    0
         7    3
         8    1
         9    2
        10    3
        11    4
        12    5
        13    0
        14    8
        15    4
        16    2

    2) сортируем по данным с удалением дублей:

    $cat -n file | sort -u -k 2
         6    0
         8    1
         3    2
         7    3
        11    4
         2    5
         1    7
        14    8

    3) теперь сортируем по номерам строк/индексам:

    $cat -n file | sort -u -k 2 | sort -n
         1    7
         2    5
         3    2
         6    0
         7    3
         8    1
        11    4
        14    8

    4) и убираем индексы:

    $cat -n file | sort -u -k 2 | sort -n | cut -f2
    7
    5
    2
    0
    3
    1
    4
    8

    сообщить модератору +2 +/ответить


tail ssh мониторинг, !*! Alex, (Shell скрипты) 16-Июл-18, 13:54  [ | | | ] [линейный вид] [смотреть все]
Есть логи на сервере хостера.

Хочу сделать со своего компа что то вроде:

$ tail -f ssh login:pass@hoster/logfile | grep 'событие' > myfile

Так, что бы файл myfile был не у хостера, а у меня на компе, для дальнейшей обработки.

Что можно придумать ???

Преобразование уникода, !*! abut, (Perl) 18-Фев-17, 18:47  [ | | | ] [линейный вид] [смотреть все]
Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439


разбор двух файлов, !*! Андрей, (Shell скрипты) 03-Июл-18, 15:27  [ | | | ] [линейный вид] [смотреть все]
Добрый день.

имеем 2 файла вида:

$cat host
            <host>host1.fullname</host>
            <ip>721.0.0.1</ip>
            <name>host1.shortname</name>
            <proxy>
                <name>proxy1.fullname</name>
            </proxy>
--
            <host>host2.fullname</host>
            <ip>721.0.0.2</ip>
            <name>host2.shortname</name>
            <proxy>
                <name>proxy2.fullname</name>
            </proxy>
--
...
$cat ip
                <group>
                    <name>GROUP1</name>
                    <name>GROUP2</name>
                </group>
                    <ip>721.0.0.1</ip>
                    <dns>host1.fullname</dns>
--
                <group>
                    <name>GROUP3</name>
                    <name>GROUP4</name>
                </group>
                    <ip>721.0.0.2</ip>
                    <dns>host2.fullname</dns>
--
...

как выводить мне из двух файлов скриптом следующее

--
hostname: host1.fullname
ip: 721.0.0.1
short: host1.shortname
proxy: proxy1.fullname
group: GROUP1 , GROUP2
--
hostname: host2.fullname
ip: 721.0.0.2
short: host2.shortname
proxy: proxy2.fullname
group: GROUP1 , GROUP2

только есть один нюанс, если в файле ip в секции
                <group>
                    <name>GROUP1</name>
                    <name>GROUP1</name>
                </group>
GROUP1=GROUP1 то вывод
--
hostname: host1.fullname
ip: 721.0.0.1
short: host1.shortname
proxy: proxy1.fullname
group: GROUP1

есть у кого идеи? может кто делал такое!!
Спасибо.


  • вот прям реально такие файлы XML поломанный, !*! михалыч (ok), 17:54 , 03-Июл-18 (1)
    вот прям реально такие файлы?
    XML поломанный
    сообщить модератору +/ответить
  • за подобный формат файлов нужно бить табуреткой по голове до просветления откуда, !*! Pahanivo (ok), 11:13 , 04-Июл-18 (2)
    > Добрый день.
    > имеем 2 файла вида:

    за подобный формат файлов нужно бить табуреткой по голове до просветления.

    > как выводить мне из двух файлов скриптом следующее
    > short: host1.shortname

    откуда вообще взялся данный тег?

    > только есть один нюанс, если в файле ip в секции
    >            
    >     <group>
    >         <name>GROUP1</name>
    >         <name>GROUP1</name>
    >     </group>
    > GROUP1=GROUP1 то вывод

    если у тебя два тега с одинаковыми данными, то да данные этих тегов одинаковы, что ты хотел сказать?

    > есть у кого идеи? может кто делал такое!!

    нанять человека который сможет хотя бы внятно объяснить что он хочет

    сообщить модератору +/ответить
  • gt оверквотинг удален я так понимаю что сопоставление сущностей в двух файлах , !*! ыы (?), 11:48 , 04-Июл-18 (3)
    >[оверквотинг удален]
    >     </group>
    > GROUP1=GROUP1 то вывод
    > --
    > hostname: host1.fullname
    > ip: 721.0.0.1
    > short: host1.shortname
    > proxy: proxy1.fullname
    > group: GROUP1
    > есть у кого идеи? может кто делал такое!!
    > Спасибо.

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

    сообщить модератору +/ответить
  • ну, что же я ждал, но первозданный XML файл так и не показываютладно, обойдёмся, !*! михалыч (ok), 16:30 , 06-Июл-18 (9)
    ну, что же..
    я ждал, но первозданный XML файл так и не показывают

    ладно, обойдёмся ))
    погнали


    #!/usr/bin/perl

    use strict;
    use warnings;


    my $host = "host";
    my $ip   = "ip";

    open ( FH1, $host ) or die "couldn't open $host : $!";
    open ( FH2, $ip )   or die "couldn't open $ip : $!";


    my (@hostname, @addr, @short, @proxy, @group, %unic);

    { local $/ = undef;

        while ( <FH1> ) {

            @hostname = m|<host>(.*)</host>|g;
            @addr     = m|<ip>(.*)</ip>|g;
            @short    = m|<name>(.*)</name>|g;
            @proxy    = m|<proxy>.*?>(.*?)</.*?</proxy>|gs;
        }
    }

    my $count = 0;
    while ( <FH2> ) {

        $count++ if /--/;
        if (m|<name>(.*)</name>|) {push @{$group[$count]}, $1 unless $unic{$1}++;}
    }

    close FH1;
    close FH2;

    for (my $i=0; $i<@addr; $i++) {

        print "--\n";
        print "hostname: $hostname[$i]\n";
        print "ip: $addr[$i]\n";
        print "short: $short[$i]\n";
        print "proxy: $proxy[$i]\n";
        print "group: ", join(", ", @{$group[$i]}),"\n";
    }

    комментарии писать лень, и так всё понятно )))

    да, можно пойти по пути предложенному ыы


    #!/usr/bin/perl

    use strict;
    use warnings;


    undef $/;

    my $host = "host";
    my $ip   = "ip";

    open ( FH1, $host ) or die "couldn't open $host : $!";
    open ( FH2, $ip )   or die "couldn't open $ip : $!";


    my @hosts = split(/--/, <FH1>);
    my @ips   = split(/--/, <FH2>);

    close FH1;
    close FH2;

    my (@hostname, @addr, @short, @proxy, @group, %unic);

    for (my $i=0; $i<@hosts; $i++) {

        $hosts[$i] =~ m|<host>(.*)</host>|;
        push @hostname, $1;

        $hosts[$i] =~ m|<ip>(.*)</ip>|;
        push @addr, $1;

        $hosts[$i] =~ m|<name>(.*)</name>|;
        push @short, $1;

        $hosts[$i] =~ m|<proxy>.*>(.*)<.*</proxy>|s;
        push @proxy, $1;

        if ($ips[$i] =~ m|<group>.*?>(.*?)<.*?</group>|s) {push @{$group[$i]}, $1 unless $unic{$1}++;}
        if ($ips[$i] =~ m|<group>.*>(.*)<.*</group>|s) {push @{$group[$i]}, $1 unless $unic{$1}++;}

    }

    for (my $i=0; $i<$#hosts; $i++) {

        print "--\n";
        print "hostname: $hostname[$i]\n";
        print "ip: $addr[$i]\n";
        print "short: $short[$i]\n";
        print "proxy: $proxy[$i]\n";
        print "group: ", join(", ", @{$group[$i]}),"\n";
    }

    но есть нюанс )))
    цикл while vs цикл for

    вспомнился бородатый анекдот про нюанс http://bfy.tw/IvBU

    это что так препод садист изголяется??
    ух он какой, у-у-ууу..

    ps
    конечно, цикл for можно переписать по другому, более компактно

    for (my $i=0; $i<@hosts; $i++) {

        push @hostname, $1 if $hosts[$i] =~ m|<host>(.*)</host>|;
        push @addr, $1 if $hosts[$i] =~ m|<ip>(.*)</ip>|;
        push @short, $1 if $hosts[$i] =~ m|<name>(.*)</name>|;
        push @proxy, $1 if $hosts[$i] =~ m|<proxy>.*>(.*)<.*</proxy>|s;

        if ($ips[$i] =~ m|<group>.*?>(.*?)<.*?</group>|s) {push @{$group[$i]}, $1 unless $unic{$1}++;}
        if ($ips[$i] =~ m|<group>.*>(.*)<.*</group>|s) {push @{$group[$i]}, $1 unless $unic{$1}++;}

    }

    такие дела

    сообщить модератору +/ответить
  • usr bin perlmy hosts my ips for do local -- STDIN , !*! Аноним (28), 18:48 , 10-Июл-18 (11) +1
    #!/usr/bin/perl

    my $hosts = {};
    my $ips = {};

    for( do{ local $/ = "--"; <STDIN> } ){
        next unless( my( $ip ) = m/<ip>([^<]+)/ );
        if(/<group>/){
            $ips->{$ip} = { map { $_ => 0 } m/<name>([^<]+)/g } ;
            next ;
        }
        $hosts->{$ip} = [ m/<host>([^<]+).*<name>([^<]+)/s ];
    }

    for my $ip ( sort{ $hosts->{$a}->[0] cmp $hosts->{$b}->[0] } keys %$hosts ){
        my( $short, $long ) = @{ $hosts->{$ip} };
        printf qq|hostname: %s\nip: %s\nshort: %s\nproxy: %s\ngroup: %s\n--\n|,
            $long, $ip, $short, $long, join(", ", sort keys %{ $ips->{$ip} });
    }


    Пользоваться
    cat host ip | perl script.pl

    сообщить модератору +1 +/ответить


Нужно создать сервис кеширования xml запросов, !*! universite, (Разное) 15-Июн-18, 13:04  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте.

Навеяно статьей на хабре - https://habr.com/post/358298/

Имеем публичный сервис, например  http://www.cbr.ru/scripts/XML_daily.asp?date_req=16/12/2014
Надо закешировать значения и выдавать локально, не травмировать основной сервис.
Имеем ограниченную глубину запросов, например, кешируем данные после определенной даты.

Вижу решения:
I. Настроить http(s) прокси на nginx и кешировать через nginx встроенными методами.
II. Самописными скриптами тянуть новые значения, сохранять локально и потом через nginx отдавать статикой.
III. Поискать опенсорс решение.

Проблемы неясности:
I. Как пережить перезагрузку сервера, демона?
II. Как сделать универсальную иерархию хранения файлов? Сохранять ли URI целевого сервиса или сооружать свои URI? Какие потом через извратные реврайты отдавать статический контент в nginx ? Сохранять ли в сжатом или несжатом виде кешированные данные?

Задача чиста академическая, не имеет заказчика и спонсора.

  • gt оверквотинг удален Если юзать nginx, то он прекрасно умеет сохранять в диск, !*! PereresusNeVlezaetBuggy (ok), 08:47 , 16-Июн-18 (1) +1
    >[оверквотинг удален]
    > Имеем публичный сервис, например  http://www.cbr.ru/scripts/XML_daily.asp?date_req=16/12/2014
    > Надо закешировать значения и выдавать локально, не травмировать основной сервис.
    > Имеем ограниченную глубину запросов, например, кешируем данные после определенной даты.
    > Вижу решения:
    > I. Настроить http(s) прокси на nginx и кешировать через nginx встроенными методами.
    > II. Самописными скриптами тянуть новые значения, сохранять локально и потом через nginx
    > отдавать статикой.
    > III. Поискать опенсорс решение.
    > Проблемы неясности:
    > I. Как пережить перезагрузку сервера, демона?

    Если юзать nginx, то он прекрасно умеет сохранять в дисковый кеш, переживающий рестарт:

    https://www.nginx.com/blog/nginx-high-performance-caching/#L...

    > II. Как сделать универсальную иерархию хранения файлов? Сохранять ли URI целевого сервиса
    > или сооружать свои URI? Какие потом через извратные реврайты отдавать статический
    > контент в nginx ? Сохранять ли в сжатом или несжатом виде
    > кешированные данные?
    > Задача чиста академическая, не имеет заказчика и спонсора.

    сообщить модератору +1 +/ответить
Что такое хендлл(handle), !*! redd, (C/C++) 18-Июн-18, 11:31  [ | | | ] [линейный вид] [смотреть все]
Собственно сабж, а конкретнее в этом блоке capture_handle

if ((err = snd_pcm_readi(capture_handle, samples, rate)) != rate) {
        printf("read from audio interface failed (%s)\n", snd_strerror(err));
        exit(1);

Как скачать alsa ..., !*! redd, (C/C++) 13-Июн-18, 15:55  [ | | | ] [линейный вид] [смотреть все]
Не могу зайти на alsa-project.org, это у меня такое или у всех ?
SQLITE3 под Python 3, !*! Дмитрий, (Python) 02-Июн-18, 15:32  [ | | | ] [линейный вид] [смотреть все]
Доброго времени суток!

По идеи, sqlite должен устанавливаться автоматически. Под Python2 он есть, а под Python 3 его нет. Проверял help('modules'). Попытка pip install pysqlite ничего не дает. pip пишет, что pysqlite не поддерживается Python3 и в 3-м питоне надо использовать sqlite3 из стандартной библиотеки.

imposrt sqilte во втором питоне нормально проходит, в третьем этот модуль не находит. А он нужен именно в 3-м.

Кто-нибудь сталкивался с таким, как решить ее? Система Gento, emerge dev-lang/python не помогает.

Как записать несколько строк в файл с виндоус кодировкой ?, !*! universite, (Shell скрипты) 22-Апр-18, 03:03  [ | | | ] [линейный вид] [смотреть все]
Имеется некая дискетка с FreeDOS. Она соответсвующим образом смонтирована на запись во FreeBSD.

Но не удается записать пару строк autoexec.bat

Пробовал


printf '%s\n%s\n' 'Hello' 'World!' >> $dir_tmp/ourimage/autoexec.bat
echo "AMI.BAT X9DRD5.116"       >> $dir_tmp/ourimage/autoexec.bat

и


echo "Hello"       >> $dir_tmp/ourimage/autoexec.bat
echo "World!"                        >> $dir_tmp/ourimage/autoexec.bat
echo "AMI.BAT X9DRD5.116"       >> $dir_tmp/ourimage/autoexec.bat

Все равно на выходе:


HelloWorld!AMI.BAT X9DRD5.116

P.S. echo -e во FreeBSD не работает....

Octave, !*! redd, (C/C++) 02-Май-18, 09:33  [ | | | ] [линейный вид] [смотреть все]
Можно ли считать что Octave аналог матлаб, или все таки матлаб лучше ???
  • СложныйЮ философский , вопрос Можно ли посмотреть слова аналог и лучше в сло, !*! Andrey Mitrofanov (?), 09:40 , 02-Май-18 (1)
    > Можно ли считать что Octave аналог матлаб, или все таки матлаб лучше
    > ???

    СложныйЮ философский!, вопрос.

    Можно ли посмотреть слова "аналог" и "лучше" в словарях, или https://ru.wikipedia.org/wiki/%D0%9B%D0%... всё-таки лучше https://ru.wikipedia.org/wiki/%D0%9F%D1%... спросить у тех, кто в курсе, -- сразу https://ru.wikipedia.org/wiki/%D0%9B%D0%... на форумах?....

    сообщить модератору +/ответить
  • Вот программа для Matlab , запустилась на Octave без правок close all clear, !*! redd (?), 17:22 , 11-Май-18 (3)
    Вот программа для Matlab , запустилась на Octave без правок ....


    close all; clear all; clc;

    %% ИСХОДНЫЕ ДАННЫЕ
    Fs = 100E3;         % частота дискретизации
    f0 = 10E3;          % несущая частота

    N = 16384;          % количество дискретных отсчетов
    t = (0:N-1)/Fs;     % дискретное время.
    frq = Fs*(0:N-1)/N - Fs/2;  % дискретная частота

    %% ФОРМИРУЮ АМ НА ЧАСТОТЕ f0

    sm  = cos(2*pi*100*t);  % модулирующий сигнал
    mAM = 0.9;              % глубина АМ

    s = (1+mAM.*sm).*cos(2*pi*f0*t); % AM сигнал на частоте f0

    % рассчитываю спектр исходного сигнала и вывожу на график
    S = fftshift(abs(fft(s)));
    figure; subplot(211);   plot(t, s);
                            title('AM signal');
                            xlabel('time, sec');
                            
            subplot(212);   plot(frq, S);
                            title('spectr of AM signal');
                            xlabel('frequency, kHz');
                            
    %% ПЕРЕНОС ПРИ ПОМОЩИ КВАДРАТУРНОГО ГЕТЕРОДИНА

    i0 =  s.*cos(2*pi*f0*t);
    q0 = -s.*sin(2*pi*f0*t);

    %% ВЫДЕЛЕНИЕ ОГИБАЮЩЕЙ ПРИ ПОМОЩИ ФНЧ

    [b a] = ellip(4, 0.1, 60, 0.1); % формирую ФНЧ

    i = filter(b,a,i0); % фильтрую I канал
    q = filter(b,a,q0); % фильтрую Q канал

    z = i + 1i * q;     % выделенная комплексная огибающая

    % рассчитываю спектр комплексной огибающей и вывожу на график
    Z0 = fftshift(abs(fft(i0+1i*q0)));
    Z  = fftshift(abs(fft(z)));
                            
    figure; plot(frq, Z0, frq, Z, 'r');
            title('complex envelope spectr');
            xlabel('frequency, kHz');

    %% ИЗМЕРЕНИЕ ГЛУБИНЫ АМ ИЗ ВЫДЕЛЕННОЙ ОГИБАЮЩЕЙ

    amp = abs(z); % ам есть модуль огибающей z

    % отбрасываю половину модуля чтобы исклюсить переходной процесс фильтрации
    amp = amp(end/2:end);

    % рассчет глубины и вывод на печать
    mam = (max(amp) - min(amp))/(max(amp) + min(amp));
    fprintf('исходная глубина модуляции:    %.4f\n', mAM);
    fprintf('измеренная глубина модуляции:  %.4f\n', mam);


    сообщить модератору +/ответить
Почему уровень сигнала на спектре зависит от частоты? , !*! redd, (C/C++) 03-Май-18, 08:30  [ | | | ] [линейный вид] [смотреть все]
Почему уровень сигнала на спектре зависит от частоты? При одинаковом сигнале на входе ???


Сложение сэмплов <>, !*! redd, (C/C++) 03-Май-18, 07:18  [ | | | ] [линейный вид] [смотреть все]
Как сложить два 8 битных, (20кГц дискретизация) аудиопотока.
Просто складываем ?
Складываем и делим на 2 ?
Или логически складываем ?

DFT(FFT), !*! redd, (C/C++) 30-Апр-18, 07:01  [ | | | ] [линейный вид] [смотреть все]
Интересует рабочий код на 32(64 и.т.д. points )точки, желательно с описанием, можно только описание БЕЗ кода ...


Нужно оставить левую часть списка от последнего символа '-', !*! universite, (Shell скрипты) 01-Май-18, 04:24  [ | | | ] [линейный вид] [смотреть все]
Есть список вида:

...
php56-xsl-5.6.19
php56-zip-5.6.19
php56-zlib-5.6.19
pkgconf-1.3.7,1
png-1.6.21
popt-1.16_1
...

Нужно оставить только левую часть от последнего символа "-"

Тип указателя, !*! redd, (C/C++) 18-Апр-18, 09:46  [ | | | ] [линейный вид] [смотреть все]
Для чего указателю тип, ??
Заранее же известно что там будет, адрес объекта ..??
Указатель, ..., !*! redd, (C/C++) 14-Апр-18, 12:37  [ | | | ] [линейный вид] [смотреть все]
char far *vidmem = (char far *) 0x0B800; // Начальный адрес нулевой страницы видео буфера.

Никак не понимаю,

1. как дать смещение указателю допустим 10
2. как записать в ячейку памяти на которую будет указывать указатель после смещения, допустим 67h ???


С таймер ..., !*! redd, (C/C++) 16-Апр-18, 06:45  [ | | | ] [линейный вид] [смотреть все]
Нужен таймер, программный, чтобы допустим каждые 500 миллисекунд, основная программа прерывалась (как по прерыванию) исполнялся определенный код, и снова продолжалась основная программа ...

  • Ну в общем, тики нужно сформировать, , !*! redd (?), 06:51 , 16-Апр-18 (1)
    Ну в общем, тики нужно сформировать, ...
    сообщить модератору +/ответить
  • http docs libuv org en v1 x timer html, !*! Аноним (-), 06:58 , 16-Апр-18 (2) +1
    > Нужен таймер, программный, чтобы допустим каждые 500 миллисекунд, основная программа прерывалась
    > (как по прерыванию) исполнялся определенный код, и снова продолжалась основная программа
    > ...

    http://docs.libuv.org/en/v1.x/timer.html

    сообщить модератору +1 +/ответить
 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру