SCTE-35 injection

Hi Thierry,
TSduck is an excellent contribution to the open source community and we are very much eager in exploring the possibilities. Is there any way we can inject SCTE-35 data in to a live mpegts stream?
Also is there are an option to MUX DVB subtitles using TSDuck ?
Regards,
Jackson

Hi @jacksonvm,
Correct me if I am wrong, to inject SCTE 35, you need to modify the PMT and inject Splice Information Tables (I don't want to call it SIT since DVB already defines a SIT, Selection Information Table).
There are several possible ways to inject tables:

Plugin inject which injects tables or sections from XML or binary files.
Plugin datainject which implements the DVB SimulCrypt EMMG/PDG<=>MUX protocol. This protocol is merely known for injecting EMM's. But it is a generic way to inject sections or packets. This is why it is named EMMG/PDG with PDG meaning Private Data Generator.
Plugin mux which injects, merges or muxes TS packets from a TS file.
Specialized plugins such as pmt which perform specialised transformations on a specific table.

For the transformation of the PMT, the plugin pmt already has all appropriate options to add SCTE 35-related information, mostly thanks to code contribution from @haraldjordan78. Alternatively, you may recreate a complete PMT from scratch (or starting from a captured one) in XML format and then inject or replace it in the stream using the plugin inject.
For the Splice Information Table it is a bit different. The sections change over time because of the cues and they must be synchronised with the video PTS. Again, @haraldjordan78 contributed to code in the plugin mux, adding options to help in the synchronisation of sections and video.
But here, you must create and packetise the sections separately. TSDuck is not yet able to create Splice Information Tables because there is no XML definition for it. But it is not very difficult to write code to create those tables. To packetise these sections, you may use tspacketize. Alternatively, it you can use C++, the TSDuck library provides all services to create sections, tables and packetise them.
Now, for DVB subtitles, it is completely different. Here, you probably need a real MUX. In the open source world, ffmpeg may do the job although I ran into synchronisation issues with ffmpeg creating TS files with H.264 video. Otherwise, several non-free software MUX already exist but you probably know them already.
As a final word, injecting SCTE 35 is clearly a professional application (who would like ads insertion as a hobbyist :)). Although TSDuck is robust software with more than 10 years of development behind, it has no industrial quality certification. TSDuck was primarily developed for my own needs, as a toolbox for digital TV engineers, for test, integration support, debugging, demo, PoC and other non-production activities. Using TSDuck in a production tool would be done as your own risks. I would be confident enough to use TSDuck in production to work on offline files. However, for a live real time task such as inserting SCTE 35, you would have to use TSDuck to relay the complete production TS with, in case of failure, a complete black-out. If you want to do this, that will be at your own risks.

Hi @jacksonvm (with @haraldjordan78 and @alexander-nf possibly interested).
Starting with commit 29542143cce01e2977ac3460a3d4a4d7b8c60fc7, the definition of <splice_information_table> has been completed in XML format. Consequently, SCTE 35 Splice Information Tables can now be created in XML format and compiled or packetized using TSDuck.
I am considering some spliceinject plugin to inject them in a live TS. Several points should be considered.

How to receive them. The splice information tables are typically generated at the last moment and must be received in real-time. Polling a directory for .bin and/or .xml files? Receiving UDP messages containing the binary and/or XML representation of the table?
When to inject them. For splice_inject() commands, maybe options in the plugin command to specify how many millisecond before the earliest PTS, how many times and time distance between occurrences.
What about other splice commands?

What would you suggest?
Did I miss another important point?

Hi @lelegard ,
Glad to hear from you. I havent worked on SCTE35 directly, but in the past we have built injectors to send SCTE104 to the Encoders and then the 104's are further converted in 35's and injected into the TS by the Encoders.
There are majorly 2 commands used in Splicing, one is  SPLICE immediate and the other is SPLICE  Normal.   Splice Immediate gets inserted on the nearest I frame available, where as Splice Normal works in reference to the TIME CODE supplied to the encoder. The encoder cues the SCTE 104 Splice Normal command received till the scheduled time has reached.

Dear Thierry,
Sounds great! I would have loved to implement it that way. Instead i created binary SCTE Messages as files using attached python script. This script basically Supports just exactly my usecase but not more.
SCTE35encoder.zip
Here some thoughts of mine:

How to receive them.
For Live input:
From my perspective files are the the better Option than UDP because it is easier to use. For UDP usage, i would personally prefer to drive a separate process which receives from UDP and writes to file.
From a design perspective i would probably provide REST API on a webserver which creates the XML /binary file when called, the few milliseconds Overhead should not be a Problem.
For File Input:
I guess the packet Files need to be already existing for file Input. One Problem i had to deal with in the mux plugin is that i needed to add one mux filter per spot in a break wich leads to a very lengthy commandline. As there can be one trigger per spot in a break, we end up with lots of triggers and lots of Timing Information and XML definitions.

When to inject them.
For live stream usage it might need to be able to inject the newly received file as soon as it appears. What you proposed might be limited to file Input, correct? Probably i have a thinking mistake here because in the sentence above you talk about live.
As the commandline cannot Change at runtime, i do not see an easy way to create a solution that Matches both, live and file Input. The only Thing that Comes to my mind is that one could create a Special command XML which carries all the Timing info and which is constantly updated and polled internally. For File this XML would be created up in front and carry all the Infos for the whole stream, for live, this XML would be changed with each and every trigger.

What about other splice commands
Sorry, i also just have very limited insight in what is used out there. What was needed for my last Project was splice_insert along with a time_signal and segmentation_descriptor.

Hi,
Thanks for your feedbacks. Here is what I propose:
Input sections are accepted from files and UDP. File specification wildcard, polling interval, UDP port are specified in the command line. Files and UDP datagrams can contain binary sections or XML data (easy to check, the first byte is < for XML and 0xFC for binary). No problem, all coding basic blocks are already here from other parts of TSDuck.
Sample basic options: -P spliceinject --file '/foo/bar/scte*.xml' --udp [localaddress:]port
For insertion, all splice_insert() commands with PTS values (ie. not immediate) are inserted several times, at a specified interval, starting from a negative offset from the specified PTS (or earliest PTS when in component mode).
Sample basic options: --start-offset 2000 --count 2 --interval 1000 meaning that a splice_insert() is injected for the first time 2000 ms before the PTS it contains, injected twice at an interval of 1000 ms.
By doing like this, I see no use for an XML injection command. Unless of course you want this command injected once and that command injected twice, etc. But let's keep it simple.
All other commands, immediate splice_insert() and all other commands, are inserted immediately and exactly once.
I am not sure to correctly understand the semantics of the time_signal() command. Does it provide a real-time information on the PTS clock, just like a PCR as a system clock? In that case, it requires an extremely precise synchronisation which cannot be achieved the way I describe. Or does it provide an association between a PTS value and an absolute UTC/TAI time using an associated time_descriptor()? In the latter case, there is no stringent timing constraint.

Just an additional information: The injection profile I propose for splice_insert() commands is based on what I observed on a Russian real-life stream which was provided by @alexander-nf in issue #20. Let me know if this profile is standard or not (whatever standard still means nowadays).

Just to be clear, you plan to parse all the found XML templates or binary files, get out their target PTS and use this as a base for the Offsets provided by the user, correct?
As far as i understand this would match @alexander-nf 's and my streams pretty well! I guess this covers lots of usecases already.
The only big deal i see is that all the descriptors would need to be implemented in the XML deserialisation. That seems like a whole bunch of work, so far i have not found any "complete" SCTE 35 Encoder or Decoder...

Hi,
All splice descriptors are now implemented in XML. So any form of splice information table can be ingested from XML. Note that this is part of the TSDuck's XML syntax, not the SCTE 35-defined XML syntax.
The pts_adjustment value is not relevant here. When generating and inserting splice information sections, its value is always zero. It is here to be updated by downstream equipment in case of time restamping. Quote from SCTE 35:

pts_adjustment – A 33 bit unsigned integer that appears in the clear and that shall be used by a splicing device as an offset to be added to the (sometimes) encrypted pts_time field(s) throughout this message to obtain the intended splice time(s). When this field has a zero value, then the pts_time field(s) shall be used without an offset. Normally, the creator of a cueing message will place a zero value into this field.
This adjustment value is the means by which an upstream device, which restamps pcr/pts/dts, may convey to the splicing device the means by which to convert the pts_time field of the message to a newly imposed time domain.

When a downstream equipment performs time restamping, it cannot update a splice information section in the general case because the various PTS fields are in the possibly encrypted part. The pts_adjustment field is specifically placed in the clear part so that any equipment can patch it.
That being said, I don't really understand the need for encryption here. Being a "security person" myself, I hardly understand the threat analysis model here.

Here is an analysis of the splice information section from the Russian stream in issue #20. The structure is very simple and there is no segmentation_descriptor. Here is a pair of out/in cues:
* SCTE 35 Splice Information, TID 252 (0xFC), PID 1045 (0x0415)
  Short section, total size: 50 bytes
  - Section 0:
    Protocol version: 0x00 (0)
    Encryption: none
    PTS adjustment: 0x000000000 (0)
    CW index: 0xFF (255), tier: 0xFFF (4095)
    Command type: 0x05 (SpliceInsert), size: 20 bytes
    Splice event id: 0x00000017, cancel: 0
    Out of network: yes, program splice: yes, duration set: yes, immediate: no
    Time PTS: 2,058,331,506
    Duration PTS: 0x0007B98A0 (8100000), auto return: yes
    Unique program id: 0x0001 (1), avail: 0x08 (8), avails expected: 255
    - Descriptor 0: SCTE 35 Avail (0x00, 0), 8 bytes
      Identifier: 0x43554549 ("CUEI")
      Provider id: 0x00000008
    CRC32: 0x4ADEEB3E (OK)

* SCTE 35 Splice Information, TID 252 (0xFC), PID 1045 (0x0415)
  Short section, total size: 45 bytes
  - Section 0:
    Protocol version: 0x00 (0)
    Encryption: none
    PTS adjustment: 0x000000000 (0)
    CW index: 0xFF (255), tier: 0xFFF (4095)
    Command type: 0x05 (SpliceInsert), size: 15 bytes
    Splice event id: 0x00000018, cancel: 0
    Out of network: no, program splice: yes, duration set: no, immediate: no
    Time PTS: 2,066,431,506
    Unique program id: 0x0001 (1), avail: 0x08 (8), avails expected: 255
    - Descriptor 0: SCTE 35 Avail (0x00, 0), 8 bytes
      Identifier: 0x43554549 ("CUEI")
      Provider id: 0x00000008
    CRC32: 0xD497DA82 (OK)

For a more complex workflow, could you please provide a precise scenario of injection?

Hello @jacksonvm and @haraldjordan78,
I have pushed in commit fe3fd0088af66603baa7a7e563357c392546abc9 a working version of the spliceinject plugin. See the documentation in the user's guide.
If you'd like to test it, please pull and rebuild. Your feedback would be appreciated.

Would it be possible to have somewhere an example splice XML that can be used for learning and inspiration?

In the streams repository, there is one real-life example with an extracted XML file. This file contains all splice info tables from the PID. Typically, you would send the <splice_information_table> structures one by one for injection in spliceinject'.

Thanks. I have been playing with that but knowing that that XML is in the right format is really helpful.

OK, so you just found a bug...
The message tells you (in a rather obscure way) that a <break_duration> is not allowed when the event is immediate. This is incorrect. I just checked the SCTE 35 standard and the syntax of the splice_insert() command allows this.
The fix is trivial. I just fixed it in commit 08a0af6fa7def7ba5da9f86e5f54e86c0e9ada1f and added the non-regression test in test-027.
If you want to test the fix, you may pull the current state of the repository. See here for build instructions.
Sorry for the inconvenience.

Pulling and building is easy, I already had done it. Testing that the fix works is more complicated. Right now I'm trying to feed one stream with injected SCTE-35 to my elemental, but nothing has shown up just yet. :-(

Try to analyse the output using TSDuck and check that the splice info table are here.
Also make sure that you have the right signalisation in the PMT (registration descriptor and stream type).

Yeah, I was sidetracked today by the bug and ended up reading the code and concluding that the issue was with my using the immediate mode. So I put back the original cue that actually was accepted by TSDuck, but not by my encoder. I will have to dig more to find the real issue. Your suggestions are actually quite good and I will try them as soon as I have time. Thanks.

I love this tool... but..

I started by git and compiled my copy, but then I ended up using the fedora rpm for the convenience. However now that I'm trying to use git again I found out that the rpm version installs all the shared objects plugins in /usr/bin... That's really bad. I think they should go under /usr/libexec/tsduck.
I tried using LD_LIBRARY_PATH for testing but here's is what I get:

paolo@wi-006-lx 2771> LD_LIBRARY_PATH=../../libtsduck/release-x86_64:../../tsplugins/release-x86_64 ./tsp
tsp: file.so: cannot open shared object file: No such file or directory
tsp: file.so: cannot open shared object file: No such file or directory

It looks the executable looks for file.so but the plugins is really
../../tsplugins/release-x86_64/tsplugin_file.so
I keep trying.
Now the reason for loving this tool: I tried again adding -P tables at the end of my command line and it worked, it prints the splice (I still need to find out why the encoder does not process it, but that I will check later). However I realized that the splice appeared after a long while. After thinking about it I move the  spliecinject module afer the pcrbitrate and regulate modules and voilà, splices appear in real-time.
I love this tool..

Hi,
Yes, the placement of plugins is questionable. I don't want to justify the choice, but I can explain it. I needed to address all the following cases:

Installation on Linux
Installation on macOS
Installation on Windows
Execution from make environment
Execution from Visual Studio build environment
Execution from a "portable" installation (ie. user directory, without root/admin privilege)

Each environment has its own specificities and usage rules. Each application with plugins has its own choices. I wanted something simple and reliable. It did not want a "configure"-based project with a pre-build script. So, the simplest choice was to search the plugins in the same directory as the current executable, whichever it is.
BTW, I am still waiting for a Mac user complaining that the plugin shared libraries end up in .so instead of .dylib like any other dynamic library on macOS...
Concerning running the application from the build environment, see here.
You may also install it anywhere without building the rpm or deb package (see here).
For the exact rules of plugin search, have a look at the user's guide, at the end of the reference section for tsp.
Finally, concerning your splice issue, the tuning options should be different for real-time streams and offline files. With a real-time stream, you need to reduce the latency, at the expense of a slightly increased CPU load. The tsp command and some plugins have buffer size or burst size parameters. If you reduce them, you reduce the latency. But make sure to understand what they do first. Issue #54 describes a similar issue. You solved it in another way.
And thank you for your love :)

I really really really love this program.
I have my script working fine now. I can add cue points to a file and the encoder acts accordingly.
Thanks a lot for your support.

I am pushing a 22Mbps TS to a Tandberg/Ericsson RX8200. It works mostly fine if I do this:
multicat z.ts <IP_ADDRESS>:5099
This is what I get on the Ericsson's web console:

Input Status
LOCKED 188 22.406 Mbits/s

Video Status
RUNNING 1920x1080 Interlaced 29.970Hz 4:2:0 16:9 20.465 Mbits/s

Audio 1 Status
RUNNING AAC

If I use this:
tsp --verbose -I file -i z.ts -P regulate -O ip <IP_ADDRESS>:5099 -p 128
* regulate: minimum packet burst duration is 10,000,000 nano-seconds
* file: input bitrate is 22,405,573 b/s
* regulate: regulated at bitrate 22,405,573 b/s

this is what I get instead:

Input Status
LOCKED 188  2.076 Mbits/s

Video Status
STOPPED

Audio 1 Status
STOPPED ---

And if I remove the '-p 128', it does not work at all.
I can use multicat+tsp and somehow it works, but it would be simpler if I could rely on a single tool for doing this.

Hi,
-O ip -p 128 is a bit aggressive. The resultant UDP datagrams are 24 kB long. The default, 7 TS packets per UDP datagram, is the standard value. It is the highest number of packets to get Ethernet frames shorter than 1500 bytes, the Ethernet MTU (at east without jumbo frames).
So, I would have understood the opposite, working with 7, not working with 128.
First track : network bursts on bottlenecks.
Second track : TS / UDP encapsulation.
First track: Check the network topology, from the output Ethernet port of your computer to the Ethernet input of your MUX. Is there any bottleneck, meaning moving from a higher to a lower bandwidth adapter or network segment? Example: Computer output = 1 Gb/s, MUX input: 100 Mb/s.
In that case, unregulated UDP bursts cannot pass into the bottleneck and packets are lost. Solution: reduce burst size, increase number of (smaller) bursts. Try and possibly adjust tuning values :
tsp -v \
    -I file -i z.ts --max-input-packets 128 --max-flushed-packets 128 \
    -P pcrbitrate \
    -P regulate -p 7 \
    -O ip <IP_ADDRESS>:5099 -p 7

Second track : The ip plugin does not add any encapsulation. TS packets are simply sent in UDP datagrams. It this OK with your MUX? Try a network capture using Wireshark with multicat and tsp. Compare the encapsulation.

I have to give you multiple answers, hopefully we'll be able to make some progress:

To make your example I had to move -max-input-packets 128 --max-flushed-packets 128 right after -v. Otherwise I would get an error. In the meantime I thought it could be something you had just added so I pulled the repo and recompiled, at least we are aligned..
I tried various -p values in the output starting from 7. The receivers starts locking something at -p10, but it's very unstable.
Bottleneck. I am running the multicat command on the same pc as tsp. If there was a bottleneck it should affect both in a similar way, no? (apart from the encapsulation see next.
Encapsulation. Yes, I was seeing a difference in encapsulation in wireshark between multicat and tsp.
With multicat it shows a simple list of UDP packets:

3513265<PHONE_NUMBER>25	<IP_ADDRESS>	<IP_ADDRESS>	UDP	1370	57381 → 5099 Len=1328
With tsp it shows
4004089	1018.098386624	<IP_ADDRESS>	<IP_ADDRESS>	IPv4	1514	Fragmented IP protocol (proto=UDP 17, off=11840, ID=27af) [Reassembled in #4004097]

Sorry, I did not answer your last question. Multicat has a -U switch
-U     Destination has no RTP header
Adding or removing makes no difference in behavior. I will check if it makes a difference in wireshark.

And yes, -U makes it similar to tsp:
39999	18.792447398	<IP_ADDRESS>	<IP_ADDRESS>	MPEG TS	1358	[MP2T fragment of a reassembled packet]
Still the receiver works fine in both cases.

Another suggestion: If the stream contains video in the clear, replace the MUX address with a multicast address and use VLC on another computer to read the UDP stream. Does it play correctly?

Replies:

as I wrote above, using multicat with -U and tsp makes the wireshark traces identical (at first sight) same 1358 length, same protocol.
Yes, I never had any doubt that tsp produces correct output, BUT
Data:
As I wrote above the funny thing is that if I use multicat to read the file and send it to a multicast address and then I read that with tsp and send it to the RX8200, it works quite well. This seems to point to some sort of issue in the file input plugin?

$ multicat -U z.ts <IP_ADDRESS>:5000
debug: socket definition: connect:<IP_ADDRESS>:5000

$ tsp -v \
    -I ip <IP_ADDRESS>:5000  \
    -P pcrbitrate \
    -P regulate \
    -O ip <IP_ADDRESS>:5099
* regulate: minimum packet burst duration is 10,000,000 nano-seconds
* ip: joining multicast group <IP_ADDRESS>:5000 from local address <IP_ADDRESS>
* ip: unknown input bitrate
* regulate: unknown bitrate, cannot regulate.
* pcrbitrate: new bitrate from PCR analysis: 22,405,725 b/s
* regulate: regulated at bitrate 22,405,725 b/s
* regulate: regulated at bitrate 22,405,725 b/s
* pcrbitrate: new bitrate from PCR analysis: 22,405,787 b/s
* regulate: regulated at bitrate 22,405,787 b/s
* pcrbitrate: new bitrate from PCR analysis: 22,373,919 b/s

Input Status
LOCKED 188 22.407 Mbits/s

Video Status
RUNNING 1920x1080 Interlaced 29.970Hz 4:2:0 16:9 20.465 Mbits/s

Audio 1 Status
RUNNING AAC

The input plugin file is very basic and used for years in similar scenarios. If course, a rare and subtle error is still possible but I wouldn't bet on this.
Does this work with this ?
tsp -v --max-input-packets 16 --max-flushed-packets 16 \
    -I file -i z.ts \
    -P pcrbitrate \
    -P regulate -p 7 \
    -O ip <IP_ADDRESS>:5099

Could you try the VLC test I suggested?

Hi @zuzzurro,
I too have been facing this issue a lot, But in my case i have been using FFMPEG to encode mpegts and send multicast to Ericsson Decoder. With Harmonic Decoder's it locks immediately and the signal is stable too.
My observations and suggestions are.

Try using Harmonic PIRD Proview 7100 or 8100.
Try using an old version FW on the Ericsson PIRD < 5.x ( i was able to lock on the older FW's)

@lelegard  @zuzzurro  I want to testout TSP by using FFMPEG as an ENCODER and sourcing IP INPUT to TSP and further add the SCTE35 on the fly on TSP and use the MPEGTS output to further package it to HLS with SCTE 35 markers. Will update you once i have set things up.
Keep up the good work.
Jackson

TSP by using FFMPEG as an ENCODER and sourcing IP INPUT to TSP

I am not sure to understand what you are going to do. But if you want to inject FFMPEG output into TSP, a simple pipe is probably more reliable than IP. But maybe I completely misinterpret your intentions.

Hi
I'm still testing the workflow but I had to deal with other problems. In the meantime I have one question.
I use multicat to receive a unicast stream and retransmit it in multicast Like this:
$ multicat -u -U @<IP_ADDRESS>:5001 <IP_ADDRESS>:5001
debug: socket definition: bind:<IP_ADDRESS>:5001
debug: socket definition: connect:<IP_ADDRESS>:5001

and then I use another multicat to send it to another multicast address:
$ multicat -u -U @<IP_ADDRESS>:5001 <IP_ADDRESS>:5002
debug: socket definition: bind:<IP_ADDRESS>:5001
debug: socket definition: connect:<IP_ADDRESS>:5002
^Cerror: poll error (Interrupted system call)

it works, but if I use tsp instead:
$ tsp -I ip <IP_ADDRESS>:5001 -P regulate -p 32 -b 22000000 -O ip <IP_ADDRESS>:5002
* Error: ip: error binding socket to local address: Address already in use

it doesn't.
That's a bit unexpected, is it?
Strace for multicat shows:
bind(3, {sa_family=AF_INET, sin_port=htons(5001), sin_addr=inet_addr("<IP_ADDRESS>")}, 16) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [524288], 4) = 0
setsockopt(3, SOL_IP, IP_ADD_MEMBERSHIP, {imr_multiaddr=inet_addr("<IP_ADDRESS>"), imr_interface=inet_addr("<IP_ADDRESS>")}, 8) = 0
write(2, "debug: socket definition: connec"..., 50) = 50
socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(4, SOL_SOCKET, SO_RCVBUF, [524288], 4) = 0
connect(4, {sa_family=AF_INET, sin_port=htons(5002), sin_addr=inet_addr("<IP_ADDRESS>")}, 16) = 0

strace for tsp:
socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) = 4
setsockopt(4, SOL_IP, IP_PKTINFO, [1], 4) = 0
setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [0], 4) = 0
bind(4, {sa_family=AF_INET, sin_port=htons(5001), sin_addr=inet_addr("<IP_ADDRESS>")}, 16) = -1 EADDRINUSE (Address already in use)

From a superficial look the difference seems to be that multicat uses connect, while tsp uses bind..

You need option --reuse-port.

Damn.. I thought it would be easy

OK, one more thing. If I connect using VLC to the stream generated by tsp after adding the --reuse-port option, it works, but the program in the Playback->Program menu are different (plain numbers vs channel names). I would have thought that tsp as I launched it would act as passthru? What other option I'm missing?

Using:
tsp --max-input-packets 16 --max-flushed-packets 16 -I ip -r <IP_ADDRESS>:5001 -P pcrbitrate -P regulate -p 7 -O ip <IP_ADDRESS>:5002
for streaming to vlc works fine. (I'm using multicast IP since I source if live from another RX8200 and I trust this more than a recorded file).
Now I will try adding scte-35 and feed it to the receiving RX8200 to get SDI with scte-35 cues.
Thanks

I am new and trying out tsduck to remove and inject scte-35 to a ts file. When I inspect removed-hello.ts it still has the splice information. What am I doing wrong?
`tsp -v -I file ~/tnt-2.ts -P rmsplice -a -s -O file removed-hello.ts

file: input bitrate is 2,800,595 b/s
rmsplice: found service id 0x0001 (1), PMT PID is 0x01E0 (480)
rmsplice: adding splice out at PTS 0x94,545,351
rmsplice: suspending PID 0x01E1 (481) at PTS 0x005A2A5C7 (+0 ms)
rmsplice: suspending PID 0x01E2 (482) at PTS 0x005A2BF1F (+72 ms)
rmsplice: restarting PID 0x01E1 (481) at PTS 0x005F595ED (+0 ms)
rmsplice: restarting PID 0x01E2 (482) at PTS 0x005F5991F (+9 ms)
`

@zuzzurro

If I connect using VLC to the stream generated by tsp after adding the --reuse-port option, it works, but the program in the Playback->Program menu are different (plain numbers vs channel names). I would have thought that tsp as I launched it would act as passthru?

Yes, without specific intermediate plugin which modifies packets, tsp is a complete passthru. Is it exactly the same stream in the two cases ? Is there any reason why the SDT could be removed ? If VLC can read the service names from the SDT from the first stream, why would it miss it in the second one ?
I suggest to also analyze the stream in parallel using tsp, in the two cases, something like:
tsp -I ip ... -P until --seconds 20 -P analyze -o analyze.txt -P psi -a -o psi.txt -O drop

Compare the two analyses and check that the service names are present in the analysis (analyze.txt) and in the SDT (psi.txt).
And BTW I should probably activate --reuse-port by default everywhere. It is almost always useful with multicast. Given your strace report, multicat activates it by default.

@xoraes
There is a misunderstanding here. The plugin rmsplice does not remove the splice information. It removes the associated service based on splice information. More precisely, for a given service, when a "splice out" event occurs, all service PID's are dropped. They are passed again at the next "splice in" event.
The obvious use case is to remove ads from a recorded file.
I admit that this is mostly experimental since a broadcaster will likely remove the splice information after splice processing. So, if you record a TS at home, there will be no splice information and you will be obliged to remove ads manually using any video editor.
If you want to remove the splice information, you need to :

Modify the PMT of the service to remove any reference to the splice info PID using -P pmt --remove-pid ...
Drop the splice info PID using -P filter --negate --pid ...

Thanks. How about injection? I am a bit confused if is works since this bug is open but the documentation has spliceinject in it too. I am using the latest released version.
Thanks @lelegard
I have a question on spliceinject as well:
I took a plain vanilla ts stream with no splice info and tried to do a spliceinject:
tsp -I file ~/Desktop/hello.ts -P spliceinject --service 2245 -f inject*.xml -O file hello-inject.ts
When I verify hello-inject.ts for scte35 I don't see anything. Here is my inject file:
<tsduck> <SpliceInfoSection ptsAdjustment="0" protocolVersion="0" tier="12">         <SegmentationDescriptor          segmentationEventId="123"          segmentationEventCancelIndicator="true"          segmentationDuration="12345"          segmentationTypeId=“16"          segmentNum="5"          segmentsExpected="5"          subSegmentNum="5"          subSegmentsExpected="5">  <DeliveryRestrictions          webDeliveryAllowedFlag="true"          noRegionalBlackoutFlag="true"          archiveAllowedFlag="true"          deviceRestrictions="3">  </DeliveryRestrictions>  <SegmentationUpid segmentationUpidType="1" formatIdentifier="123" segmentationUpidFormat="str1234">JUS5108-01  </SegmentationUpid>  </SegmentationDescriptor> </SpliceInfoSection> </tsduck>

Hi @xoraes
Your XML is not a valid TSDuck table. See the user's guide for the XML syntax of all tables and descriptors. So, if this file is actually ingested by spliceinsert, you should get an error message.
See appendix A.2.12 here and an real-life example here.

@zuzzurro
I just modified the behaviour of option --reuse-port. It is now on by default everywhere, commands and plugins. A new option --no-reuse-port has been added, just in case you really need to disable it.

@lelegard thanks for your help. I might still be doing something wrong because I added the xml from above link but no luck with the injection. Here is my truncated xml.
<?xml version="1.0" encoding="UTF-8"?> <tsduck>   <splice_information_table protocol_version="0" pts_adjustment="0" tier="0x0FFF">     <!-- PID 0x041F (1055) -->     <splice_insert splice_event_id="0x00000012" splice_event_cancel="false" out_of_network="true" splice_immediate="false" unique_program_id="840" avail_num="1" avails_expected="1" pts_time="1">       <break_duration auto_return="false" duration="2"/>     </splice_insert>   </splice_information_table> </tsduck>

The new default makes a lot of sense in my opinion, in particular because tsp only supports multicast and with multicast my assumption is to be able to connect to the same stream multiple times.
Only remaining small thing is why you don't support unicast at all..

@zuzzurro

Only remaining small thing is why you don't support unicast at all.

TSDuck does support unicast. The syntax is -I ip [address:]port. The address is optional. If specified, it must be a multicast address and the plugin joins the corresponding group. Otherwise, without address, the plugin simply listens on the specified port and receives unicast traffic which is sent to the host on which tsp runs.

Oh my god, sorry for spreading fake news one more time. I was misled by the error message:
$ tsp -I ip <IP_ADDRESS>:5001 -O ip <IP_ADDRESS>:5099
* Error: ip: address <IP_ADDRESS>:5001 is not multicast

I just assumed that tsp did not support multicast at all while it just does not "need" the IP part.. I guess my brain is just primed by other tools behavior..

@xoraes

I added the xml from above link but no luck with the injection

In your XMl table, you have a non-immediate splice_insert command with pts_time="1". Where did you get this value from? Did you simply put 1 as test value?
The whole point about splice information is synchronization with video. There are roughly two classes of splice events:

Non-immediate splice_insert (ie. with a specific PTS value).
Everything else.

Any splice command in the "everything else" category is injected as soon as possible after reception.
A non-immediate splice_insert command is injected a specific number of times (2 by default) within a short period of time (2 seconds by default) preceding the specified PTS timestamp in the video stream.
In other words, since "1" is probably not a valid PTS time stamp in your video stream, the command will never be injected.
For a start, for test purpose, try to inject an immediate command and verify that you see the command in the output stream (using plugin tables or whatever).
Then, to test injecting non-immediate commands, you need to know the PTS values in your video and send commands with valid future PTS values.

@zuzzurro
There could be a confusion with option --local-address which can be used in specific cases to restrict the reception to a specific local interface of the host. But the multicast address and the local address are two independent parameters. You may need only one, the two or none. It depends on what you want to do.

Hi @jacksonvm, @haraldjordan78, @zuzzurro, @xoraes
This thread is becoming confusing with distinct interspersed discussions. Since the original topic (enhancement suggestion for SCTE 35 injection) has been implemented, I propose to close this thread, if you agree.
Please open a separate issue for new or updated discussion, so that we can keep things organised.

@lelegard Thanks, can you suggest a known splice xml that works on a arbitary ts file? If no, which xml param should match stuff in the ts? I tried immediate spliceinject command and there was no error and nothing changed in the output ts file.
tsp  -I file ~/Desktop/mux1-cp.ts -P spliceinject --service 4671 -f ~/inject-scte.xml -O file some.ts

<?xml version="1.0" encoding="UTF-8"?>
<tsduck>
  <splice_information_table protocol_version="0" pts_adjustment="0" tier="0x0FFF">
    <splice_insert splice_event_id="0x00000001" out_of_network="true" splice_immediate="true" unique_program_id="0x00012">
      <break_duration auto_return="false" duration="6,750,000"/>
    </splice_insert>
    <splice_avail_descriptor identifier="0x43554549" provider_avail_id="0x00000012"/>
  </splice_information_table>
</tsduck>

@xoraes An immediate splice_insert should be inserted as soon as received, provided that:

The service has a video PID (in order to get PTS).
The service has a declared component with stream type 0x86 (for splice info injection).
The TS has stuffing packets (to be replaced by injected tables).

The first conditions are probably OK. Otherwise, you would get an error message.
Use tsanalyze on your input file and check that the stuffing PID has some bitrate. I do not know if this is clear in the documentation, but tsp cannot create packets. It can only transform (or remove) them. Each time a plugin needs to "insert" packets, it waits for the next null packet (PID 0x1FFF) and replaces it with the packet to insert.
In broadcast streams, where the modulation parameters impose a fixed bitrate, there is always some stuffing. With SPTS for IP, there can be not stuffing. In that case, splice info packets wait forever and are never inserted. In the latter case, one option is to create artificial stuffing using option tsp -a (see the user's guide). After splice injection, you may remove the excessive stuffing using -P filter -n -p 0x1FFF.
Otherwise, I suggest to use tsp -v (verbose) to display additional info. A verbose message is reported each time a splice info file is loaded (no message = no file found) and when a splice info section is injected (no message = no injection) or rejected for some reason.

Guys, I close this thread because the original topic, adding SCTE 35 injection capabilities, is now implemented and too many different questions are mixed in the same thread.
Please open a separate issue if you have a specific problem with plugin spliceinject.


Fast IMap comatible Map implementation

We need to crack down the performance issues in the IMap. One of the things we need is to have an IMap compatible map implementation that offers no other features than basic map.get/put. It doesn't need to support migration, split brain, ttl etc etc.  We need to determine how much performance is lost in the current imap implementation compared to a fast base line implementation.
We can implement this IMap as an SPI implementation.

Implemented


The website use the development build of React

Apparently, the page is using the development build of React.
If is true, can you use the production build ?

Confirmed, https://reactjs.org/docs/optimizing-performance.html#webpack


All anchors should use the a component

All anchors should use the a component because of DRY.

Solved, closing.


[BUG] Error when platform is unspecified as onprem with hdfs input paths

Describe the bug
When --platform=onprem is not present for eventlogs in hdfs, the following error occurs:
Traceback (most recent call last):
  File "/home/kuhus/micromamba/envs/myenv/bin/spark_rapids", line 8, in <module>
    sys.exit(main())
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/tools_cli.py", line 286, in main
    fire.Fire(ToolsCLI())
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/fire/core.py", line 143, in Fire
    component_trace = _Fire(component, args, parsed_flag_args, context, name)
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/fire/core.py", line 477, in _Fire
    component, remaining_args = _CallAndUpdateTrace(
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/fire/core.py", line 693, in _CallAndUpdateTrace
    component = fn(*varargs, **kwargs)
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/tools_cli.py", line 109, in qualification
    qual_args = AbsToolUserArgModel.create_tool_args('qualification',
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/argprocessor.py", line 132, in create_tool_args
    new_obj = impl_class(*args, **kwargs)
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/pydantic/_internal/_dataclasses.py", line 124, in __init__
    s.__pydantic_validator__.validate_python(ArgsKwargs(args, kwargs), self_instance=s)
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/argprocessor.py", line 471, in validate_arg_cases
    self.validate_arguments()
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/argprocessor.py", line 259, in validate_arguments
    self.apply_all_arg_cases()
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/argprocessor.py", line 251, in apply_all_arg_cases
    self.apply_arg_cases([self.rejected, self.detected, self.extra])
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/argprocessor.py", line 248, in apply_arg_cases
    case_value['callable']()
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/cmdli/argprocessor.py", line 182, in detect_platform_from_eventlogs_prefix
    ev_logs_path = CspPath(self.get_eventlogs().split(',')[0])
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/storagelib/csppath.py", line 171, in __call__
    path_class.__init__(new_obj, entry_path, *args, **kwargs)
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/storagelib/csppath.py", line 264, in __init__
    fs_obj = self._path_meta.fs_class.get_default_client()
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/storagelib/cspfs.py", line 78, in get_default_client
    cls._default_fs = cls()
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/storagelib/cspfs.py", line 97, in __init__
    self.fs = self.create_fs_handler(*args, **kwargs)
  File "/home/kuhus/micromamba/envs/myenv/lib/python3.10/site-packages/spark_rapids_tools/storagelib/cspfs.py", line 73, in create_fs_handler
    return cls._path_meta.fslib_class(*args, **kwargs)
  File "pyarrow/_hdfs.pyx", line 69, in pyarrow._hdfs.HadoopFileSystem.__init__
TypeError: __init__() takes at least 1 positional argument (0 given)
(myenv) kuhus@spark-egx-01:~$

I followed the steps for hadoop settings per documentation.
Steps/Code to reproduce bug
User tools version 24.8.0
spark_rapids qualification --verbose --eventlogs=hdfs://namenode:8020/hist_loc/application_1234_5678
Expected behavior
Same as
spark_rapids qualification --verbose --eventlogs=hdfs://spark-egx-02:8020/spark2-history/application_1707709865217_0236 --platform=onprem and at the very least make the error log better so that the user knows what to try out next.
Environment details (please complete the following information)
Onprem HDFS, Python 3.10, tools 24.8.0

Thanks @kuhushukla. Can you check if this is a duplicate of #1253?


Add transform configuration

I can't find a way to configure (select a filePattern to compile) es6ify while using it with karma-browserify. Exclude deps (node_modules) from compilation is mandatory for me, so I had to fork the repo and change the line that set the regex from /\.js$/ to /^(?!.*node_modules)+.+\.js$/, in order to be able to run my tests.

I've similar problem, but not only with tests. It's more general - when transformation is applied to the module, "use strict"; expression (statement? : ) is added to the beginning of the module's code. It obviously breaks libraries that don't work in strict mode, like Chai or Rx, for example.

If the third party library you're using to wrap es6ify doesn't allow you to configure it, that's a bug in that library, not in es6ify.
@erykpiast all ES6 module code runs in strict mode, so when you transpile it into ES5, that's done by adding "use strict";. But yes, in general you should not transpile your dependencies.

@domenic I disagree with you, in this specific case es6ify right now doesn't provide a friendly interface to be configured by a third party library, but it seems like you guys are working to fix it, PR #63 looks like the solution, do you have a estimation of when this would be available?


…ploymentTestCase Test Failures

Ensuring that the queue and topic are created and ready before checking
their name.

Jira: https://issues.redhat.com/browse/WFLY-15881

Thanks, @ehsavoie


Add CARFAX to the list of industry users?

The DevOps team at CARFAX has rewritten several internal tools in Elm and is looking to expand our usage to the deploy/health dashboard (the largest internal app we have).
Is this enough to warrant a listing?
Thanks in advance!

Very cool! Can you point me to an SVG logo?
Also, are there any plans to blog about what's going on there?

I'll see if I can dig up an SVG... I might post a write-up on Medium, but I'm not sure if that's quite alright just yet. Until then, I'm sure no one would be bothered if it was only an image. I'm really just hoping our brand can help soothe the nerves of potential adopters :)

I added it with just a link to the site. Let me know if there's ever something better to link to!

What kind of article/write-up do you think would be most helpful or hasn't been covered before?

"We use it for X. Here's how we migrated. Here's what's different. Here are the tradeoffs." That kind of thing. Experience reports like this are useful because they spread information and let the community know they can look to you for guidance. Or like, here's some stuff we were working on that we thought was interesting for some reason.
Doing this kind of writing can also get folks interested in working with your team, so depending on your goals, this kind of writing can be pretty nice for everyone.
Hopefully that's somewhat helpful!


Yell messages not being received by other players.

known bug; will put fix in next push.

Thanks!

Again: https://github.com/MoreOutput/RockMUD/issues/114


never is accepted as a generic argument

TypeScript Version:  3.5.1

Search Terms:
never, generic, generics
Code

let w!: never;

function test<T>(arg: T): void {
    console.log('hello')
}

test(w);

My actual use-case:
type Mapper<T, U> = (value: T, index?: number, array?: T[]) => U;
type IsFunction<T> = T extends Function ? T & Function : never;

function toFunction<T, U extends keyof T, V extends IsFunction<T[U]>>(
    key: U,
): V extends Function ? Mapper<T, V extends () => infer R ? R : never> : never {
    return ((value: T) => (value[key] as V)()) as any;
}

class Test {
    x: string;
    constructor(x: string) {
        this.x = x;
    }

    getX(): string { return this.x; }
}

const y: Test[] = [new Test('hello')];
y.map(toFunction('x')) // should cause an error

Expected behavior:
I'd expect both of these situations to cause an error
Actual behavior:
No warnings or errors on compilation, even on strict mode.

Yes, never is the bottom type.  Just as unknown is a universal receiver, never is a universal producer, so you can assign it to anything.
Equivalently, never is the subtype of every other type (or if you prefer, substitutable for everything else).  The empty array [] is of type never[] because you can use it to initialize any other type of array, there are no values so it doesn’t matter what other type you assign it to.
This is just the nature of a type system with both a top and bottom type.  I suspect what you really want in these cases is an invalid type, in which case there’s another ticket floating around here somewhere about that...

Found it: #23689


NetworkAnimator: OnDeserialize failed Exception=System.IO.EndOfStreamException

Bug:
OnDeserialize failed Exception=System.IO.EndOfStreamException (see below) object=PlayerPrefab(Clone) component=Mirror.NetworkAnimator sceneId=0 length=20
Reproduce:
I'm building a FPS game where there is the main player's PlayerPrefab with two children like this:

where:

FirstPersonCharacter:    FPS camera + Firearms that only local player can see
Avatar :                          Full body avatar that all other players can see, except local player

NetworkTransform works great, all movement is being synchronized perfectly.
The exception is thrown when I add a NetworkAnimator component on PlayerPrefab and attach its child's Avatar Animator
on the animator field.
The exception is not thrown when the Animator is on the same GameObject with the NetworkAnimator, for example
both in the parent PlayerPrefab (as I can see it was fixed in #570 issue).
Screenshots

I also recorded a video of the bug to make clearer what I'm trying to do.
https://www.youtube.com/watch?v=Y7p6N_PyiKM
Desktop:

OS: [Windows]
Build target: [Desktop]
Unity version: [2020.3.13f1]
Mirror Version: [42.2.12 - July 12, 2021 from AssetStore]

Yup, same problem here.

sorry, late reply.
sounds like NetworkAnimator isn't always serializing the same amount of data.
just to be clear @robtherobot12 @Stolichnayer are you changing NetworkAnimator's .animator field at runtime, or no?

This was a while ago, but no, I wasn’t touching that property.
On Sun, 29 Jan 2023 at 04:17, mischa @.***> wrote:

sorry, late reply.
sounds like NetworkAnimator isn't always serializing the same amount of
data.
just to be clear @robtherobot12 https://github.com/robtherobot12
@Stolichnayer https://github.com/Stolichnayer are you changing
NetworkAnimator's .animator field at runtime, or no?
—
Reply to this email directly, view it on GitHub
https://github.com/MirrorNetworking/Mirror/issues/2852#issuecomment-1407557439,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AHY4D6DKROCP5NVBR2EDZLDWUXVNJANCNFSM5BCGTP4A
.
You are receiving this because you were mentioned.Message ID:
@.***>

@vis2k I'll check today, and write if so.

@Stolichnayer after experimenting, I realized that the error magically disappears if I move the network animator component to the very top to the network identity component in the hierarchy of components. the screenshots are more clear

looking into this again. it can only happen if OnSerialize and OnDeserialize read/write different amounts of data.

which already seems to be the case, see screenshot


Importing ipyleaflet causes accordion and tab widgets to fail to render

After importing ipyleaflet, the accordion and tab widgets fail to render. The behavior occurs in Colab, but not in JupyterLab.
Script to reproduce: https://colab.research.google.com/drive/1YsTuzrRwFWBNq2ADDN0R6FZCTHcA6Dpb?usp=sharing

I have the same issue: after enabling the custom widget manager, the manager can't render the Accordion and Tab widgets.
They both fail at the same line, when trying to get "titles" from their model:

I encountered similar issues outside of colab (Accordion widget not rendering titles) but a simple upgrade to the latest ipywidgets version solved it.
It seems to me, that upgrading the @jupyter-widget/* dependencies of the manager could do the trick here too.
If you'd like, I'd be happy to try to fix it and submit a PR.


Upgraded to php7

Hi,
I had my Torque viewer working quite nicely up until last night when I upgraded my Ubuntu server and PHP got upgraded to v7, and that's where it all went wrong!! Not being a PHP guru I've been trying to hack my round it to get it working again with limited success.
One of the key errors I keep getting is in get_sessions.php where it now complains about
$timezone = $_SESSION['time'];
where it throws an error "Notice: Undefined index: time in /var/www/torque/get_sessions.php on line 14".
All the "mysql_" commands don't seem to work so have changed them to "mysqli_" which appears to make those errors disappear. Any pointers ?
Cheers, Tim.

I solved this some time ago, but I don't remember spefically what my fix was.  Basically, session variables were created and referenced multiple times, and I was able to bypass that.  I think it was between these 3 commits to my fork:
https://github.com/surfrock66/torque/commit/005ba45d0c8eecde14c0cfb40b4d26d0f93b583d
https://github.com/surfrock66/torque/commit/2cc000d4a906476a0fb52306d3ed64207092c068
https://github.com/surfrock66/torque/commit/a3366bfdd75f942ad1b0eae9cd4b430a7322cdb4

Many thanks for the pointers. I've managed to get rid of all the errors now, following your code. Sadly though, no sessions show up. The raw_log table is filling up nicely, but the sessions table stays empty no matter what I try and not sure what else to try now after spending a few hours on it scratching my head.  Oh well, it was a nice tool whilst it lasted unless you can suggest any things I can try to debug what is happening. I think it's not meeting the "if (sizeof($_GET) > 0)" in the upload_data.php file which looks to be where the session table is populated. That said, that also looks like the same place the raw_log file is populated, which does appear to work, so am confused !

I'm having no sessions showing up too.

Can you confirm that you have data logged in your database?


Error when value is set to int

When using the mixin and setting a value based on an integer, the validation will crash while trying to do a .match (since the value is an int not a string).
Perhaps the value should be converted to a string upon set in the mixin.
< MyOwnInput name="failedTest" value={data.value} validations="isInteger" validationError="This is not a valid integer" required/>

Hi Brett!
This is a difficult one :-)
Formsy allows for setting any value as the value of the form element, not just strings and booleans as you typically can with traditional form elements. If forcing everything to be a string I believe it will restrict too much, at least for now.
I suppose you created the isInteger validation rule yourself? Or are you referring to the isNumeric default validation rule?
If you created isInteger yourself I suggest you add a check to the validation rule, or convert it to string as that is what you want for your specific forms. If you are referring to the default isNumeric validation rule I think it should also be "true" when validating integers, so I can fix that.
Did I understand you correctly on this? :-)

The issue was with the built in validation method isNumeric and it erroring for an integer (which I thought would work by default).
Brett
P.S. I'm enjoying your library:-)

On Jan 30, 2015, at 1:56 AM, Christian Alfoni<EMAIL_ADDRESS>wrote:
Hi Brett!
This is a difficult one :-)
Formsy allows for setting any value as the value of the form element, not just strings and booleans as you typically can with traditional form elements. If forcing everything to be a string I believe it will restrict too much, at least for now.
I suppose you created the isInteger validation rule yourself? Or are you referring to the isNumeric default validation rule?
If you created isInteger yourself I suggest you add a check to the validation rule, or convert it to string as that is what you want for your specific forms. If you are referring to the default isNumeric validation rule I think it should also be "true" when validating integers, so I can fix that.
Did I understand you correctly on this? :-)
—
Reply to this email directly or view it on GitHub.

Hehe, thanks for that note ;-)
I will add this as a bug and fix it. Thanks for the report!

This should be fixed


Decrypt Method is returning null

On last release (1.3.0) we are getting null on trying to decrypt password.
It works fine on (1.2.0)
Thanks!
Seba

We created this simple methods to encrypt, desencryipt:
var encryptationKey = "OUR_ENCRYPT_KEY"
export function DecryptCode(codeToDecrypt: string):string
{
var encryptor = require('simple-encryptor')(encryptationKey);
var decryptedCode = encryptor.decrypt(codeToDecrypt);

return decryptedCode;

}
export function EncryptCode(codeToEncrypt: string):string
{
var encryptor = require('simple-encryptor')(encryptationKey);
var encryptedCode = encryptor.encrypt(codeToEncrypt);

return encryptedCode;

}
We made a simple test, get an string, encrypt it, and desencrypt it with same key, and we get null as desencrypt response. The same works fine with 1.2.0 version.
We are using node v4.3.2

thanks for the heads up! :)

I have the same problem, using node: v12.8
The encrypt method works "well", but the decrypt method only returns "undefined".
Can you help me?

I have the same problem, using node: v12.6
The encrypt method works "well", but the decrypt method only returns "undefined".
Can you help me?

Be careful how you store this data, if you provide "plain text" use an object instead, many characters can be escaped using "plain text". This resolved my error.

@TrejoCode If you're having a problem with this module open it up as a separate issue, preferably with an example to reproduce the problem.


Getting no response for Cactbot

Apologies if this has already been answered, i recently came back to game to update cactbot and overlay and swapped over to new overlay. But now im having issues with getting cactbot to work. I have the cactbot downloaded and selected as a miniparse, and I pick the raidboss html but im just getting nothing once i lock and enable clickthrough. been doing hades ex and getting no timer and no callouts (i changed the raidboss file to allow text to speech). Is there a new way to activate text to speech and is my altered file causing an error to cactbot? or maybe im putting it in the wrong folder? Any help is appreciated. thanks again for your time.

Are there any errors in your overlayplugin log?

im getting an error i believe for enmity plugin, but I didnt think that was associated with cactbot

when i reload overlay for raidboss im not getting anything in the log at all. not even that its loading

oh i got an error after restarting ACT.
[1/7/2020 10:06:03 PM] Info: InitPlugin: PluginDirectory = E:\Advanced Combat Tracker\Overlay Plugin
[1/7/2020 10:06:03 PM] Info: InitPlugin: Initialized.
[1/7/2020 10:06:04 PM] Info: cactbot: <IP_ADDRESS> E:\cactbot-master\cactbot-0.13.4\cactbot\CactbotOverlay.dll (dir: E:\cactbot-master\cactbot-0.13.4\cactbot)
[1/7/2020 10:06:04 PM] Info: OverlayPlugin: <IP_ADDRESS> E:\Advanced Combat Tracker\Overlay Plugin\OverlayPlugin.dll
[1/7/2020 10:06:04 PM] Info: FFXIV Plugin: <IP_ADDRESS> E:\Advanced Combat Tracker\FFXIV_ACT_Plugin.dll
[1/7/2020 10:06:04 PM] Info: ACT: <IP_ADDRESS>6 E:\Advanced Combat Tracker\Advanced Combat Tracker.exe
[1/7/2020 10:06:04 PM] Info: Language: en
[1/7/2020 10:06:04 PM] Info: Version: intl
[1/7/2020 10:06:04 PM] Error: There is a new version of Cactbot is available at:
https://github.com/quisquous/cactbot/releases/latest
New version 0.14.1
Current version <IP_ADDRESS>
[1/7/2020 10:06:04 PM] Info: LoadAddons: CactbotOverlay.dll: Initialized
[1/7/2020 10:06:04 PM] Info: LoadAddons: E:\Advanced Combat Tracker\Overlay Plugin\addons\CactbotOverlay.dll
[1/7/2020 10:06:04 PM] Error: LoadAddons: Skipped CactbotOverlay, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null because it's incompatible with this version of OverlayPlugin.
[1/7/2020 10:06:04 PM] Info: LoadAddons: E:\Advanced Combat Tracker\Overlay Plugin\addons\EnmityOverlay.dll
[1/7/2020 10:06:04 PM] Error: LoadAddons: Skipped EnmityOverlay, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null because it's incompatible with this version of OverlayPlugin.
The problem is i went to update my Overlay plugin and it says I have the current version.

Oh i didnt notice i didnt have the new updated version, i think it might be working now.
im getting the error:
[1/7/2020 10:09:31 PM] Error: Got a subscription for missing event "onForceReload"!
But i just tried a fight and the timeline is working now. not really sure what that error means.
Going to test my file with text to speech to make sure that works as well.

Bah now im getting a new string of errors, even after replacing the old raidboss.js
[1/7/2020 10:24:08 PM] Info: InitPlugin: PluginDirectory = E:\Advanced Combat Tracker\Overlay Plugin
[1/7/2020 10:24:08 PM] Info: InitPlugin: Initialized.
[1/7/2020 10:24:09 PM] Info: LoadAddons: E:\Advanced Combat Tracker\Overlay Plugin\addons\CactbotOverlay.dll
[1/7/2020 10:24:09 PM] Error: LoadAddons: Skipped CactbotOverlay, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null because it's incompatible with this version of OverlayPlugin.
[1/7/2020 10:24:09 PM] Info: LoadAddons: E:\Advanced Combat Tracker\Overlay Plugin\addons\EnmityOverlay.dll
[1/7/2020 10:24:09 PM] Error: LoadAddons: Skipped EnmityOverlay, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null because it's incompatible with this version of OverlayPlugin.
[1/7/2020 10:24:10 PM] Error: Got a subscription for missing event "onUserFileChanged"!
[1/7/2020 10:24:10 PM] Error: Got a subscription for missing event "onForceReload"!
[1/7/2020 10:24:10 PM] Error: JS Handler call failed: System.Exception: Tried to call missing handler "cactbotLoadData"!
at RainbowMage.OverlayPlugin.EventDispatcher.CallHandler(JObject e)
at RainbowMage.OverlayPlugin.EventDispatcher.ProcessHandlerMessage(IEventReceiver receiver, String data)
[1/7/2020 10:24:10 PM] Error: JS Handler call failed: System.Exception: Tried to call missing handler "cactbotLoadUser"!
at RainbowMage.OverlayPlugin.EventDispatcher.CallHandler(JObject e)
at RainbowMage.OverlayPlugin.EventDispatcher.ProcessHandlerMessage(IEventReceiver receiver, String data)
[1/7/2020 10:24:10 PM] Info: Raidboss: BrowserConsole: Uncaught (in promise) TypeError: Cannot read property 'detail' of null (Source: file:///E:/cactbot-master/cactbot-0.14.1/cactbot/resources/user_config.js, Line: 35)
I think im just making this worse ><;;

Please read the installation instructions again.
The addons folder should be empty and Cactbot has to be added as a plugin to ACT's Plugins tab.

Oh your 100% correct I downloaded the updated version of cactbot but did not re add Cactbot as a plugin, also clearing the addon folder did the trick. Got my text to speech working as well. Thank you so much!

ngld and quisquous are wonderful, got my issue solved super fast


[TASK] clean up auth middleware

Description
Currently, every code for auth middleware is written in init.py file. Move those to a separate file
Acceptance Criteria
The codes should work without any problem after moving it and work with all the building blocks

Tested, and this will be implemented in individual repository


Table Maker is getting slow after 7-8 columns

Describe the bug
Usually we have around 4 columns but in this particularly situation we need to use between 7-12 columns in matrix block. After adding so many columns and rows Table Maker is getting really slow.
Is there anything that we can do about it? So the UI is not so 'laggy'?
Steps to reproduce

Create matrix field with Table Maker inside.
Add more than 7-8 columns (after 11 is getting really slow)
Start adding rows with content.

Craft CMS version
<IP_ADDRESS>
Plugin version
4.0.3
Multi-site?
No
Additional context
I'm also using Matrixmate for matrix block groups and tabs.

I'm surprised that Table Maker is laggy, and how would you define slow? Is it the act of adding rows that's slow, or typing in a cell?
I've tested with a Matrix + Table Maker field just quickly, with 20 columns and 50 rows - all aspects of it seem fine to me.
Maybe a quick screen recording of the issue might help?

@engram-design sorry for the late response. Here is a video: https://youtu.be/p_PuoGQRwHU
I don't know if that is helpful information but I have also noticed that this happens when creating a new entry without anything else. After saving a draft or creating the entry it starts working properly for created columns.
After creating a number of columns and you start with content filling (labels) then you need to wait for all the processing ..

That's quite interesting, thanks for the video. Would there be any chance of getting a database backup of your site? Or an export of the Matrix field using Field Manager so I can replicate? I have a feeling it might be very specific to your setup, so ideally if I can have the same field setup as yourself, that'd help.
If you can send anything through to<EMAIL_ADDRESS>that would be amazing.

I have sent an export. Ticket ID: 648. Thanks for checking out.

Thanks for that, that's been very helpful. Should be fixed in 4.0.4

Great! Any idea when it'll be available for update?

Hmmm, looks like it's not on the plugin store automatically. Will chase up with Craft support!


Each queue should be able to have its custom_exception or None.

Each queue should be able to have its custom_exception or None.
Make a global custom_exception may lead us to a non desired behavior on other queues.

How can i run tests in my machine?

I agree that this is a good idea. However, I'd like to keep it backwards compatible if we can. Could you please change your PR to make exception_handlers fallback to RQ_EXCEPTION_HANDLERS?

Will do ;)

i'm sorry, i was really busy those days ;)
Take a look and see if it fits ^^

Done, could you take a look if it's ok?
Cheers!

@fchevitarese could you also fix the failing tests?

@selwin , the only way i found to fix the testing was to check if exception_handler exists, and if not, start a Worker without the parameter.
Even when there's no [exception_handler] it was raising the error when trying to get the failing job to requeue.
I'm not sure why, and i couldn't find a way to fix this problem in other way.
About the property "self.exception_handlers = kwargs.pop('exception_handlers', None)" i removed, but started to face a lot of errors, so i put it back.
Hope it's all good!

Hi! I'm sorry I've been very busy. Will do when I can
Em 22/07/2017 21:54, "Selwin Ong"<EMAIL_ADDRESS>escreveu:

@selwin commented on this pull request.
In django_rq/queues.py
https://github.com/ui/django-rq/pull/215#discussion_r128907811:

 return queue_class(name, default_timeout=default_timeout,

                    connection=get_connection(name), async=async,

                  autocommit=autocommit)

                  autocommit=autocommit,

                  exception_handlers=exception_handlers)

@fchevitarese https://github.com/fchevitarese reminder to update this
PR when you're free :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ui/django-rq/pull/215#discussion_r128907811, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AACAx9KbgEC1fsa7LejrT_heZOToLfa0ks5sQpmogaJpZM4LxhAD
.


minor capitalization change

FYI I have applied a patch of this PR to glasnt/across, which will then make it's way to google/across soonly :)


Error when using ClassVar annotation after upgrade from 2024.7.1 to 2024.8.1

Environment data

Pylance version: 2024.8.1
OS and version: Ubuntu 23
Python version (& distribution if applicable, e.g. Anaconda): 3.12

Code Snippet

from typing import ClassVar

class Foo:
    pass

class Bar:
    FooType: ClassVar = Foo

def bas() -> Bar.FooType:  # Variable not allowed in type expressionPylance (reportInvalidTypeForm)
    pass

Repro Steps

Upgrade Pylance to version 2024.8.1.
Paste the code example above into any Python file.
See the «Variable not allowed in type expressionPylance reportInvalidTypeForm» error.
Downgrade Pylance to version 2024.7.1.
The error has disappeared 🎉

Expected behavior
There is no error. You can use the Class Var annotation when annotating a field in a class (the field contains the type). Type hints work when annotating with this field.
Actual behavior
An error occurs when using the Class Var annotation when annotating a field in a class (the field contains a type). Type hints when annotated with this field return Unknown ((variable) FooType: Unknown).
Logs

2024-08-10 18:38:42.727 [info] Discover tests for workspace name: app - uri: /opt/app/ddd.py
2024-08-10 18:38:42.727 [info] Running discovery for pytest using the new test adapter.
2024-08-10 18:38:42.727 [info] All environment variables set for pytest discovery: {"HOSTNAME":"***","PYTHON_PIP_VERSION":"23.2.1","HOME":"/home/user","GPG_KEY":"***","PYTHON_GET_PIP_URL":"https://github.com/pypa/get-pip/raw/4cfa4081d27285bda1220a62a5ebf5b4bd749cdb/public/get-pip.py","VSCODE_AGENT_FOLDER":"/home/user/.vscode-server","GITLAB_API_TOKEN":"q8VbuJ3GGkxM77btRQni","LANG":"C.UTF-8","SHELL":"/bin/bash","PYTHON_VERSION":"3.12.0","PWD":"/home/user/.vscode-server/bin/eaa41d57266683296de7d118f574d0c2652e1fc4","PYTHON_GET_PIP_SHA256":"***","PRESCRIPTS":"/home/user/.prescripts","GITLAB_API_USER":"***","VSCODE_CWD":"/home/user/.vscode-server/bin/eaa41d57266683296de7d118f574d0c2652e1fc4","VSCODE_NLS_CONFIG":"{\"userLocale\":\"en\",\"osLocale\":\"en\",\"resolvedLanguage\":\"en\",\"defaultMessagesFile\":\"/home/user/.vscode-server/bin/eaa41d57266683296de7d118f574d0c2652e1fc4/out/nls.messages.json\",\"locale\":\"en\",\"availableLanguages\":{}}","VSCODE_HANDLES_SIGPIPE":"true","VSCODE_AMD_ENTRYPOINT":"vs/workbench/api/node/extensionHostProcess","VSCODE_HANDLES_UNCAUGHT_ERRORS":"true","REMOTE_CONTAINERS_IPC":"/tmp/vscode-remote-containers-ipc-6aaaec59-de03-4550-9701-73c76cc1d2f7.sock","REMOTE_CONTAINERS_SOCKETS":"[\"/tmp/vscode-ssh-auth-***-***-***-***-***.sock\",\"/home/user/.gnupg/S.gpg-agent\"]","SHLVL":"1","_":"/usr/bin/cat","SSH_AUTH_SOCK":"/tmp/vscode-ssh-auth-***-***-***-***-***.sock","REMOTE_CONTAINERS":"true","BROWSER":"/home/user/.vscode-server/bin/***/bin/helpers/browser.sh","ELECTRON_RUN_AS_NODE":"1","VSCODE_IPC_HOOK_CLI":"/tmp/vscode-ipc-***-9c94-***-***-***.sock","APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL":"1","VSCODE_L10N_BUNDLE_LOCATION":"","PATH":"/home/user/.vscode-server/bin/***/bin/remote-cli:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","PYTHONPATH":"/home/user/.vscode-server/extensions/ms-python.python-2024.10.0-linux-x64/python_files","TEST_RUN_PIPE":"/tmp/python-test-discovery-0172835085ee6b2fee84.sock"}
2024-08-10 18:38:42.728 [warning] could not find a pixi interpreter for the interpreter at /opt/app/.venv/bin/python
2024-08-10 18:38:42.732 [info] > ./.venv/bin/python -m pytest -p vscode_pytest --collect-only tests
2024-08-10 18:38:42.732 [info] cwd: .
2024-08-10 18:38:43.332 [info] ============================= test session starts ==============================
platform linux -- Python 3.12.0, pytest-8.2.1, pluggy-1.5.0

2024-08-10 18:38:43.336 [info] rootdir: /opt/app
configfile: pyproject.toml
2024-08-10 18:38:43.336 [info]
plugins: anyio-4.3.0

2024-08-10 18:38:43.340 [info] collected 0 items

2024-08-10 18:38:43.342 [info]
========================= no tests collected in 0.01s ==========================

2024-08-10 18:38:43.375 [error] Subprocess exited unsuccessfully with exit code 5 and signal null on workspace /opt/app.

The new behavior is correct. This was previously a false negative. You are attempting to use a variable in a type expression, which is disallowed by the Python typing spec. If you think about it, this makes sense because type annotations must be statically evaluated, and variables are mutable.
If your intent was to define a class-scoped type alias within Foo, you can change your code to this.
Code sample in pyright playground
from typing import TypeAlias

class Foo:
    pass

class Bar:
    FooType: TypeAlias = Foo

def bas() -> Bar.FooType:
    ...


Mistake in Translation File

The current EN Translation File has the code and translation misaligned. Better use the file from previous version.

I'm so sorry about that, no plan to care about non-ko-kr language.
non-ko-kr langs are based on dev's TL.
If you want to fix error of locales, request access permission of locale sheet.

https://docs.google.com/spreadsheets/d/1Q2tpfQntZxmI0Xbx9HZo0vjBY7kQGZGmH1MBGTzrnvo

Cannot revert the sheet update back to old dev's TL file? 🤔 Alright.


Set different values for secret variable depending on stage

Hi there. In classic mode we were able to set secret variable's value for different stages. For example MyServicePass for dev equals "ABC" but for production equals "QWE". For different stage there was a single variable with different values. Now in yaml we can't do this, right? All what we have is 'Variables' tab in UI without any mention of stage.
 In that case I will curse you.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: dd7e0bd3-1f7d-d7b6-cc72-5ef63c31b46a
Version Independent ID: dae87abd-b73d-9120-bcdb-6097d4b40f2a
Content: Define variables - Azure Pipelines
Content Source: docs/pipelines/process/variables.md
Product: devops
Technology: devops-cicd-process
GitHub Login: @juliakm
Microsoft Alias: jukullam

@VerdonTrigance Thank you for the question.
The intended use is secrets within variable groups for access across pipelines, though updating variable groups still requires REST, see https://github.com/MicrosoftDocs/azure-devops-docs/issues/5652 for the latest status.
For multi-stage variables within the same template you will need to adjust them manually, the idea of enums has been proposed see here.

@VerdonTrigance Thank you for the question.
The intended use is secrets within variable groups for access across pipelines, though updating variable groups still requires REST, see #5652 for the latest status.
For multi-stage variables within the same template you will need to adjust them manually, the idea of enums has been proposed see here.

Variables or variable groups - they are all named different, right? As so when I start my extreme long build with multiple stages and environments I wouldn't be able to use MySecretPass variable in my template (as I repeat these steps from stage to stage) because it stores only single value (for example only for dev environment/stage)? Looks not good. Is anyone faced with the same problem?

Closing this issue now, for suggested changes to the documentation please comment below.
Otherwise, for additional support options, please refer:

Azure DevOps community
Azure DevOps support
Azure DevOps on StackOverflow


Minor fixes to Throttling and Trace labs

Fixed throttling lab which had bad XML (wrapped by HTML tags)
Fixed trace lab, which had mismatch between policy name and policy xml snippet

@SudheendraBS


How to show the covered line in the diff coverage html report?

Hi, all,
I know that current diff coverage html report only shows the missing lines with red-background.
I want to know if the covered lines can be also shown in that html report.
PS, it is better that per file diff coverage statistic also include the total lines.
The purpose is to have a complete/full overview of this diff code change, not missing lines only.
Thanks!

So this is not currently implemented.
If someone were to write a pr I would be open to merging it but it would be a larger or as diff-cover currently does not track covered lines anywhere I believe
But doing so would only require pulling more info out of the underlying coverage report so it could be possible.


Allow caller to specify container and leaflet props if desired

This PR aligns the API structure for Marker and MarkerCluster popup prop. The 80% case is the caller will rely on the theme's popup container properties and Leaflet's default popup properties. The 20% (if that) case if the caller will want to override the popup container properties or leaflet properties.
To gear the API surface for the 80% case, the caller can leverage a function:
// where cluster is used to determine content in the popup content
<MarkerCluster popup={(cluster) => <MyClusterPopupContent cluster={cluster} />} />

<Marker popup={<MyMarkerPopupContent />} />

To support the 20% case, the caller can also pass the following structure to popup on Marker or MarkerCluster:
popup={{
   render: cluster => <MyClusterPopupContent cluster={cluster} />,
   boxProps: {
      // any box props to affect the popup container
   },
   // NOTE: naming choice of "leafletProps" could be improved potentially for clarity.
   leafletProps: {
      // any leaflet popup props
  }
}}

Notes:

I could also be up for letting necessity drive the API expansion -- aka leaving our current implementation as is, then having this in our back pocket if we get response that people need more flexibility.
the leaflet css file needed to be adjusted so an Anchor inside a popup wasn't getting leaflet defined color. We should audit any other styles from leaflet css to determine additional overrides we might need.

Closes #45

Having issues with displaying the other maps besides the server and default map. Getting the following error:

This has been fixed.


convert all sql IFNULL to COALESCE

Crafting a regex to search with is difficult.

/me feels like a search&replace went somehow bad.


NOISSUE importable apiclient

- What I did
make be api client public in order to be usable in other projects
- How I did it
- How to verify it
- Description for the changelog

Codecov Report

Merging #168 into master will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master     #168   +/-   ##
=======================================
  Coverage   72.70%   72.70%
=======================================
  Files          55       55
  Lines        3851     3851
=======================================
  Hits         2800     2800
  Misses        896      896
  Partials      155      155

Impacted Files
Coverage Δ

test/api/apiwrapper.go
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 149715c...3e522f6. Read the comment docs.


Is babel-plugin-preval necessary as a dependency?

Can it not rather just be a development dependency?

Thanks for the question @badeball. You're right, it can be run as a devDependency. This has been updated in 3.0.3.


[Suggestion] Any chance of fixing the 'shunting' feature?

Pushing two minecarts in to eachother will make them stick together, allowing you to create trains with a furnace cart in the front that you can fuel.
This feature is very unstable, however, and it breaks apart if the carts go to fast, if they turn a corner, or anything.
Very few people seem aware of this, but I would very much like to see it properly functional again.

there is a way to fix this in vanilla with particular rail placements. the main reason it isnt discussed often is because furnace carts are fairly obsolete in every way. message me at Inspector Talon#8129 in disc if you want more information


Investigate latest industry status (NFX303, ARC307)

Hello world!

https://www.youtube.com/watch?v=Xbn65E-BQhA
https://www.youtube.com/watch?v=tm5GEePP1PY

The status is summarized in Feishu doc


Add DispatchedTupleDict, improve readme

This PR adds DispatchedTupleDicts, which allow multiple keys. Also, the README description is a bit improved.

bors r+


Adding Url class. Parsed object is now an instanceof Url

Fixes #21

[x] Tests pass
[x] Appropriate changes to README are included in PR

does the native url.parse() only preserve objects if they are instances of Url?
Yes. Must be an instance on Url, else it throws an error


Merge send_string functions in python debugger client

Merging the send_string messages to one check, therefore multiple duplicated lines are removed.
I didn't find a good solution though in the HTML client, since it would be nested switch cases / ifs, which wouldn't look okay IMO, the other solution would only save like 2 lines of code overall.
JerryScript-DCO-1.0-Signed-off-by: Daniel Balla<EMAIL_ADDRESS>

@zherczeg Thanks for the review, PR updated.

@LaszloLango Thanks for the review, I fixed them.


Peekview keyword has no highlight group.

Thanks for reporting this @ppnman 👌
I don't use peekView often though, so not sure what would be the best background, would you be able to suggest a colour?

What do you think of the color(#ac6913) ?

Or this(#23395C)?
Or you can reference other colortheme.
BTW, your gruvbox colorscheme is great, I love it!

BTW, I suggest that the foreground of the item seleceted should be lighter than other entries.
Like this:
(Solarized Dark)

Now it is darker than other entries.
(Gruvbox Medium)

So the final effect is:

// PEEK VIEW
    "peekView.border": "#3c3836",
    "peekViewEditor.background": "#3c383650",
    "peekViewEditorGutter.background": "#3c383650",
    "peekViewEditor.matchHighlightBackground": "#ac6913", **#Modified**
    "peekViewResult.background": "#3c383650",
    "peekViewResult.fileForeground": "#ebdbb2",
    "peekViewResult.matchHighlightBackground": "#8ec07c30",
    "peekViewResult.selectionBackground": "#8ec07c30",
    "peekViewResult.selectionForeground": "#FFFFFF", **#Modified**
    "peekViewTitle.background": "#3c383650",
    "peekViewTitleDescription.foreground": "#bdae93",
    "peekViewTitleLabel.foreground": "#ebdbb2",

thanks @ppnman, the color look cool, but I think it's better to stick with the colors in gruvbox palette, would you be able to give the colors.txt a try https://github.com/jdinhify/vscode-theme-gruvbox/blob/master/colors.txt
try
"peekViewEditor.matchHighlightBackground": "#fe801980",
"peekViewResult.selectionForeground": "#fbf1c7"

note that you can use 2 chars (00 -> ff) after the color code to specify the alpha, eg. #fe801980 is the orange 2 in colors.txt (fe8019) with 80 as alpha

@jdinhify Very good, I like it.

Thanks @ppnman , would you be able to submit a PR for it? I'm happy to do it if you can't.
It'd be great if you can do for other variants, but no pressure, I can have a follow up commit to address other variants

@jdinhify
I am really sorry that I just read your response. There are so many things going on there days so that I have no time to browse GitHub.
Of course, I am glad to submit a PR for it. But maybe it takes one week to finish it because I need to consider what color is better in light colorscheme.

That's alright @ppnman , please take as much time as you need.
Thank you

I am sorry to close the issue because I don't use vscode anymore.
BTW, both the plugin and author are great.


[2.4]PANDARIA: UI will set istio gateway port, so remove them from values

Issue: https://github.com/cnrancher/pandaria/issues/1273

can u specify why those configurations are removed from this PR?

We used to configure port 80 and 443 under ports, port 15021 and 15443 under ingressPorts, base on the original chart, these four ports should under ports, we already configured the default ports under (sub charts)[https://github.com/cnrancher/system-charts/blob/27309afeeb6f3a00b2907ca46c32e018177e346d/charts/rancher-istio/1.8.5000/charts/gateways/charts/istio-ingressgateway/values.yaml#L19-L35], when user customize these value, UI will pass them, so these should be removed.

LGTM


Virtualized Thread Viewer

Summary
Added ThreadViewerVirtualized to handle:

displaying the thread in a virtualized list,
scrolling to {bottom/new-messages/permalinked replies}

The logic of fetching posts etc... remains in the ThreadViewer.
PS: I had some problems with scrolling the list to other position than the bottom,
whenever the CreateComment was in the items viewed the list was always scrolled to the bottom.
It seemed that the problem was focusing the textbox, I've added blockFocus prop to CreateComment to mitigate that.
Ticket Link
https://mattermost.atlassian.net/browse/MM-36698
https://mattermost.atlassian.net/browse/MM-36999
Release Note
NONE

/update-branch

@ogi-m or @jgilliam17 can one of you help test this PR?
The whole thread view has been refactored, so all actions like scroll to new messages line, scroll to bottom on new messages arriving (if the user was already scrolled at bottom) etc.. need to tested...
tia :heart:

@hmhealey @calebroseland @larkox friendly bumps to review

Looks good assuming the CreateComment remounting isn't going to cause us any problems. I'd particularly wonder about it on mobile web if it's grabbing focus and popping up the keyboard randomly.

It shouldn't cause any issues with mobile, since we are only auto focusing when we post a new comment on mobile.
so it should work as expected, however I've made the CreateComment an actual list component, so re-mounting has been taken care of.

Cool, both those sound good to me then. Looking forward to having this!

Thanks @koox00
Looks good overall
Seeing an issue with permalink

When clicking on a link to reply post in a thread, post opens highlighted on the RHS as expected, but as highlighting fades the thread refreshes and scrolls to the bottom. See video.

https://user-images.githubusercontent.com/52937121/128570219-83e03028-5ba4-4e64-8a5b-34fa25a27a43.mov

Thanks @koox00
Looks good overall
Seeing an issue with permalink
* When clicking on a link to reply post in a thread, post opens highlighted on the RHS as expected, but as highlighting fades the thread refreshes and scrolls to the bottom. See video.

@jgilliam17 It should be fixed now!

@koox00  Here are the Cypress results for this PR
And the results from the master run for comparison.
There are a few "Message reply scroll" test cases that are failing on the PR, but not on master.

@koox00 Here are the Cypress results for this PR
And the results from the master run for comparison.
There are a few "Message reply scroll" test cases that are failing on the PR, but not on master.

Thank you @jgilliam17! Fixed the "Message reply scroll" and the accessibility ones for RHS.

@jgilliam17 thanks!
I might have broken the timestamp positioning with the latest changes :( ...

@koox00 I added a followup ticket for the timestamp https://mattermost.atlassian.net/browse/MM-37889

Great work on this @koox00 !


Minor Pipe cleanup and some small optimizations

After doing a bit more benchmarking and profiling, found a few small things to cleanup.
The largest change is that pipe.pullWhile now requires two functions instead of one.  The first function is used whenever an item is ready to be pulled, and the second is used when the pipe is closed/terminated.  Not only does this (slightly) improve performance by vastly reducing how often an item needs to be wrapped in PullResult.Item, but it cleans up the logic since a PullAction isn't actually needed when the pipe is closed or terminated.
The other changes are small optimizations and some updated docs.

Current coverage is 83.61% (diff: 69.90%)

Merging #461 into develop will decrease coverage by 0.06%

@@            develop       #461   diff @@
==========================================
  Files            91         91
  Lines          4185       4180     -5
  Methods        3855       3840    -15
  Messages          0          0
  Branches        330        340    +10
==========================================
- Hits           3502       3495     -7
- Misses          683        685     +2
  Partials          0          0

Powered by Codecov. Last update a7775fb...8b77648

👍  looks good, could you do a team talk about colossus though?  there's nuances I'm sure I've missed


Get an error when executing the 'Mange Access...' action for ADLS Gen2 container

Storage Explorer Version: 1.9.0
Build: 20190821.3
Platform/OS: Windows 10
Branch: master
Architecture: ia32
Regression From: Previous release
Steps to reproduce:

Expand one ADLS Gen2 account -> 'Blob Containers' node.
Right click one blob container then select 'Manage Access...'.
Check the result.

Expect Experience:
The 'Manage Access' dialog shows well.
Actual Experience:
Get an error on the Activities.

@MRayermannMSFT The reason is because ManagePosixAclViewModel doesn't have a default export.

This issue has been fixed on the latest master build 20190813.5. So closed it.


Fixed number fields

#Fixed number fields
The angular directives were not included in number fields yet. This led to the problem that any changed in a number field did not get recognised and thus not updated.

Yikes! Sorry hadn't tested out number fields that well. Thank you for the patch! Will give more love to this project these next couple of months.


compose should not unroll (by default) when using the circuit library

Information

Qiskit Terra version:
Python version:
Operating system:

What is the current behavior?
The idea of having a circuit library is to build up larger circuits and have simple visualizations that we can recognize when using them. I am fine having a non default option to unroll circuit when you compose it but by default the combined circuit should look like building blocks of the libraries.
As an example see this figure

It should make output (by default)

@ajavadia I know we talked about this but just making issue so we remember.

The problem is that QFT returns the decomposition, not the "box".
QFT(3).draw('text')

                                          ┌───┐
q_0: ───────────────■─────────────■───────┤ H ├─X─
                    │       ┌───┐ │P(π/2) └───┘ │
q_1: ──────■────────┼───────┤ H ├─■─────────────┼─
     ┌───┐ │P(π/2)  │P(π/4) └───┘               │
q_2: ┤ H ├─■────────■───────────────────────────X─
     └───┘

I think this is a fairly easy change to compose, if compose knew which QuantumCircuit's are from the library. One simple idea is to just add an attribute, say library, to each library class that produces a QuantumCircuit (or to every library class). Then maybe add a kwarg to compose that gives the user the option to unroll or not. For example,
qc = QuantumCircuit(3)
qc.h(0)
qc2 = QuantumCircuit(2)
qc2.h(1)
qc2.x(0)
qc = qc.compose(QFT(num_qubits=3), range(3))
qc = qc.compose(qc2, range(2))
qc.h(0)
qc.draw()

The library attribute might also help in the drawers, since we might want to display internally created gates differently than user-generated ones in some cases.

@1ucian0 I dont want to use the to_gate long term that needs to be removed in my opinion.
@enavarro51 im good have a kwargs to unroll if the use wants to but by default it should not.
@1ucian0 I agree it just a box to implement it :-)

Agreed on default not to unroll. So the remaining question is, how does compose identify library circuits?
1 - Add library attribute on all library classes
2 - Import all library classes into quantumcircuit.py and see if other is instance of library class
3 - Create list of library names and see if other.name or other.base_gate.name in list.
For me, '1' seems the cleanest and easiest to maintain. Or maybe there's another one I'm missing.

In my understanding, append is the way to do this. e.g. from @1ucian0 's example
circuit = QuantumCircuit(3)
circuit.initialize(Statevector.from_label('+++'))
circuit.append(QFT(3), range(3))
circuit.draw('mpl')

As defined now, append is loosely "add this object as a boxed instruction within my circuit" and compose is "add all the instructions from this object to my circuit".

Append works but my view is we don’t need both.  And I would rather have compose work the way we expect. Long term I don’t see why we need append.

I agree it's a bit weird to have two methods to do almost the same. So how about removing append in favor of
def compose(self, other, qubits=None, clbits=None, unroll=False, front=False, inplace=False):
    # if unroll is False, behave like append (with some few changes to accomodate front/inplace/optional qubits/clbits)
    # if unroll is True, behave like current compose

We could keep most of the code as is I think but just add a proxy do decide how to append.

im good with this we should only have one and compose makes more sense since we also use in the operators.
I am good having keyword but I would use decompose as it is only going one length when it unrolls anyway.

It looks like compose and append are roughly the same, but differ (at least) in details. For example on offers an option to operate in place, the other is only in place. They also apparently share no code! My intuition is that it would be beneficial to do refactoring in conjunction with reconsidering the API. For example, for backward compatibility, one might be a light wrapper on the other.

@jaygambetta we discussed this internally again and came to the conclusion that instead of wrapping upon composition we should wrap all library circuits directly. The reason being: If we want to be able to choose the implementation of a library circuit at compile-time, the library circuits must be opaque blocks from the beginning. And if we wrap the library circuits per default, compose doesn't need to wrap on top of that.
E.g. say we have several QFT implementations, then we could think that
qft = QFT(3)  # not specifying a decomposition here, we just want some QFT implementation
circuit.compose(qft, inplace=True)  # add the opaque QFT block to our circuit
transpiled = transpile(circuit, ...)  # now choose the optimal QFT implementation

With that we also fix the behavior described in this issue.
We can still add an option that let's compose wrap the circuits, but it probably shouldn't wrap per default to avoid unnecessary "double-wrapping".


Fix Sidebar Issues

Fix: Currently the sidebar isn't hidden on nav pages when the next.js option trailingSlash: true is enabled.
Fix: Clicking on a a to an anchor on the same page will lead to the current page being un-highlighted in the sidebar.

Kind of extends #236

Any update on this one?

closing due time, I guess this issue was already fixed in v3, feel free to create an issue if you still need help


Can't use 2SXC

After several tries finally error list goes really short, this is the last error i got and can not find information about it.   I don't have the files on C:\Projects\2sxc-dnn742\Website\DesktopModules we have it on C:\webapps\DNN7\DesktopModules
Error: Content is currently unavailable. DotNetNuke.Services.Exceptions.ModuleLoadException: Error - can't find 2sxc instance configuration. Probably trying to show an app or content that has been deleted. ---> System.Exception: Error - can't find 2sxc instance configuration. Probably trying to show an app or content that has been deleted. at ToSic.SexyContent.View.Page_PreRender(Object sender, EventArgs e) in C:\Projects\2sxc-dnn742\Website\DesktopModules\ToSIC_SexyContent\View.ascx.cs:line 63 --- End of inner exception stack trace ---

@juantarte I don't understand what you're describing. Could you please give more context, like "I installed it the first time" or "it suddenly stopped working after an update" or anything like that? and just some more infos otherwise we can't really help you.

I'm not even sure if this is a Mobius or a 2sxc issue - can you verify?

Sorry was my mistake to did it on Mobius, was 2sxc issue.
I finally install 2sxc.

So please post on 2sxc, not on mobius - different people who would respond.
Note that this looks more like a support thing - in which case StackOverflow would be the right place to put it.

Sorry was my mistake to did it on Mobius, was 2sxc issue.
I finally install 2sxc.

@juantarte I understand this was a 2sxc issue for you - I am also stuck trying to install 2sxc on DNN 8 and receiving that error when adding content or app modules to a page.  how did you complete the install?

Sorry was my mistake to did it on Mobius, was 2sxc issue.
I finally install 2sxc.

@juantarte I understand this was a 2sxc issue for you - I am also stuck trying to install 2sxc on DNN 8 and receiving that error when adding content or app modules to a page. how did you complete the install?

Hi, really i don't remember what i do to install it, i\I do several's things trying an failing.   Just follow all steps they have on web, click all links and read all possibles solutions.

I'm a bit confused as to what issue we're discussing here. Please post new issues in the right boards.


Examples do not work in iOS 9.2

Examples do not work in iOS 9.2.
Have tried both Safari and Chrome for iOS (47.0.2526.107).
How to reproduce for examples example.htm and example-tour.htm:

Clone pannellum project master branch;
Place files onto web server;
Open local web server location in iOS browser (Chrome or Safari);
Navigate to /examples
Open example htm or example-tour.htm.

Outcome:

'Click to Load Panorama' mask displayed
Tap 'Click to Load Panorama' mask;
Image load progress moves to 100%;
Mask does not vanish & panorama is not loaded.

I have tried converting examplepano.jpg to progressive encoding using jpegtran, however it has the same outcome.
====
example-cube.htm 'sometimes' loads. It will either begin loading and crash the browser, or it will load and function for < 30 seconds, and then crash the browser.

This bug was introduced two days ago while fixing #104. Safari has incomplete ECMAScript 6 support; specifically, it lacks an indexOf method for typed arrays. I just fixed this.


i can't unpack unity3d

this is the unity3d file i can't unpack
It's chinese mobile game. i want to study graphic design.
can u help me?
Goblin_Mask1.zip

UnityWeb����3.x.x�4.6.9f1 in header. Disunity does not support it. Please close!