• Какой роутер выбрать для больницы?

    @ESP
    Предостерегу о правовой основе. С недавних пор публичный Wifi в России под колпаком. Обязательно предусмотрите функционал т.н. Captive Portal'a. Иначе прокуратура может много крови попить.
    Ответ написан
    2 комментария
  • Какой роутер выбрать для больницы?

    Ogogon
    @Ogogon
    В таком случае Вам нужна система базовых станций Wi-Fi с централизованным эккаунтингом.
    В ней у каждого пользователя своя комбинация логин-пароль, что позволяет создавать и удалять пользователя не беспокоя других.

    Базовые станции размещаются по объекту с учетом необходимости в покрытии и потенциального количества работающих абонентов.
    В последнее время, такие решения поддерживают бесшовный Wi-Fi роуминг, позволяя пользователю перемещаться между станциями, не разрывая соединений.

    Далеко не единственный пример такой системы Ubiquiti UniFi - https://www.ubnt.com/unifi/unifi-ap/
    Ответ написан
    Комментировать
  • Какой роутер выбрать для больницы?

    Ubiquiti + wifi контроллер на убунте = отличный вариант
    Ответ написан
    Комментировать
  • Возможна ли совместная работа софт-телефона и SIP-аппарата?

    aalexx
    @aalexx
    Инженер связи
    Не совсем ясна задача. Если с компа нужно просто инициировать вызов, а разговаривать с железного телефона (что чаще всего и требуется), то инициировать вызов можно кучей вариантов начиная с AMI. Сваять какой-то "визуальный диалер" отдающий AMI-команды Asterisk-у не самая трудная задачка ;) У меня через Web-телефонный справочник предприятия через AMI инициируются вызовы - сначала себе потом адресату.
    Я в своей организации от софтфонов в мобильниках ушел в сторону связки Asterisk+GSM шлюзы+Мобильные телефоны. Причин несколько: не везде достаточный и стабильный WIFi/Мобильный интернет; неудобства в диалерах - прыгать с встроенного диалера на Zoiper(или другой софтфон) то еще удовольствие..
    Лично у меня сделано так: внутренние номера 74ХХХ, соответствующие им мобильные 75ХХХ. С 74ХХХ на 75ХХХ через MYSQL-ную базу (можно/нельзя) уходит переадресация на мобильные сотрудников - им бесплатно, а мне по тарифам шлюзовых сим-карт. И меня не парит запущен ли у него софтфон, есть ли у него интернет и пр. Да и где он находится вообще говоря по барабану.
    При достаточном количестве шлюзовых мобильных каналов (корпоративные симки вам в помощь - внутренние звонки бесплатны) и при необходимости двухсимочниках у сотрудников можете адаптировать мою схему с переадресациями по неответу. То есть инициируете вызов с компа любым удобным образом (CRM, 1C, Web-страницы с php-скриптами...) и вам на стационар придет входящий. Если возьмете трубку не дожидаясь переадресации - пойдет вызов "второй" стороне и вы будете разговаривать. Если же хочется поговорить с мобильника - не берите трубку на стационаре в течение тайм-аута и примите вызов на мобильном - ответите и пойдет вызов "второй" стороне. И не привязаны вы к месту, уровню приема всяческого интернета и локального WIFi...
    Мнение чисто субъективное. Ногами прошу не пинать.
    P.S. Если вам вдруг разговаривая по стационару, захочется/потребуется куда-то идти - сделайте трансфер вызова на свой "прозрачный" мобильный (75ХХХ) и алга! Сам часто этим пользуюсь.
    Ответ написан
    2 комментария
  • Возможна ли совместная работа софт-телефона и SIP-аппарата?

    chumayu
    @chumayu
    Если в башне по*бень. То что еб*нь, что не еб*нь.
    Что Вам говорит - callgroup?
    Ответ написан
    3 комментария
  • Как организовать многопоточную обработку массива в Perl?

    @Rozello
    Создавать и убивать потоки, это плохая идея, нужно создавать потоки обрабатывающие массив в цикле, пока он не опустеет.
    То есть массив используется как очередь.
    Но потоки это беда, имхо.

    #!/usr/bin/env perl
    
    use strict;
    use warnings;
    
    use threads;
    use threads::shared;
    
    # Создаём расшареную переменную
    my @numbers:shared = (1..100);
    
    # Задаём количество потоков
    my $threads = shift || 10;
    
    # Создаём потоки и кладём их обекты в массив
    my @threads;
    for (1..$threads) {
        push @threads, threads->new(
            sub {
                while (@numbers) {
                    # Достаём данные из массива
                    # Предварительно заблокировава его для остальных потоков
                    my $number;
                    {
                        # Блокировка работает только в этом скоупе
                        lock(@numbers);
                        $number = shift(@numbers);
                    }
                    
                    print 'Result: '.($number*10)."\n";
                }
            }
        );
    }
    
    # Запускаем потоки привязав их к основному процессу
    $_->join for (@threads);
    Ответ написан
    Комментировать
  • Как организовать многопоточную обработку массива в Perl?

    @krypt3r
    Можете попробовать взять за основу вот такой код (с использованием Thread::Queue)
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use threads;
    use Thread::Queue;
    use Data::Dumper;
    
    my @myarray = (1 .. 1000);
    #print Dumper (\@myarray);die;
    
    my $count = shift || 10;
    print "Number of threads: $count\n";
    
    my $q = Thread::Queue->new;
    my @threads;
    for (0 .. $count - 1)
    {
        push @threads, async {
            while (defined (my $f = $q->dequeue))
            {
                some_process ($f);
            }
        };
    }
    
    for (@myarray)
    {
        $q->enqueue ($_);
    }
    
    # Tell workers they are no longer needed.
    $q->enqueue (undef) for @threads;
    
    # Wait for workers to end
    $_->join for @threads;
    
    print "Complete\n";
    
    1;
    
    sub some_process
    {
        my $element = shift;
        my $tid = threads->self->tid;
        #my $count = threads->list (threads::running);
        #print "Running threads: $count\n";
        print "Thread $tid started\n";
        open my $F, '>>', $tid . '.txt';
        print $F 'TID: ', $tid, ', element: ', $element, "\n";
        close $F;
        print "Thread $tid stopped\n";
    }
    Ответ написан
    Комментировать