Эхо что это программа

Выходцы из «Эха Москвы» запустят новый проект под названием «Эхо» Статьи редакции

Его сайт и приложение объединят контент бывших журналистов радиостанции, которую в марте 2022 года ликвидировали.

  • О запуске рассказал руководитель проекта, бывший замглавреда «Эха Москвы» Максим Курников в эфире «Дождя» на YouTube. Его слова приводит Forbes. «Я очень надеюсь, что мы на этой неделе в техническом режиме запустимся и в понедельник сможем подавать это уже массово».
  • У нового проекта будут сайт (уже запущен в тестовом режиме) и приложение. Команда планирует «технологически объединить» контент, который сейчас создают бывшие журналисты радиостанции на YouTube. В остальном они будут работать независимо.
  • Канал «Живой гвоздь» на YouTube, которые ведёт главный редактор «Эха Москвы» Алексей Венедиктов, тоже появится в проекте. Но сам Венедиктов не будет главредом всего «Эха» или сайта.
  • По словам Курникова, центр проекта «Эхо» находится за рубежом. Работать он будет за счёт донатов подписчиков.

Мы стараемся объединить всех эховцев в один аудиопоток, чтобы те, кто привык слушать «Эхо», те, кто привык потреблять его тем старым образом, могли это делать удобно.

Алексей Венедиктов** и Сергей Бунтман / Будем Наблюдать // 24.12.22

Мы часто видим, что какие-то люди знают о существовании одного YouTube-канала с бывшими эховцами, но не знают про другой YouTube-канал с бывшими эховцами.

Максим Курников (цитата по «Коммерсанту»)

  • «Эхо Москвы» впервые вышло в эфир в августе 1990 года. В начале марта 2022 года Роскомнадзор начал блокировать доступ к радиостанции по требованию Генпрокуратуры, а затем совет директоров решил ликвидировать радио и сайт издания и уволил Алексея Венедиктова с поста главреда.

8790 просмотров
Показать ещё
102 комментария
Написать комментарий.
Развернуть ветку

Развернуть ветку

Это не из Подводной братвы случайно?)

Развернуть ветку
1 комментарий
Развернуть ветку
Развернуть ветку

Блок сайта Роскомнадзором через 3. 2. 1.

Развернуть ветку
Развернуть ветку
4 комментария
Развернуть ветку
1 комментарий

Зарубежное Эхо получается 🙂
Но молодцы, не сдаются, в события февраля-марта частенько слушала их эфиры.

Развернуть ветку

Было крипово когда утром в тачке я услышал белый шум на их волне

Развернуть ветку

Ну живой гвоздь из Москвы вещает

Развернуть ветку
Золотой якорь

Да они и сейчас все вещают в YouTube. Время от времени слушаю в виде подкастов.

Развернуть ветку
2 комментария

Почему зарубежное? Откуда инфа?

Развернуть ветку

Главное слушать пропаганду противника, а не свою — только тогда жизнь сложится.

Развернуть ветку
1 комментарий

Выходцы из Яндекса запустят Яндокс?

Развернуть ветку

норм сервис для редактирования документов получится

Развернуть ветку
3 комментария
Развернуть ветку
Развернуть ветку
2 комментария

Развернуть ветку

Эхо войны США и ЕС правильно?

Развернуть ветку
1 комментарий

Прямая линия Кадырова / Новая должность Медведева / Борис Вишневский / Особое мнение // 26.12.2022

Комментарий удален модератором

Развернуть ветку

Всепропальщики оказались неправы,

Развернуть ветку
2 комментария

Надо было назвать «Эхо-камера». В современных реалиях зашло бы на отличненько

Развернуть ветку

Э́хо-ка́мера — понятие в теории СМИ, представляющее собой ситуацию, в которой определённые идеи, убеждения усиливаются или подкрепляется путём передачи сообщения или его повторением внутри закрытой системы (партия, круг единомышленников, субкультура)[1]. При этом подобные сообщения заглушают другие аналогичные информационные потоки. Иными словами, любые высказывания приводят не к дискуссиям, а к поддакиванию и поддержке единомышленников[2]. Адресаты, находящиеся в такой «закрытой» системе, создают сообщения, слушают сами себя и соглашаются сами с собой. В эту закрытую систему не попадает никакая альтернативная информация[3].

Развернуть ветку
3 комментария

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

Развернуть ветку

Прикольно, находится за рубежом а финансирование на донаты.
А адресовано в ru.

Развернуть ветку

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

Развернуть ветку
6 комментариев

А кто находится за рубежом? Я смотрю, здесь все зациклились на зарубежье. Мы хоть об одном и том же говорим? А то может ещё какое Эхо запускают, а люди, кроме тех, кто пишет комменты под этой статейкой с дезинформацией, и не знают?

Источник: vc.ru

Эхо что это программа

если кто не знает , лайфхак , выше адрес вещания в комментах , если вставить в адресную строку хрома(например) , и будет работать как плеер , может даже в фоне тоже , если в настройках браузера включено фоновое воспроизведение.

и в закладку можно кинуть.

11.10.22, 06:06 | #8


Друзья 4PDA
Реп: ( 8 )
если кто не знает , лайфхак

«Не удаётся установить соединение с сайтом.
Страница по адресу https://i1.echofm.online:8443/stream может быть временно недоступна или перемещена на новый адрес.»
То же и в аимп

Читайте также:
Intel extreme tuning utility msi что это за программа

11.10.22, 14:44 | #9


Друзья 4PDA
Реп: ( 21 )

LosEngels,в puffin браузере работает.
видимо ркн таки бонит

Добавлено 11.10.2022, 14:46:

через впн на хроме тоже норм. щас проверил.

11.10.22, 18:25 | #10


Друзья 4PDA
Реп: ( 0 )
13.10.22, 18:52 | #11


Друзья 4PDA
Реп: ( 101 )

Обновил версию через плеймаркет — перестала работать. Предыдущая работает, но соединяется не сразу. Телефон Samsung A71 Android 12.

22.10.22, 10:58 | #12


Друзья 4PDA
Реп: ( 4 )

В общем, судя по всему, разработчик сего приложения либо школьник, либо выпускник курсов «программист за 3 недели/месяца».
Не работает она — виснет на заставке и причина не в блокировке РКН — проверялась и в других страна сия программа.

22.10.22, 17:05 | #13


Друзья 4PDA
Реп: ( 101 )

В общем, судя по всему, разработчик сего приложения либо школьник, либо выпускник курсов «программист за 3 недели/месяца».
Не работает она — виснет на заставке и причина не в блокировке РКН — проверялась и в других страна сия программа.


Первая версия 1.0.1 работает, обновлённая 1.0.2 нет. проверено на разных устройствах.
26.10.22, 19:29 | #14


Друзья 4PDA
Реп: ( 16 )
Первый раз включайте с впн, потом приложение будет работать без.
27.10.22, 19:25 | #15


Друзья 4PDA
Реп: ( 101 )
Первый раз включайте с впн, потом приложение будет работать без.

Спасибо, но это придётся делать каждый раз при выходе из приложения.
27.10.22, 20:41 | #16


Друзья 4PDA
Реп: ( 16 )
каждый раз

У меня работает после выхода.
Теле2
28.10.22, 19:24 | #17


Друзья 4PDA
Реп: ( 4 )
Первая версия 1.0.1 работает, обновлённая 1.0.2 нет. проверено на разных устройствах.

Висит на заставке любая версия.
7,9,10 Андроиды. Разные провайдеры, впн, опенвпн — до лампочки.
Даже в Турции — висит на заставке.

29.10.22, 07:52 | #18


Друзья 4PDA
Реп: ( 143 )

witacao, сначала запускаю с VPN, а потом получается несколько раз без него, но через некоторое время приходится опять через VPN.

30.10.22, 15:25 | #19


Друзья 4PDA
Реп: ( 4 )

witacao, сначала запускаю с VPN, а потом получается несколько раз без него, но через некоторое время приходится опять через VPN.

У меня VPN поднят на роутере. Несколько шлюзов, на выбор: Англия, Штаты, Голландия. То есть изначально , безо всяких запусков софтовых впн,
все домашние устройства работают «оттуда». Но данная софтина не работает на 4(четырёх) разных устройствах, и , повторюсь, приложение виснет на заставке даже в Турции, на местном провайдере(недавно был там, решил проверить — два телефона, 9 и 10 андроиды — висит на заставке).
Поэтому останусь при мнении, что софт сырой, писался любителем с малым стажем, которые не проверял работоспособность на разных версиях ОС или необходимы какие-то дополнительные пакеты, о которых умалчивается.

Источник: 4pda.to

«Boost.Asio C++ Network Programming». Глава 3: Эхо сервер/клиент

Всем привет!
Продолжаю перевод книги John Torjo «Boost.Asio C++ Network Programming».

  • Глава 1: Приступая к работе с Boost.Asio
  • Глава 2: Основы Boost.Asio
  • Часть 1: Основы Boost.Asio
  • Часть 2: Асинхронное программирование

В этой главе мы реализуем небольшое клиент/серверное приложение, которое, вероятно, будет самым простым клиент/серверным приложением. Это приложение эхо-сервер, который возвращает клиенту то, что тот ему написал, а затем закрывает соединение клиента. Сервер может работать с любым числом клиентов. Когда подключается новый клиент, он шлет сообщение.

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

Здесь будет приводиться не весь код целиком, а только его части, весь код можно посмотреть по ссылке в конце статьи.

TCP эхо сервер/клиент

Для TCP мы можем иметь дополнительное преимущество, каждое сообщение заканчивается символом ‘n’. Написание синхронного эхо сервер/клиента очень просто.
Мы приведем примеры программ таких как синхронный клиент, синхронный сервер, асинхронный клиент и асинхронный сервер.

TCP синхронный клиент

В большинстве нетривиальных примеров обычно код клиента гораздо проще, чем сервера (так как сервер должен иметь дело с несколькими клиентами).
Следующий пример это исключение из правил:

ip::tcp::endpoint ep( ip::address::from_string(«127.0.0.1»), 8001); size_t read_complete(char * buf, const error_code if ( err) return 0; bool found = std::find(buf, buf + bytes, ‘n’) < buf + bytes; // we read one-by-one until we get to enter, no buffering return found ? 0 : 1; >void sync_echo(std::string msg) < msg += «n»; ip::tcp::socket sock(service); sock.connect(ep); sock.write_some(buffer(msg)); char buf[1024]; int bytes = read(sock, buffer(buf), boost::bind(read_complete,buf,_1,_2)); std::string copy(buf, bytes — 1); msg = msg.substr(0, msg.size() — 1); std::cout int main(int argc, char* argv[]) < char* messages[] = < «John says hi», «so does James», «Lucy just got home», «Boost.Asio is Fun!», 0 >; boost::thread_group threads; for ( char ** message = messages; *message; ++message) < threads.create_thread( boost::bind(sync_echo, *message)); boost::this_thread::sleep( boost::posix_time::millisec(100)); >threads.join_all(); >

Обратите внимание на функцию sync_echo . Она содержит всю логику для подключения к серверу, отправляет ему сообщение и ждет обратного ответа.
Вы заметили, что для чтения мы используем свободную функцию read() , потому что мы хотим получать сообщение все целиком до символа ‘n’. Функции sock.read_some() будет недостаточно, так как она будет читать только то, что доступно, но совсем не обязательно все сообщение целиком.
Третий аргумент функции read() это завершающий обработчик. Она вернет 0, если сообщение прочитано полностью. В противном случае возвращается максимальный размер буфера, которые может быть прочитан на следующем шаге (до завершения read ). В нашем случае всегда будет возвращаться 1, потому что мы не хотим ошибочно читать больше чем нам необходимо.
В main() мы создаем несколько потоков; по одному потоку для каждого сообщения, которое отправляет клиент, и ждем, пока они завершатся. Если вы запустите программу, то увидите следующий вывод:

Читайте также:
Программа на неделю что на этой недели будет идти по всем каналам

server echoed our John says hi: OK server echoed our so does James: OK server echoed our Lucy just got home: OK server echoed our Boost.Asio is Fun!: OK

Обратите внимание, что, так как мы имеем дело с синхронным клиентом, то нет никакой необходимости вызывать service.run() .

TCP синхронный сервер

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

io_service service; size_t read_complete(char * buff, const error_code if ( err) return 0; bool found = std::find(buff, buff + bytes, ‘n’) < buff + bytes; // we read one-by-one until we get to enter, no buffering return found ? 0 : 1; >void handle_connections() < ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(),8001)); char buff[1024]; while ( true) < ip::tcp::socket sock(service); acceptor.accept(sock); int bytes = read(sock, buffer(buff), boost::bind(read_complete,buff,_1,_2)); std::string msg(buff, bytes); sock.write_some(buffer(msg)); sock.close(); >> int main(int argc, char* argv[])

Вся логика сервера заключена в handle_connections() . Поскольку он однопоточный, то мы принимаем нового клиента, читаем сообщение, которое он прислал, посылаем его обратно, а затем ждем следующего клиента. Скажем, если подключаться сразу два клиента, то второму придется ждать, пока сервер обслуживает первого клиента.
Еще раз обратите внимание, что, так как мы работаем синхронно, то нет никакой необходимости вызывать service.run() .

TCP асинхронный клиент

Как только мы начинаем работать асинхронно, код становится немного сложнее. Мы будем моделировать класс connection , как показано во второй главе.
Глядя на следующие фрагменты кода в этом разделе, вы заметите, что каждая асинхронная операция запускает новую асинхронную операцию, сохраняя service.run() в работе.
Первое, основные функции:

#define MEM_FN(x) boost::bind(self_type::x, shared_from_this(),y) #define MEM_FN2(x,y,z) boost::bind( typedef talk_to_svr self_type; talk_to_svr(const std::string >void start(ip::tcp::endpoint ep) < sock_.async_connect(ep, MEM_FN1(on_connect,_1)); >public: typedef boost::system::error_code error_code; typedef boost::shared_ptr ptr; static ptr start(ip::tcp::endpoint ep, const std::string ptr new_(new talk_to_svr(message)); new_->start(ep); return new_; > void stop() < if ( !started_) return; started_ = false; sock_.close(); >bool started() < return started_; >. private: ip::tcp::socket sock_; enum < max_msg = 1024 >; char read_buffer_[max_msg]; char write_buffer_[max_msg]; bool started_; std::string message_; >;

Мы хотим всегда использовать shared pointers на talk_to_svr , для того чтобы пока есть асинхронные операции в экземпляре talk_to_svr , этот экземпляр оставался жив. Для того чтобы избежать таких ошибок как создание экземпляров talk_to_svr в стеке, мы сделали конструктор приватным и запретили конструктор копирования (наследовались от boost::noncopyable ).
У нас есть основные функции, такие как start(), stop() , и started() , которые делают только то, о чем говорят их названия. Для создания соединения просто вызовите talk_to_svr::start(endpoint, message) . Так же у нас имеются буферы для чтения и записи ( read_buffer_ и write_buffer_ ).
Как объяснялось ранее, следующие строки сильно отличаются:

// equivalent to «sock_.async_connect(ep, MEM_FN1(on_connect,_1));» sock_.async_connect(ep, boost::bind( sock_.async_connect(ep, boost::bind(

В первом случае мы правильно создаем завершающий обработчик async_connect , он будет сохранять shared pointer на экземпляр talk_to_server пока он не вызовет завершающий обработчик, тем самым, убедившись, что мы все еще живы, когда это произойдет.
В последнем случае мы неправильно создаем завершающий обработчик. К тому времени, когда вызывается экземпляр talk_to_server , он может быть уже удален!
Для чтения и записи в сокет мы будем использовать следующий фрагмент кода:

void do_read() < async_read(sock_, buffer(read_buffer_), MEM_FN2(read_complete,_1,_2), MEM_FN2(on_read,_1,_2)); >void do_write(const std::string if ( !started() ) return; std::copy(msg.begin(), msg.end(), write_buffer_); sock_.async_write_some( buffer(write_buffer_, msg.size()), MEM_FN2(on_write,_1,_2)); >size_t read_complete(const boost::system::error_code // similar to the one shown in TCP Synchronous Client >

Функция do_read() сначала убеждается, что мы читаем сообщение от сервера, после чего вызывается on_read() . Функция do_write() сначала копирует сообщение в буфер (имеет место вероятность того, что msg может выйти за область видимости и со временем разрушится), а затем убеждается в том, что вызов on_write() происходит после реальной записи.
И наиболее важные функции, которые содержат основную логику класса:

void on_connect(const error_code if ( !err) do_write(message_ + «n»); else stop(); >void on_read(const error_code if ( !err) < std::string copy(read_buffer_, bytes — 1); std::cout stop(); > void on_write(const error_code ip::tcp::endpoint ep( ip::address::from_string(«127.0.0.1»), 8001); char* messages[] = < «John says hi», «so does James», «Lucy got home», 0 >; for ( char ** message = messages; *message; ++message) < talk_to_svr::start( ep, *message); boost::this_thread::sleep( boost::posix_time::millisec(100)); >service.run(); >

В предыдущем фрагменте кода будет генерироваться следующий код:

server echoed our John says hi: OK server echoed our so does James: OK server echoed our Lucy just got home: OK

TCP асинхронный сервер

Как показано ниже, основные функции очень похожи на функции асинхронного клиента:

class talk_to_client : public boost::enable_shared_from_this, boost::noncopyable < typedef talk_to_client self_type; talk_to_client() : sock_(service), started_(false) <>public: typedef boost::system::error_code error_code; typedef boost::shared_ptr ptr; void start() < started_ = true; do_read(); >static ptr new_() < ptr new_(new talk_to_client); return new_; >void stop() < if ( !started_) return; started_ = false; vsock_.close(); >ip::tcp::socket return sock_;>. private: ip::tcp::socket sock_; enum < max_msg = 1024 >; char read_buffer_[max_msg]; char write_buffer_[max_msg]; bool started_; >;

Читайте также:
Программа рр что это такое

Это очень простой эхо-сервер, нет никакой необходимости в функции is_started() . Для каждого клиента мы просто читаем сообщение, которое он прислал, посылаем это же сообщение обратно и закрываем соединение.
Функции do_read(), do_write() и read_complete() точно такие же как в асинхронном TCP клиенте.
Основная логика класса заключена в функциях on_read() и on_write() :

void on_read(const error_code if ( !err) < std::string msg(read_buffer_, bytes); do_write(msg + «n»); >stop(); > void on_write(const error_code void handle_accept(talk_to_client::ptr client, const error_code client->start(); talk_to_client::ptr new_client = talk_to_client::new_(); acceptor.async_accept(new_client->sock(), boost::bind(handle_accept,new_client,_1)); > int main(int argc, char* argv[]) < talk_to_client::ptr client = talk_to_client::new_(); acceptor.async_accept(client->sock(), boost::bind(handle_accept,client,_1)); service.run(); >

Каждый раз, когда клиент подключается к серверу, вызывается handle_accep t, который начинает асинхронно читать от этого клиента, а так же асинхронно ждет нового клиента.

UDP эхо сервер/клиент

Поскольку в UDP не все сообщения доходят до получателя, то у нас нет гарантии, что сообщение пришло полностью. Так как мы работаем по UDP, то каждое сообщение, которое мы получаем, мы просто выводим, не закрывая сокет (на стороне сервера).

UDP синхронный эхо клиент

UDP эхо-клиент немного проще, чем TCP эхо-клиент:

ip::udp::endpoint ep( ip::address::from_string(«127.0.0.1»), 8001); void sync_echo(std::string msg) < ip::udp::socket sock(service, ip::udp::endpoint(ip::udp::v4(), 0) ); sock.send_to(buffer(msg), ep); char buff[1024]; ip::udp::endpoint sender_ep; int bytes = sock.receive_from(buffer(buff), sender_ep); std::string copy(buff, bytes); std::cout int main(int argc, char* argv[]) < char* messages[] = < «John says hi», «so does James», «Lucy got home», 0 >; boost::thread_group threads; for ( char ** message = messages; *message; ++message) < threads.create_thread( boost::bind(sync_echo, *message)); boost::this_thread::sleep( boost::posix_time::millisec(100)); >threads.join_all(); >

Вся логика заключена в функции synch_echo() ; подключение к серверу, отправка сообщения, получение ответного сообщения от сервера и закрытие соединения.

UDP синхронный эхо-сервер

UDP эхо-сервер это самый простой сервер, который только можно написать:

io_service service; void handle_connections() < char buff[1024]; ip::udp::socket sock(service, ip::udp::endpoint(ip::udp::v4(), 8001)); while ( true) < ip::udp::endpoint sender_ep; int bytes = sock.receive_from(buffer(buff), sender_ep); std::string msg(buff, bytes); sock.send_to(buffer(msg), sender_ep); >> int main(int argc, char* argv[])

Здесь все очень просто и говорит само за себя.
Оставим написание асинхронных UDP сервера и клиента читателю в качестве упражнения.

Резюме

Мы написали несколько приложений и, наконец, приступили к работе с Boost.Asio. Эти приложения очень хороши для начала работы с этой библиотекой.
В следующей главе мы будем создавать более сложные клиент/серверные приложения, будем учиться избегать таких ошибок как утечка памяти, дедлоки и так далее.

Всем большое спасибо!

Ресурсы к этой статье: ссылка

Источник: habr.com

Эхо online

Приложение «Эха» — круглосуточный прямой аудиоэфир с программами ведущих радио «Эхо Москвы».

Слушайте каждый день программы ваших любимых ведущих, как на старом добром «Эхе», и обязательно расскажите о приложении родным и друзьям.

Последнее обновление
26 окт. 2022 г.
Новости и журналы

Безопасность данных

arrow_forward

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

Данные не передаются третьим сторонам.
Подробнее о том, как разработчики заявляют о передаче данных…
Это приложение может собирать указанные типы данных.

История действий в приложении, Сведения о приложении и его производительности и Идентификаторы устройства или другие идентификаторы

Данные шифруются при передаче.
Удалить данные невозможно.

Оценки и отзывы

arrow_forward
1,2 тыс. отзыва
Елена «Лето» Миллер
more_vert

  • Пожаловаться

22 ноября 2022 г.

Пожалуйста, сделайте возможность переноса приложения на карту памяти. Разработчики, неужели вы вообще не помните о лимитах внутренней памяти устройств? В наше время писать приложения, которые ставятся исключительно в память устройства, уже как-то даже неприлично. И очень жаль, что работает нестабильно.

Не знаю, у всех ли так, но у меня, как только гаснет экран, в тот же момент перестаёт идти вещание. Не знаю, с чем связано, но ужасно досадно. Хочу слушать Эхо, но пока получается не очень.

15 человек отметили этот отзыв как полезный.
Вам помогла эта информация?
more_vert

  • Пожаловаться
  • Показать историю отзывов

23 ноября 2022 г.

Приложение хорошо работает без VPN, звук не очень качественный, но слушать можно — а это в современной ситуации самое главное и самое ценное. Ещё программу трудно совсем выключить, она постоянно висит в фоне. И очень хотелось бы получить возможность установить местоположение и видеть время программ по местному времени. В любом случае разработчикам большое спасибо за старое доброе радио!

6 человек отметили этот отзыв как полезный.
Вам помогла эта информация?
Inna Zaboucheva
more_vert

  • Пожаловаться

27 ноября 2022 г.

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

Сайт Эхо, на который приложение перебрасывает по любому поводу — что само по себе ненормально, ибо для чего мне тогда приложение? — сайт всего лишь предлагает Ютуб записи прошлых передач. А зачем мне они на сайте, если есть Ютуб! В общем, идея пока очень сырая, жаль.

Источник: play.google.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru