LINUX.ORG.RU

Сообщения gobot

 

Как определить сколько сервер передал байтов в месяц

Форум — Admin

Нужна инфа о том, сколько сервер отдал\принял байтов за месяц. Есть статистика Zabbix, но там данные собираолись только по скорости (bits per sec), а вот в абсолютных величинах нет. Где бы мне взять из ifconfig строки (RX bytes, TX bytes), с датой месяц назад? В логах может каких или из /proc? Или не реал уже?

 ,

gobot
()

Аренда сервер в рф. Отказ от европы

Форум — Admin

Подскажите где найти сервер в рф по нормальной цене. Основное требование безлим скорость 1gbps, на крайняк можно 500mbps. Пока что нашел 100mbps безлим и 1gbps, но там 30 терабайт лимит в мес. потом 200р за каждый тер. Выходит от 30 000р. в моей конфигурации, самой простецкой. Это очень дорого. Сейчас арендую в европе, там безлим гигабит. Выходит 50-80 евро, но вот настала полная ж%%%па с оплатой. Сервер невозможно продлить с картой рф, paypal тоже не работает. Оформлять карту в европе? А как ее пополнять - тоже не понятно.

Может в китае есть какая аренда, кто в курсе?

 , ,

gobot
()

Браузер не открывает больше 6 соединений

Форум — Admin

Пробую делать HTTPS GET запрос на сервер, асинхронно, сразу 10. Соединение бесконечное, качается mp4 файл бесконечно. Браузер открывает 6 соединений, а остальные 4 находятся в состоянии pending. Если открыть окно браузера в режиме инкогнито или запустить другой браузер (проверял в Chrome|Opera|FF) и там открыть ещё 10 соединений, то откроются также только 6. Если открыать просто новую вкладку, то ни откроется ни одно соединение, т.к. в соседней вкладке уже висят эти 6 соединений. Если закрыть активное соединение, то откроется соединение, которое было в состоянии pending.

Проверял через скрипт node, там все нормально, хоть 20 хоть 30 одновременно открывается

В логах nginx все чисто, вижу только 6 соединений (ну когда завершаются их видно в access.log со статусом 200). Остальные соединения нигде не регистрируются, ни в error.log ни в access.log, нигде их не видно.

Потом начал tcpdump смотреть на предмет SYN

tcpdump -i eth0 -n tcp and port 443 and src my_remote_ip and "tcp[tcpflags] & (tcp-syn) != 0"


вижу только 4 SYN от браузера. Если запустить 20 конектов через node, то вижу все 20 SYN. Похоже на то, что браузер использует keep-alive.

Отключил я keep-alive в nginx

keepalive_timeout 0;

Теперь в отвере от сервера заголовок Connection: close. Не помогло!
В iptables нет никаких ограничений

Конфиг nginx

user gobot;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
  worker_connections 768;
}

http {
	server_tokens off;
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 0;
	types_hash_max_size 2048;  
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	#cache off
	add_header Last-Modified $date_gmt;
	add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
	if_modified_since off;
	expires off;
	etag off;

	gzip on;
	gzip_disable "msie6";
}



Походу это ограничение в браузерах. Хм, даже не знал
https://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a...

Чепуха какая то!

 ,

gobot
()

Connection timeout

Форум — Development

Как установить timeout(open, connect, read, write, любой) при открытии «файла» в ffmpeg?

тут указано, что

rw_timeout Timeout for IO operations (in microseconds)

В самом rtmp есть timeout, но он влияет только на listen

Перепробовал все параметры уже

const char *in_filename  = "rtmp://8.8.82.8:1939/live/app";
AVDictionary* options = NULL;

//av_dict_set(&options, "stimeout", "1", 0);
//av_dict_set(&options, "open_timeout", "1", 0);
//av_dict_set(&options, "timeout", "1", 0);
av_dict_set(&options, "rw_timeout", "1", NULL);

ret = avio_open2(&ifmt_ctx, in_filename, AVIO_FLAG_WRITE, NULL, &options);


Отрубается с ошибкой через 5 сек. Хотелось бы как то повлиять на
это время

[tcp @ 006AB400] Connection to tcp://8.8.82.8:1939 failed: Error number -138 occurred
[rtmp @ 006AAF00] Cannot open connection tcp://8.8.82.8:1939

 , ,

gobot
()

segmentation fault

Форум — Development

Отлаживаю баг в одном проекте, часть которого на писана на С++. Проблема в segmentation fault(SIGSEGV), программа падает. Где падает я узнал

Вот тут, после этого вызова

m_listener->onClose(m_id) //Listener* m_listener


m_listener это virtual метод класса.
class Listener {
public:
	virtual void onData(uint32_t id, TransportData data) = 0;
	virtual void onClose(uint32_t id) = 0;
};




Сам объект класса TransportSession, в котором падает, создается через

m_session = std::make_shared<TransportSession>(0, m_service, std::move(m_socket), this);


Какие могут быть вообще причины возникновения segmentation fault? Удалилась ссылка на m_listener? Проверить указатель как я читал, в С++ никак не возможно.
Делал
if(m_listener != NULL)
if(m_listener != nullprt)

бесполезно

 ,

gobot
()

Запуск node скрипта

Форум — Development

Хочу запустить node скрипт

Есть некий проект

/app1/index.js
/app2/index.js
/app3/index.js

index.js - одинаковый во всех директориях. Хочу вынести его в /share/index.js

Далее прописываю в package.json

"main": "../share/index.js"


Потом пытаюсь запустить
cd /app1/
node .


Запускается /share/index.js но с ошибкой Cannot find module ...
Модуль этот находится в /app1/node_modules.

Как запустить скрипт /share/index.js но чтобы он думал что запускается в папке /app1/ ?

И ещё... Если нет в папке /app1/ded.js то файл ищется в /share/
Тобишь какое то наследование нужно на уровне ФС

 

gobot
()

Connection reset by peer

Форум — Admin

Клиент сбрасывает соединение, посылая tcp Reset (установил это документально, использую tcpdump). Происходит это рэндомно. Раньше закрывал на это глаза, но сейчас уже достало, невозможно работать. Приходится восстанавливать заново все ssh сеансы.


  • Иногда сбрасывается одно соединение через час
  • Иногда через минуту
  • Иногда сбрасываются все соединения одновременно



В sshd установил LogLevel DEBUG:

Read error from remote host x.x.x.x port 36101: Connection reset by peer


Последние пакеты из рваной сессии:
02:20:39.919377 IP server.2223 > client:31700: Flags [.], ack 135397, win 1392, length 0
02:20:42.925453 IP client:31700 > server.2223: Flags [P.], seq 135397:135445, ack 180856, win 16698, length 48
02:20:42.925460 IP server.2223 > client:31700: Flags [.], ack 135445, win 1392, length 0
02:20:45.962412 IP client:31700 > server.2223: Flags [P.], seq 135445:135493, ack 180856, win 16698, length 48
02:20:45.962427 IP server.2223 > client:31700: Flags [.], ack 135493, win 1392, length 0
02:20:48.938635 IP client:31700 > server.2223: Flags [P.], seq 135493:135541, ack 180856, win 16698, length 48
02:20:48.938642 IP server.2223 > client:31700: Flags [.], ack 135541, win 1392, length 0
02:20:51.940647 IP client:31700 > server.2223: Flags [P.], seq 135541:135589, ack 180856, win 16698, length 48
02:20:51.940673 IP server.2223 > client:31700: Flags [.], ack 135589, win 1392, length 0
02:20:54.948644 IP client:31700 > server.2223: Flags [P.], seq 135589:135637, ack 180856, win 16698, length 48
02:20:54.948652 IP server.2223 > client:31700: Flags [.], ack 135637, win 1392, length 0
02:20:57.959927 IP client:31700 > server.2223: Flags [P.], seq 135637:135685, ack 180856, win 16698, length 48
02:20:57.959936 IP server.2223 > client:31700: Flags [.], ack 135685, win 1392, length 0
02:20:58.711937 IP client:31700 > server.2223: Flags [P.], seq 135685:136853, ack 180856, win 16698, length 1168
02:20:58.711946 IP server.2223 > client:31700: Flags [.], ack 136853, win 1391, length 0
02:20:58.712115 IP server.2223 > client:31700: Flags [P.], seq 180856:181976, ack 136853, win 1392, length 1120
02:20:58.838897 IP client:31700 > server.2223: Flags [P.], seq 136853:136933, ack 181976, win 16418, length 80
02:20:58.844690 IP server.2223 > client:31700: Flags [P.], seq 181976:182680, ack 136933, win 1392, length 704
02:20:58.968907 IP client:31700 > server.2223: Flags [P.], seq 136933:136981, ack 182680, win 16698, length 48
02:20:59.012268 IP server.2223 > client:31700: Flags [.], ack 136981, win 1392, length 0
02:21:00.970903 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:00.970915 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, length 0
02:21:01.467905 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:01.467918 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, options [nop,nop,sack 1 {136981:137029}], length 0
02:21:02.067906 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:02.067913 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, options [nop,nop,sack 1 {136981:137029}], length 0
02:21:03.269909 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:03.269919 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, options [nop,nop,sack 1 {136981:137029}], length 0
02:21:03.981905 IP client:31700 > server.2223: Flags [P.], seq 137029:137077, ack 182680, win 16698, length 48
02:21:03.981912 IP server.2223 > client:31700: Flags [.], ack 137077, win 1392, length 0
02:21:05.670937 IP client:31700 > server.2223: Flags [P.], seq 136981:137077, ack 182680, win 16698, length 96
02:21:05.670950 IP server.2223 > client:31700: Flags [.], ack 137077, win 1392, options [nop,nop,sack 1 {136981:137077}], length 0
02:21:06.994905 IP client:31700 > server.2223: Flags [P.], seq 137077:137125, ack 182680, win 16698, length 48
02:21:06.994913 IP server.2223 > client:31700: Flags [.], ack 137125, win 1392, length 0
02:21:10.004338 IP client:31700 > server.2223: Flags [P.], seq 137125:137173, ack 182680, win 16698, length 48
02:21:10.004344 IP server.2223 > client:31700: Flags [.], ack 137173, win 1392, length 0
02:21:10.468176 IP client:31700 > server.2223: Flags [P.], seq 136981:137173, ack 182680, win 16698, length 192
02:21:10.468189 IP server.2223 > client:31700: Flags [.], ack 137173, win 1392, options [nop,nop,sack 1 {136981:137173}], length 0
02:21:13.014188 IP client:31700 > server.2223: Flags [P.], seq 137173:137221, ack 182680, win 16698, length 48
02:21:13.014194 IP server.2223 > client:31700: Flags [.], ack 137221, win 1392, length 0
02:21:16.026168 IP client:31700 > server.2223: Flags [P.], seq 137221:137269, ack 182680, win 16698, length 48
02:21:16.026174 IP server.2223 > client:31700: Flags [.], ack 137269, win 1392, length 0
02:21:19.121415 IP client:31700 > server.2223: Flags [P.], seq 137269:137317, ack 182680, win 16698, length 48
02:21:19.121421 IP server.2223 > client:31700: Flags [.], ack 137317, win 1392, length 0
02:21:20.063427 IP client:31700 > server.2223: Flags [R.], seq 137317, ack 182680, win 0, length 0


Конфиг(что менял)
Port 2223
ClientAliveInterval 15
ClientAliveCountMax 3
LogLevel DEBUG
PermitRootLogin yes


Параметры ClientAliveInterval и ClientAliveCountMax никак не влияют, продобовал и по умолчанию и так - бесполезно

На PuTTY установлена посылка пакетов keepalive через каждые 3 сек. Установлены галки TCP_NODELAY & TCP_KEEPALIVE

Ничего не понимаю. Соединение рвется на всех серверах. Использую роутер Asus RT-N11P, соединение обычное через провод (DHCP), оптика через PPPoE. Никаких брандмауров, НАТов и прочих хитростей не настраивал.

Клиент: Windows 7, Putty
Сервер: Debian 9 ну и остальные тоже Debian

Как понять кто и зачем посылает RST пакет? Грешить на провайдера возможно?

Похожая проблема https://superuser.com/questions/294824/putty-network-error-software-caused-co...
Но там retransmissions пакеты какие-то

 , , , ,

gobot
()

Как перехватывать все сообщения

Форум — Development

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

Может ли RabbitMQ такое сделать: приходит сообщение в очередь, он берет его и отправляет целевому потребителю и ещё моему потребителю. Вот как его заставить это сделать?

Использую nodejs c либой amqplib, сервер RabbitMQ на Ubuntu...

 ,

gobot
()

Не импортируется класс

Форум — Development

Хочу сделать авторизацию через Facebook в своем приложении (java).

Делаю все по инструкции https://github.com/facebook/facebook-android-sdk


import com.facebook.login.LoginManager;
...

LoginManager.getInstance().registerCallback(CallbackManager.Factory.create())

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));


проблема в том, что Android Studio не видит com.facebook.CallbackManager, и вообще все что находится тут https://github.com/facebook/facebook-android-sdk/tree/main/facebook-core/src/...

В зависимости gradle добавил целиком весь SDK
implementation 'com.facebook.android:facebook-android-sdk:12.2.0'

Во всех их примерах используется CallbackManager, например тут

Возможно потому что там kotlin? Хотя в их примере тоже используется java...

В чем может быть причина?

 , , , ,

gobot
()

Разделитель x0 x0 x0 x1 NAL units

Форум — Development

Ковыряю h264 bitstream, в частности разделитель (start code) границы NAL unit. Никогда не копался в этих битах и байтах, но нужно доковырять кодировщик
Везде пишут (например ), что разделитель, стартовый код (start code), от которого начинается последовательность NAL блоков(units?) это

1 байт - 00000000
2 байт - 00000000
3 байт - 00000000
4 байт - 00000001

Ну или 3 байта бывает, но последний 00000001 должен.
Смотрю потом hex редактором сохраненный поток h264 (в FLV формате)

0000 00 00 00 0E 67 42 C0 29 8C 8D 40 5E 1A 90 0F 08
0010 84 6A 00 00 00 04 68 CE 3C 80 00 00 36 E1 65 B8
0020 00 03 00 00 03 01 0F FF F8 70 B4 50 00 21 7E F8
0030 E0 0C 73 08 7A FF FE 4E 10 CE BF FF F7 08 65 51


и вижу что верно, первые 3 байта - нулевые, а четвертый вовсе не 1 (как предпологалось), а некое другое число (x0E), который указывает длинну NAL unit"a (это я понял эксперементально и вроде это так, если отсчитать от него 14 байтов, то мы перейдем к следующему NAL - PPS), дальше, после x0E уже идет заголовок NAL (x67 - 01100111 - его заголовок, который указывает что NAL ref -3 (биты 11) и NAL type - 7 (SPS) (биты 00111)), дальше идет другой NAL блок - PPS (начитается от x68, 01101000 - тут 11 - 3 (NAL ref) и 01000 - 8 (код PPS)). Три байта нули...

Дальше идет сам IDR (x65 - 01100101 - 00101 - 5 (IDR nal)), тут уже разделитель 2 нулевых байта...

Не понятно с разделителями и не понятно где укзано про длинну.

Также заметил, что мой кодировщик(MediaCodec android) правильно ставит стартовые коды, а именно
00000000
00000000
00000000
00000001

но потом в коде эти коды вырезаются и вместо них устанавливаюся новые, тоже 4 байта
0
0
0
последний байт это длинна NAL блока

Тут тогда понятно, откуда берутся такие разделители. Но не понятно почему ставят длинну, а не просто 00000001 в конце

Может кто знает про разделители?

 , , ,

gobot
()

Изменение параметров кодирования(разрешения) на лету

Форум — Development

Я делаю приложение для Android, которое передает в реальном времени видео и звук по протоколу RTMP. Для этого я захватываю звук и камеру и отправляю их буферы по кусочкам в MediaCodec для кодирования, далее оформляю все это в FLV пакеты и отправляю в созданный RTMP-поток.

Все хорошо работает, за исключением следующего: если на «лету» изменять параметры кодирования, в моем случае это разрешение, то мне приходится переконфигурировать этот самый MediaCodec

public void reconfigure(){

    //сначала останавливаю кодировщик
    vencoder.stop();
    vencoder.release();
    vencoder = null;

    //затем создаю новый, в настройках меняю только разрешение
    vencoder = MediaCodec.createByCodecName("OMX.MTK.VIDEO.ENCODER.AVC"); //MediaCodec
    MediaFormat videoFormat = MediaFormat.createVideoFormat("video/avc", 640, 480);
    videoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, 21);
    videoFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);
    videoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 1200 * 1024);
    videoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 24);
    videoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2);
    vencoder.configure(videoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    vencoder.start()
}


и продолжаю в этом же Thread, кодирование. Далее кодировщик отправляет новый SPS (nal_unit_type = 7) в поток и ключевой кадр(nal_unit_type = 5, IDR). Кодирование продолжается, но плееры «падают» в этот момент, либо идет только звук, а видео нет. С временными метками(DTS, PTS) все нормально, они продолжают увеличиваться. Единственный плеер который корректно производит поток это ffplay, этот мамонт все сжирает.

Ссылка на исходник, где идет кодирование видео https://github.com/begeekmyfriend/yasea/blob/f118e6e1c30460215dde6de37a899c29...

В чем может быть дело?


UDP: если передавать только видео, то проблемы со сменой разрешения нет

UDP2:
FFMPEG выдает ошибку на переходном AAC фрейме (с которого все начинает глючить)
Input buffer exhausted before END element found

В исходниках это
https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/aacdec_template.c#L3382

и ещё в логах появляется
stereo with SCE

Похоже не нравится малый размер AAC пакета, что-ли

≈=======
Решил проблему так:

Останавливаю видео-кодировщик не сразу, а после того, когода он отправит все predicted (P) фреймы, которые начинаются от Intra. Теперь Хром и ФФ проглатывают это и видео, меняют разрешение и не останавливаются.
Аудио-кодировщик не перезапускаю

Не понимаю до сих пор почему это помогло. После перезапуска ведь отправляется sps, pps и idr пакет. Там вся инфа содержится. Кодеку нужно лишь переконфигурироваться. Как влияют P фоеймы?

И еще, если декодировать в ффмпег h264_qsv, то видео все равно зависает. С чем связано пока не понял.


UDP. Нашел проблему. В начале потока отсылался только AVC SequenceHeader(в FLV type=0), в последущем отсылался также он, что не правильно: игнорировался FLV-демультиплексором и не обрабатывался h264 декодером. Нужно в середине потока посылать NAL unit(в FLV type=1)

 , , , ,

gobot
()

Миллионы смартфонов и компьютеров лишат доступа к интернету

Форум — Admin

https://lenta.ru/news/2021/09/29/connection/

Что делать?
Проблема сейчас есть. Сервер - linux debian

ERROR: The certificate of ‘xxx.com’ is not trusted.
ERROR: The certificate of ‘xxx.com’ has expired.

 ,

gobot
()

jcenter накрылся

Форум — Development

Сидел тут, потихоньку кодил в Android Studio, потом заметил что при сборке gradle долго какой-то maven-metadata.xml скачивает и завершается с ошибкой read timeot. Погуглил, узнал, про репозитории, где хранятся java проекты.

Вообщем оказывается что jcenter признали устаревшим и рекомендуют переходить на Maven Central.

Ну, хорошо, подумал я, делов то, нужно ведь просто добавить mavenCentral в gradle конфиг и убрать jcenter

allprojects {
    repositories {

        //jcenter()
        google()
        mavenCentral()



    }
}


Добавил, все хорошо, в целом, но у меня есть некоторые пакеты, которые находятся только в jcenter и нигде больше их нет. Это, например, exoplayer, который имеет зависимость rtmp-client, которая есть только в jcenter. Иду в github в Issues, нахожу там где пишут что сие нужно переносить из jcenter, на что был ответ

I see. Thank you.
I think we definitely add the lib to the maven repo or somewhere.

Типа да это круто, мы когда-нибудь добавим нашу библиотеку в репозиторий maven или еще куда-нибудь, но пока ее нигде нет кроме как в jcenter. Как выяснилось, не добавили.

Потом искал эти пакеты на https://mvnrepository.com/ это вроде как агрегатор репозиториев. Добавлял репы, но ни к чему это не приводило, либо репа выдавала 404, либо 500, либо 403 ошибку.

В общем, у меня есть проект в Android Studio, жил он с этими зависимостями около 3 лет

android {
  dependencies {
    implementation 'com.google.mlkit:barcode-scanning:17.0.0'
    implementation "androidx.camera:camera-camera2:1.0.1"    
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'

    implementation 'com.google.android.exoplayer:exoplayer:2.15.0'
    ...
  }
}


который собирался, запускался и работал. Сейчас я его не могу запустить, потому что не работает какой то там jcenter. Получается никто за это не отвечает, я пользовался этим на свой страх и риск? Я ничего не понимаю

 , , , ,

gobot
()

как ffmpeg отрубаться когда нет данных на входе

Форум — Development

Здравствуйте!
Никак не могу подобрать волшебный ключик к этой программе.
Есть сразу два вопроса из одной оперы.

1. Проблема вот в чем: записываю видео по протоколу rtmp в контейнер mp4 (но не суть). Все отлично, если бы ffmpeg после завершения стрима отрубался и завершал муксирование контейнера. Но он ждет чего то. Ключиком к отрубанию должна быть команда rtmp протокола NetStream.Unpublish. Он ее либо не видит, либо не знает про нее, либо знает но молчит. Т.е. ffmpeg переходит в вечную паузу, надеясь что поток продолжится когда либо. Также происходит со стартом, если стрим ещё не запущен, ffmpeg будет ждать его начала, тоже бесконечно.

Пробовал

-abort_on empty_output empty_output_stream
-muxdelay 1
-muxpreload 1

не подошло

Да, начал конечно программно шаманить, запускал ffmpeg через php скрипт и там уже мониторил. Проперял изменение в размере записанного файла, если размер 5 раз не меняется, то я считаю что запись завершена

2. Как корректно убивать ffmpeg? Ок, когда он в так сказать активной работе то убивается хорошо и INT и TERM сигналами с первого раза (Exiting normally, received signal 2.). Когда он в «вечной паузе», то первое послание сигнала INT (или TERM не важно) - никакой реакции, второй посыл такого же сигнала - убивается как Terminated, то есть не корректно. Поэтому не записывает атом в конец mp4 контейнера и файл не читабется. Почему со второго раза убивается и почему аварийно terminated?

 

gobot
()

Парсер смайликов

Форум — Web-development

Есть html

Hello :smile: <strong>world</strong>


Нужно заменить в нем :smile: на <img src=«/i/smile.gif»/>, но также убрать все пользовательские теги
В итоге должен получиться следующий html
Hello <img src="/i/smile.gif"/> &lt;strong&gt;world&lt;/strong&gt;


Пробовал через дерективу
Vue.directive('parse-smiles', {

    bind: function (el, binding, vnode) {

    },
    inserted: function(el, binding, vnode){
        el.innerHTML = replaceCodes(el.innerHTML); //тут по регулярке заменяет коды на картинки
    }

});


Шаблон
<div v-parse-smiles="{}">{{text}}</div>


Работает, но теряется реактивность. Если к div добавить, например, v-if

 

gobot
()

Какими клавиатурами пользуетесь?

Голосования — Голосования

Предыдущий опрос.

Справочная информация.

  1. Мембранными (не ножничные) 248 (40%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. Мембранными (ножничные) 191 (31%)

    ******************************************************************************************************************************************************************************************************************************************************

  3. Механическими (коричневые свитчи) 100 (16%)

    *********************************************************************************************************************************

  4. Механическими (синие свитчи) 97 (16%)

    *****************************************************************************************************************************

  5. Экранными 72 (12%)

    ********************************************************************************************

  6. Механическими (красные свитчи) 71 (12%)

    *******************************************************************************************

  7. Свой вариант 59 (10%)

    ****************************************************************************

  8. Механическими (чёрные свитчи) 46 (8%)

    ***********************************************************

  9. Ёмкостными 15 (2%)

    *******************

  10. Проекционными 3 (0%)

    ***

Всего голосов: 902, всего проголосовавших: 613

 

gobot
()

Скорость сети на сервере

Форум — Admin

На сервере анлим 500mbps, по графикам zabbix видно что действительно скорость отдачи\загрузки бывает и 100 и 200 mbps и выше. Но стоит мне со своего компа начать загруку какого нибудь файла по http или FTP так скорость не превышает 1-2mbps (интернет
дом.ру 100mbps).

speedtest.net показывает ping 1ms, dowload 84mbps uplaod 74mbps.

На самом сервере тестил через speedtest-cli, все четко 438\417mbps

В чем затык, где узкое место?

UPD. И да, это не зависит от географической локации загрузки, жалуются на скорость все пользователи сервера

UPD2. Проверял также скачку с другого сервера по wget, скорость не прквышает 1mbps

UPD3. Когда с сервера загружаю http://ipv4.download.thinkbroadband.com/512MB.zip то скорость загрузки отличная, поднималась до 30mbps

UPD4. Проверял по FTP - скорость также маленькая, не превышает 1mbps

 , , ,

gobot
()

Клава для властелина

Форум — Development

Ищу клавиатуру. Чтобы кнопки трескали как в 90х. Были выпуклые. Чоткие, короче. К последим клавам не могу привыкнуть, они плоские. Какие модели посоветуете?

 ,

gobot
()

node 8 vs node 15

Форум — Web-development

Здравствуйте!
Приходится (в связи с переходом на webpack 5) обновить nodejs с 8 до ... более новой, но думаю до последней уж тогда 15 версии.
Пока боюсь обновлять. Подскажите, что может потенциально сломаться в моих скриптах, если до этого они 3 года работали на ноде 8? Специфицеского ничего не использовал, код довольно простой

И собственно как обновлять правильно?

# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_15.x | bash -
apt-get install -y nodejs


так?

 

gobot
()

Часть строки как html

Форум — Web-development

Здрасти
Есть vue...есть я... На этом можно было бы закончить ))

Есть шаблон, есть строка с текстом в которой есть подстрока с кодом смайлика, ну папримен :ugly:
В шаблон я разумеется хочу вставить эту строку {{mess}}. Хочу я также взять и заменить в этой строке код смайла на картинку. Вроде все тривиально, 6аписал регекс и хлоп - все. Так и есть, но вуй при вставке переменной экранизирует <img/>

Понятно, что я знаю про v-html и про вставку <component is>, но вот в чем затык, в строке могут быть другие теги(собственно это пользовательские данные) и их нужно экранировать. Но не можно экранировать мои <img>

На ум приходит только предварительно экранизировать всю строку самому (может в вуе есть функция?), потом парсить смайлы и прочее и уже готовую строку впендюривать в v-html

Может есть более лаконичный способ. Задача вроде типичная. Ну не разбивать же строку на компоненты.

Пример строки

Пнивет всем :ugly: я вася пупкин <script>alert("xss")</script>


Что хочу
Пнивет всем <img src="/ugly.gif"/> я вася пупкин &lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;


Шаблон
<strong>{{nickname}}</strong>
<div>{{mess}}</div>

 

gobot
()

RSS подписка на новые темы