text:
feat: real image dataset support

Note: This is a draft PR for discussion
This PR adds support for real image datasets in the stress test.
I just added a method dataset_images(dataset_path: str, num_docs: int = 100) in helper.py . This method reads a given directory and yields all found images (gif/png/jpg). I am using the state variable to store the scandir iterator so that progress is kept between calls.
Questions:

I am not closing the ScandirIterator as it is hard to say when we are done processing the dataset? I guess it should be okay here, but its not really clean.
Maybe we should unify the dataset and random document generator functions? I mean that both have the same method with an optional dataset path. If the path is empty we generate random documents, if its not empty we try to process the dataset.

Missing:

Documentation in readme
We need the same for text datasets

Actually for the text based datasets the formats will change all the time, so we probably cant have a unified method to access the datasets (second question above), but we need specific methods for specific datasets

I am not closing the ScandirIterator as it is hard to say when we are done processing the dataset? I guess it should be okay here, but its not really clean.

Should be okay for now.

The PR looks nice! Let's test it today on end-to-end remote with terraform

authors: deepankarm jacobowitz

repo: jina-ai/stress-test


text:
makefile

When I try to use 'make' under Linux system in the bookshelf, it return a error 'g++: fetal error: no input files'. So I checked the makefile, is it possible that we should put any dependency after $(OBJS) in line 43. Sorry, I only have a little experience in simple makefile.  Thanks

Can you please try make depend && make?

Thank you so much. It did work.

source: gharchive/issue

license_type: permissive

license_source: github-api


text:
Add the CONTRIBUTING.md file to the repository

Problem Description: Is it possible to add the CONTRIBUTING.md file to the repository? Once established, this file will provide clear guidance to additional contributors on how to best support the project, including steps to customize development environments, coding standards, and procedures for submitting pull requests This will help streamline the donation process and encourage their greater participation .
you can assign me to the task.

No more documentation issue.

license: MIT


text:
Jitsi SIP stops receiving calls after ~ 10 minutes

Description
Jitsi 2.11.5624
Linux Bionic 5.3.0-45-generic #37~18.04.1-Ubuntu SMP Fri Mar 27 15:58:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)
Current behavior
After about 10 minutes, Jitsi cannot receive or make calls. When it stops working, no errors appear in syslog or jitsi0.log. This bug affects all of my users (all are on Ubuntu).
Though, from startup of jitsi, we see this warning repeat:
2020-04-01 11:17:51.581 WARNING: [119] org.jitsi.impl.neomedia.MediaStreamStatsImpl.log() invalid_rtt,stream=1372464047 ssrc=4206176817,rtt=-33151943,now=1585754271581,lsr=2963046399,dlsr=198246
This warning is documented in issue #643.
Expected Behavior
I would expect:

jitsi continues to be able to accept calls
If jitsi stops working, logs should produce an error

Possible Solution
unsure
Steps to reproduce

Install on 18.04 5.3.0-45-generic with openjdk 11 from Jitsi's unstable ppa.
Make a call using jitsi client.
Wait 10.5 minutes.
Use another phone to call the jitsi user on their extension.
Note that it does not ring on the client
Try to make a call with the client
Note that you are still able to make calls from the client -  just not receive them

Environment details

Jitsi 2.11.5624
Linux Bionic 5.3.0-45-generic #37~18.04.1-Ubuntu SMP Fri Mar 27 15:58:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)

Do any of the keepalive methods help in this situation?
Under the SIP account, there are: OPTIONS, REGISTER, CRLF. Some NAT/firewall might be closing, especially since SIP by default uses UDP. Transport used is not evident in your report.

OPTIONS are a lightweight way to keep NATs open. REGISTER will normally trigger database queries and such to check users.

authors: damencho systemcrash truelai

repo: jitsi/jitsi

license_source: bigquery


text:
[FEATURE] Cached generateStyleStringFromDeclarationsArrays method

Adding a cache to generateStyleStringFromDeclarationsArrays improves performance on my realworld tests by roughly 30%.

I don't see what the merge conflicts might be.

I think the issue is that the master on your fork https://github.com/vanderlee/emogrifier is behind this repository's master: "his branch is 7 commits behind jjriv:master"
This is how you sync your for to this repository:

(once) add this repo as another remote:
git add remote upstream git@github.com:jjriv/emogrifier.git

every now an then (i.e., when the official repo has new commits):

git checkout master
git fetch upstream
git merge upstream/master

after that, for every of your PRs:

git checkout your-pr-branch
git rebase master
(then resolve any rebase conflicts)
git push -f
Here's more documentation on this:
https://help.github.com/articles/configuring-a-remote-for-a-fork/
https://help.github.com/articles/syncing-a-fork/
https://help.github.com/articles/resolving-merge-conflicts-after-a-git-rebase/
Hope this helps! :smile:

The PR looks very good! :heart: Just on thing to check performance-wise and one idea to simplify the code.

I'll dive into performance some more later. My gut feeling tells me there is a lot of waste going on with excessive strtolower calls and manual string handling in general. There are also some in_array and strlen calls, which are typically easy to replace with noticably faster (though not necessarily pretty) alternatives.

Replaced with #211

source: gharchive/pull-request

authors: oliverklee vanderlee

repo: jjriv/emogrifier

license: mit


text:
No reaction on startScanner function

Czesc! :)
Thank you for making plugin for Zebra devices.
I have some issues with using it.
I create some simple callback on button:
const startScanner = function(){
  DataWedge.enableScanner()
  alert('start')

  DataWedge.startScanning()
    .then(e => alert('sd'))
    .catch(e => alert('error'))
}

So now when I press Button I see "Start" alert, after pressing "ok": lamp of laser scanner lights on and looking for qr or barcode. In logcat(console) I see next message:

2022-01-19 20:20:35.546 16244-16358/com.bluecap.demo V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 59421114, pluginId: DataWedge, methodName: startScanning
2022-01-19 20:20:35.546 16244-16358/com.bluecap.demo V/Capacitor: callback: 59421114, pluginId: DataWedge, methodName: startScanning, methodData: {}

And after found the code - lamp disables, but no promise result callback runs -  no alert from code above or other reaction. Console also doesn't receive new messages.
Device: Zebra TC-21

Hello, thanks for trying out the plugin.
The startScanning() method only enables the soft scan feature and doesn't return the data but I'm glad it worked since the scan event should probably fire up too!
To receive the barcode data you need to also listen for scan event, refer to the listening to event section
DataWedge.addListener('scan', result => console.log(result))

Hello,
Thank you so much for your response.
I've added the code with a listener that you've sent, and it should return a result to console, but it doesn't return any data
import { DataWedge } from "capacitor-datawedge"

const startScanner = function(){
  console.log('start')
  alert('start')

  DataWedge.startScanning()
    .then(e => alert('sd'))
    .catch(e => alert('error'))
}

DataWedge.addListener('scan', result => console.log(result))

Intent action on the device is set to "com.capacitor.datawedge.RESULT_ACTION"

That's weird, can you try out setting Intent delivery to "Broadcast Intent" and see if it works?
Currently I don't have access to zebra device so can't really confirm if that's the issue... sorry

Hello,
We've rewritten callback in catching promise of addListener function:
DataWedge.addListener('scan', result => console.log(result.data)).then(e => {console.log('promise: ' + e); DataWedge.stopScanning();});
And now it returns an empty object to the console
Line 14 - Msg: promise: [object Object]
I understand that it's difficult for you to catch this without a device, but could you tell us:

If this concept (promise catching of addListener)  right at all?
I expected to receive the object of scan listener state type, can it be because of permission issue or incorrect settings on DataWedge?

@ky-cloudprinter

1. If this concept (promise catching of addListener)  right at all?

No, return of addListener is Promise<PluginListenerHandle> & PluginListenerHandle - it is the handle used to unsubscribe from the listener, it's actually capacitor function not plugin's implementation. I could see it being misleading for you since it returns a promise but it's asynchronic because it needs to call java code. Refer to the capacitor plugin source code for more details.

2. I expected to receive the object of [scan listener state type](https://github.com/jkbz64/capacitor-datawedge#scanlistenerevent), can it be because of permission issue or incorrect settings on DataWedge?

All you need to do is to subscribe with addListener using callback(second parameter) to receive the barcode readings (assuming correct datawedge settings).
I would have an access to the device most likely next week to confirm what would be the correct datawedge settings, sorry.

@flashmatt was able to use it on TC26 & TC21, maybe he can share how he got it working

As @jkbz64 mentioned my intent delivery is set to "Broadcast Intent"
I have two methods: startScan & endScan to handle the soft scan.
startScan() {       DataWedge.startScanning();     },     endScan() {       DataWedge.stopScanning();     }
Provided the listener is configured correctly you will receive the response back as if you used the hardware buttons
My listener looks something like this...
startListener() {       DataWedge.addListener("scan", (response) => {         this.SET_SCANNED(response.data);       });     },

Similar issue on a TC75X, I added some debug logs to the DataWedge plugin, Capacitor Plugin class, and Capacitor PluginCall class. Using the logs I could see that

My listener registered successfully
The onReceive() method was being triggered on a scan
The code was making it past the DATAWEDGE_INPUT_FILTER
The data being put into the JSObject was correct
notifyListeners was being called in the Plugin class
The listener I registered was part of the iteration when responding to all active listeners
The msgHandler successfully called sendResponseMessage with the proper data in PluginCall.resolve(JSObject data)

As far as I can tell that is the entire data flow. At a loss for what else the issue could be as I feel like the debug steps above ruled out a DataWedge settings issue. I started a new project to POC this package, it is Angular 13.1, nothing in it but this + capacitor.

I'm not clued up on Angular but your logic looks correct to me. I'm assuming this code works when pressing the physical scan button on the device and its just the soft scan functionality thats not working as expected?
If I get a chance today I'll create a demo repo to show how I got it working

Demo repo available at https://github.com/clinkards/datawedge-test
The Demo is in Vue but should hopefully point you in the right direction

@flashmatt It doesn't work with physical scan or soft scan, the logs look the same for each method. Going to checkout that repo you linked to see if it works with a known good config and work backwards from there

@flashmatt I figured it out, still not sure why but I modified my imports to match the way you have them in your demo repo, once I fixed a few issues with the way the properties are accessed (I assume it was TypeScript related) everything worked hardware and soft scan included. I won't repost my original code, as it is still above so here is the new app.component.ts that works
import { Component, NgZone } from '@angular/core';
import { Plugins } from '@capacitor/core';
import { ScanListener, ScanListenerEvent } from 'capacitor-datawedge';
const { DataWedge } = Plugins;
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
  public values: string[] = [];

  constructor(private ngZone: NgZone) {
    DataWedge['addListener']('scan', this.ScanProcessor);
  }

  private ScanProcessor: ScanListener = (event: ScanListenerEvent) => {
    this.ngZone.run(() => {
      this.values.push(event.data);
    });
  };

  startScan() {
    DataWedge['startScanning']();
  }

  endScan() {
    DataWedge['stopScanning']();
  }
}

I am getting a deprecated tag on my import:

Curious what the process is to get this converted to V3

I am having trouble getting this to work as well.
The DataWedge.startScanning and DataWedge.stopScanning work fine. But it does not ever seem to trigger the callback for the scan listener for me.
  const startListener = () => {
    alert('Starting Listener');
    DataWedge.addListener('scan', (e: ScanListenerEvent) => {
      setScannedCode(e.data);
      alert(e.data);
      alert(e);
    }).catch((e) => alert(e));
  };

  useEffect(() => {
    setScannerEnabled(true);
    startListener();
  }, []);

This is the block for that.
And for my DataWedge profile on the device I have it set to Broadcast Intent and tried startService as well.
And I have the intent action as com.capacitor.datawedge.RESULT_ACTION
Device is TC52X
datawedge version is 8.2.60
Any suggestions or comments welcome.

I've looked deeper into that and it seems there were some problems with capacitor's newer versions that kept overriding my addListener override where the intent listener was registered. In the d79735bf6bbb75ab118cf324cfd2dc757c97a249 the listener is now registered when you first time import the library. It should resolve the issues, let me know if it still doesn't work.

Bless you, the update worked perfectly. Is there a way to see when a scanner is available or not?

Bless you, the update worked perfectly. Is there a way to see when a scanner is available or not?

Do you mean if the scanner hardware is available on the device? Or scanner is scanning?
This is not an official DataWedge plugin. Currently all that is supported are the things you can see in the API section and new features are usually added because someone needed it and wanted to share the features in the pure open-source nature.

Yeah I was meaning if the scanner hardware was available on the device. I'll take a look at possibly pushing up a change with that capability added for you to review.

I would probably first check if the datawedge package is installed on the device then enumerate the devices and check if there is at least one, but maybe you will find something better, thanks for using the plugin, good luck :+1:

authors: AlexZCP altimas coltonneil flashmatt jkbz64 ky-cloudprinter


text:
onnx to trt failed - RuntimeError: cannot get YoloLayer_TRT plugin creator

I'm trying to run the YoloV4 (Demo 5) in TensorRt demos repo on AWS ec2.
I created ec2 VM with nvidia-gpu (with AMI - Amazon Linux 2 AMI with NVIDIA TESLA GPU Driver),
which has: NVIDIA-SMI 450.119.01   Driver Version: 450.119.01   CUDA Version: 11.0.
On this EC2 I pulled and entered into the tensorrt official container, with:
sudo docker run --gpus all -it -v /home/ec2-user/player-detection:/home nvcr.io/nvidia/tensorrt:20.02-py3 bash
I did the following steps:

Ran python3 -m pip install --upgrade setuptools pip && python3 -m pip install nvidia-pyindex && pip install nvidia-tensorrt.
Inside the yolo/ folder, I ran:
pip3 install -r requirements.txt.
pip3 install onnx==1.9.0.
Inside the plugins/ folder, I ran make.
Inside the yolo/ folder, I ran ./download_yolo.sh && python3 yolo_to_onnx.py -m yolov4 && python3 onnx_to_tensorrt.py -m yolov4.

I got the following error for the python3 onnx_to_tensorrt.py -m yolov4 command:
 "RuntimeError: cannot get YoloLayer_TRT plugin creator"

From reading https://github.com/jkjung-avt/tensorrt_demos/issues/476 it seems that the problem is related to dynamic libaries.
I tried to view the libaries that I have, and got:
$ ldd libyolo_layer.so
	linux-vdso.so.1 (0x00007fff142a4000)
	libnvinfer.so.7 => /usr/lib/x86_64-linux-gnu/libnvinfer.so.7 (0x00007f9673734000)
	libcudart.so.11.0 => /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudart.so.11.0 (0x00007f96734af000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9673126000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9672f0e000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9672b1d000)
	libcudnn.so.8 => /usr/lib/x86_64-linux-gnu/libcudnn.so.8 (0x00007f96728f4000)
	libmyelin.so.1 => /usr/lib/x86_64-linux-gnu/libmyelin.so.1 (0x00007f9672074000)
	libnvrtc.so.11.1 => /usr/local/cuda-11.1/targets/x86_64-linux/lib/libnvrtc.so.11.1 (0x00007f966feac000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f966fca4000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f966faa0000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f966f702000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f9699135000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f966f4e3000)
	libcublas.so.11 => /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcublas.so.11 (0x00007f9668008000)
	libcublasLt.so.11 => /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcublasLt.so.11 (0x00007f965a23e000)

It seems that I miss some, and also when I tried to print all the plugins, I didn't see the YoloLayer_TRT.
Any idea how to solve it?

The solution was:

change the image tag to :21.10-py3.
change the TENSORRT_INCS to /usr/include/x86_64-linux-gnu/NvInfer* and TENSORRT_LIBS to /usr/lib/x86_64-linux-gnu/libnvinfer*.
changed computes to 70 (in my environment) - you can check your version here.

Thanks for sharing.  I think this would benefit others.

authors: jkjung-avt yagelgen


text:
Update URL

It seems the base path has changed; I've never used this before but I can get a voltage out of the thing now.

\o/ Thanks, I'll merge this and update pypi shortly. I'm going to send you a request to be a collaborator on the repo as well.

authors: jkoelker pgenera

repo: jkoelker/batterytender


text:
Implement support for EXT_meshopt_compression

Specification:
https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression
This change implements parsing support for EXT_meshopt_compression; it
only parses the extension data and allows the caller to run the
decompression itself.
To make integration easier, this change adds a data pointer to buffer
view; accessor helpers use the buffer view data as an override to
buffer's data - this allows us to implement any other buffer view based
compressors if they get created without changing accessor reading more.
To decode the data, one must use a spec-compliant decoder; here's an
example of using meshoptimizer library in concert with cgltf to decode
buffer views (after which one can continue using cgltf accessor helpers
without any changes):
static cgltf_result decompressMeshopt(cgltf_data* data) {
  for (size_t i = 0; i < data->buffer_views_count; ++i) {
    if (!data->buffer_views[i].has_meshopt_compression) continue;
    cgltf_meshopt_compression* mc = &data->buffer_views[i].meshopt_compression;

    const unsigned char* source = (const unsigned char*)mc->buffer->data;
    if (!source) return cgltf_result_invalid_gltf;
    source += mc->offset;

    void* result = malloc(mc->count * mc->stride);
    if (!result) return cgltf_result_out_of_memory;

    int rc = -1;

    switch (mc->mode) {
    case cgltf_meshopt_compression_mode_invalid:
      break;

    case cgltf_meshopt_compression_mode_attributes:
      rc = meshopt_decodeVertexBuffer(result, mc->count, mc->stride, source, mc->size);
      break;

    case cgltf_meshopt_compression_mode_triangles:
      rc = meshopt_decodeIndexBuffer(result, mc->count, mc->stride, source, mc->size);
      break;

    case cgltf_meshopt_compression_mode_indices:
      rc = meshopt_decodeIndexSequence(result, mc->count, mc->stride, source, mc->size);
      break;
    }

    if (rc != 0) return cgltf_result_io_error;

    switch (mc->filter) {
    case cgltf_meshopt_compression_filter_none:
      break;

    case cgltf_meshopt_compression_filter_octahedral:
      meshopt_decodeFilterOct(result, mc->count, mc->stride);
      break;

    case cgltf_meshopt_compression_filter_quaternion:
      meshopt_decodeFilterQuat(result, mc->count, mc->stride);
      break;

    case cgltf_meshopt_compression_filter_exponential:
      meshopt_decodeFilterExp(result, mc->count, mc->stride);
      break;
    }

    data->buffer_views[i].data = result;
  }

  return cgltf_result_success;
}

Original glTF PR for cross-linking purposes: https://github.com/KhronosGroup/glTF/pull/1830

Looks good. Awesome work on the whole extension and library by the way! :-)

authors: jkuhlmann zeux

repo: jkuhlmann/cgltf


text:
Ignored files get deleted when AUTOMATED_CONVERSION_KEEP_SOURCE is 0

Setting AUTOMATED_CONVERSION_KEEP_SOURCE to 0 deletes all file the script looks at, even if they're ignored via AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION / AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS / AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS. This makes it impossible to transcode in place using SAME_AS_SRC without also deleting secondary files like .srt or .nfo files.

What are you trying to achieve exactly ?  If you want to keep the non-video files, you should set AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION to copy.  At the end, you should have in your output folder the converted video along with other files (.srt1, .nfo`, etc).

I have setup the variables

AUTOMATED_CONVERSION_OUTPUT_SUBDIR=SAME_AS_SRC
AUTOMATED_CONVERSION_KEEP_SOURCE=0
AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION=copy
AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS=srt jpg jpeg bmp png gif txt nfo

But it still removes the .jpg or .srt files. It recognizes that that file extension is in the exclusion list, and copies the file
into the output folder. ( my /watch folder and /output folder are the same. I don't know if that is why it deletes it)
Here is what I see in the log:
[autovideoconverter] Skipping '/watch/Raya.and.the.Last.Dragon.(2021)/Raya.and.the.Last.Dragon.(2021).WEBRip-720p.mp4' (50695218196c3d430b3970f863c5bd44): already processed with failure.
[autovideoconverter] Waiting 5 seconds before processing '/watch/Raya.and.the.Last.Dragon.(2021)/fanart.jpg'...
[autovideoconverter] File '/watch/Raya.and.the.Last.Dragon.(2021)/fanart.jpg' (17a35fdd50e5579087fe5e5e4e6e0c9f) has an extension part of the exclusion list.
[autovideoconverter] File '/watch/Raya.and.the.Last.Dragon.(2021)/fanart.jpg' (17a35fdd50e5579087fe5e5e4e6e0c9f) is not a video, copying (unchanged) to output...
cp: '/watch/Raya.and.the.Last.Dragon.(2021)/fanart.jpg' and '/output/Raya.and.the.Last.Dragon.(2021)/fanart.jpg' are the same file
[autovideoconverter] Removed /watch/Raya.and.the.Last.Dragon.(2021)/fanart.jpg'.

Ok, this is your issue: the output folder can't be the same as the watch folder.
If your "original" folder on the host is your output folder in the container, you can then move it to the watch folder: after the conversion, it will be back into your original location (the output folder).

I had the same question.  I'd love if there were a way to make the watch folder and the output folder the same, and it seems like it'd work if there were a way to tell Handbrake to delete converted files, but not ignored files.
The reason I'm trying it this way is because of sonarr.  I can currently use Handbrake to convert a file prior to sonarr importing it.  Most times, sonarr sees the new file and imports it.  However, sometimes sonarr cannot find the file due the new file extension.  So instead, I'm trying to have sonarr import the file first, then Handbrake convert it and put it back in the same location.
Could this be possible or is it simply a no-go?  Alternatives I've heard of is using Slickbeard (there's a container with it built into sonarr/radarr), however I'd much prefer Handbrake if it can work automatically.

Ok, this is your issue: the output folder can't be the same as the watch folder. If your "original" folder on the host is your output folder in the container, you can then move it to the watch folder: after the conversion, it will be back into your original location (the output folder).

Hi Jocelyn,
For many folks using media servers, it is common for live TV/DVR to record directly into the hosts "tv" folder. In this case, if I am converting the recoded show using handbrake, then output folder has to also be the hosts "tv" folder with all the included subdirectories and such to let the media server organize and display things properly.
At the same time, I would like the host tv folder to be watched, so newly recorded shows trigger the automatic conversion.
How would you recommend configuring handbrake to watch "folder X" for .ts files (common DVR format), and when new .ts files are detected, convert them and save them in the same directory?

Can an intermediate folder be used ?  I mean:

The live TV/DVR could record to the "recording" folder on the host.
This same folder would be the watch folder of HandBrake.
The encoded video would be written into the "tv" folder on the host.

Yes, this is what I have done. It's not quite as clean, as Emby (and likely other media servers) seem to force additionally media libraries into the system to handle the intermediate folders, but it's not a deal breaker. However, allowing the same folder for watch and output would be very cool. It seems to me files and hashes are stored in the HB database to prevent re-processing of the same files in loops? If so, is there a technical barrier to allowing the 2 folders to be the same?

as Emby (and likely other media servers) seem to auto-create media libraries into the system to handle the intermediate folders

Does this intermediate folder need to be handled by Emby ?

If so, is there a technical barrier to allowing the 2 folders to be the same?

With the current implementation, the encoded file would be detected as a new file.  Thus, the system will try to re-encode it again.

In Emby, you specify a path for recording shows (for example). I now have this path set as a watch folder. After conversion, files are moved to the "actual" shows library. Unfortunately, Emby insists that the recording location be it's own library.
As you can see here, the "dvr" folders where I record automatically appear as libraries, even though they are always empty (after conversion of course).

In a typical setup, the DVR paths are set to the library paths for shows/movies, and so you record into the same folder as you store the data:
Here is my Emby DVR config showing the "intermediate" folders.

I suppose most folks get around this by using an Emby post-processing script to control handbrake once a recording is complete, avoiding the complication of watch and output folders. Maybe I'll dig into that one day :)

authors: Junto026 icopp jlesage samson-assamnew vdrover

repo: jlesage/docker-handbrake


text:
7.0.0

The next major release of karma-rollup-preprocessor in response to Rollup 1.0 🎉
Pre-release
Added

Support for Rollup 1.0.0 #42

Changed

Breaking: Dropped support for Rollup < 1.0.0
Breaking: Dropped support for Node < 8.0.0
Watcher no longer relies on Karma’s run_start event. #41
Upgraded dependencies.

Fixed

Watcher only rebundles changed files and their dependents. #28
Bundle cache now properly maps each entry to its bundle cache.

Hey all! 👋🏽
@isidrok @tatey @niksy @thisconnect @calebdwilliams @abaksha-sc @Paulskit @LvChengbin
@ckbo3hrk @pantosha @MartijnR @fengyuanchen @givanse @wifilinker @danielnaab
You all have participated in issues addressed in this release — if you don't mind, please help test by installing the pre-release (under the next tag):
npm install karma-rollup-preprocessor@next

Thanks for the feedback everyone! 7.0.0 is live! 🎉

repo: jlmakes/karma-rollup-preprocessor


text:
Jar file update

Updating jar file.

Ok


text:
Fix sheet name length calculation

Xlsx supports sheet names with 31 characters.
But &str.len() is returning utf8 bytes count instead of chars count.
I checked this fix with cyrillic sheet name.

Thanks. That was the intended behaviour. Merged.

authors: Fight-For-Food jmcnamara


text:
Add ownership to resources

The URLs for client-side retrieval will then become:
Categories
GET /api/users/:userId/categories

Transactions
GET /api/users/:userId/transactions

To get, say, all of the transactions for a given category, you could do:
GET /api/users/:userId/categories/:categoryId?includes=transactions

Closing as dupe of #329

repo: jmeas/moolah


text:
Daily update

Automated changes by create-pull-request GitHub action

Build failed because of:
No cached entry, and 3-Shake Inc has issues with logo: https://lf-master-organization-logos-prod.s3.us-east-2.amazonaws.com/3-shake%2Cinc.svg, SVG file embeds a png. Please use a pure svg file
Empty twitter for CSIRO/DATA 61: https://twitter.com/CSIROnews
Empty twitter for TYNYBAY Inc: https://twitter.com/tynybayinc
Empty twitter for Tectonic Labs Ltd.: https://twitter.com/cloud_ridge
Empty twitter for Truepic, Inc.: https://twitter.com/truepicinc
Empty twitter for eBaoTech International Pte Ltd: https://twitter.com/Ebaotech
Empty twitter for Apple: https://twitter.com/Apple
Empty twitter for China Telecommunications Corporation: https://twitter.com/chinatelecom1
Item 3-Shake Inc has no image_data

Build failed because of:
No cached entry, and 3-Shake Inc has issues with logo: https://lf-master-organization-logos-prod.s3.us-east-2.amazonaws.com/3-shake%2Cinc.svg, SVG file embeds a png. Please use a pure svg file
Empty twitter for Truepic, Inc.: https://twitter.com/truepicinc
Empty twitter for TYNYBAY Inc: https://twitter.com/tynybayinc
Empty twitter for CSIRO/DATA 61: https://twitter.com/CSIROnews
Empty twitter for Tectonic Labs Ltd.: https://twitter.com/cloud_ridge
Empty twitter for eBaoTech International Pte Ltd: https://twitter.com/Ebaotech
Empty twitter for China Telecommunications Corporation: https://twitter.com/chinatelecom1
Empty twitter for Apple: https://twitter.com/Apple
Item 3-Shake Inc has no image_data

authors: CNCF-Bot jmertic

repo: jmertic/lf-landscape


text:
[Feature Request] Customize double tapping for internal player

Describe your suggested feature
I'd if I could choose to make it skip a customizable amount of time
Other details
No response
Acknowledgements

[X] I have searched the existing issues and this is a new ticket, NOT a duplicate or related to another open issue.
[X] I have written a short but informative title.
[X] If this is an issue with an extension, I should be opening an issue in the extensions repository.
[X] I have updated the app to version 0.12.2.3.
[X] I will fill out all of the requested information in this form.

added with 950ecb4be1df84265488ae18f5f1a7dad660c9dc


text:
"sql: error no rows" while trying to find a row by NULL column

The problem is that sqlx doesn't convert nil to "IS NULL". See examples below.
Here is an example that does not work properly:
q := `
  SELECT "id", "title", "text", "next_id", "book_id"
  FROM "pages"
  WHERE "book_id"=$1, "next_id"=$2
  LIMIT 1
`
row := tx.QueryRowx(q, id, nil)

Here is an example that works:
q := `
  SELECT "id", "title", "text", "next_id", "book_id"
  FROM "pages"
  WHERE "book_id"=$1, "next_id" IS NULL
  LIMIT 1
`
row := tx.QueryRowx(q, id)

I didn't find this behavior in docs, so decided to post it here.
May be it will be better to add "sqlx.Nil" and "sqlx.NotNil" vars or something like this?

This is an interesting idea but I don't think there's a way to support this;  sqlx would have to rewrite the query in a way that I don't think would be anticipated by most users.

This is an interesting idea but I don't think there's a way to support this;  sqlx would have to rewrite the query in a way that I don't think would be anticipated by most users.

authors: KlimSidorov jmoiron

repo: jmoiron/sqlx


text:
Create test helpers

It would be nice to streamline testing for candy check so stubbing verification gets easier.
More info to follow.

I'd also like this

Let's discuss the feature-set for this test helper:

I expect to fake the results of CandyCheck::AppStore::Verifier and CandyCheck::PlayStore::Verifier: returning a Receipt, a VerificationFailure or raising an error.
Should this be done globally or per instance? Global faking would make the test look nicer, but I fear problems due to concurrency.
I think we need a core implementation and in a best case scenario test framework adapters.

So thoughts on this.
I think it should be similar to how the Ruby geocoder gem does it. I know this is a Rails example but here is how we implemented stubbing out geolocation request form that gem, its similar concept in that is using a google api service. In this case, we just have two services, apple and google.
module GeocodingHelpers
  def stub_location_lookup(locations)
    locations.each do |query, properties|
      Geocoder::Lookup::Test.add_stub(
        query,
        [properties.with_indifferent_access],
      )
    end
  end

  def stub_unknown_location_lookup(query)
    allow(Geocoder).to receive(:coordinates).with(query).and_return(nil)
  end
end

RSpec.configure do |config|
  config.before(:all) { Geocoder.configure(lookup: :test) }
  config.include GeocodingHelpers
end

For reference, the geolocator test app is here: https://github.com/alexreisner/geocoder_test
We could make some improvements I'm sure but might be worth looking at as a good starting point.
Also, I think if everything is written where dependency injection is requried ie: fetch libs etc, stubbing out a specific instance shouldn't be hard. It would be nice to be able to set up a 'test' mode which returns some stubbed objects of ReceiptStub and VerificationFailureStub

I think this would be a step in the right direction. In detail the gem should not make assumptions about the test framework, but  could be instrumented as in the given example.

authors: fourcolors jnbt splattael


text:
Using Capybara.app_host remove # symbol when open URL in browser (Capybara v3.0)

Steps to reproduce:
Capybara.app_host = 'http://example.com/#/'
Capybara.visit('line/1')
ExpR: Opens http://example.com/#/line/1
ActR: Opens http://example.com/line/1

I'm curious as to why you'd ever set Capybara.app_host to 'http://example.com/#/'   ??

I guess such approach is used sometimes for single page applications.

@abotalov In that case I think one should just call visit('#/line/1')  then so it's clear in the test you're setting the target - otherwise calling visit('line/1') is going to be pretty confusing to most people

IMHO this behavior wouldn't make sense -- if you want to visit based on the target portion of the URL then include the '#' in the visit method, otherwise the test becomes ambiguous

authors: abotalov askaa twalpole

repo: jnicklas/capybara


text:
Add Test Student

I added a new student called Test Student.

Looks good!

repo: jnoahjohnson/git-talk


text:
bug: Unable to ban numbers

Expected behavior
Using this pattern with numbers
pattern`|666|`

I expect that to be matched
Actual behavior
it's not matched
Minimal reproducible example
import {
  DataSet,
  RegExpMatcher,
  englishRecommendedTransformers,
  pattern,
} from "obscenity";

const customDataset = new DataSet();
customDataset.addPhrase((phrase) => phrase.setMetadata({ originalWord: "666" }).addPattern(pattern`|666|`));
const matcher = new RegExpMatcher({
        ...customDataset.build(),
        ...englishRecommendedTransformers
      });

matcher.getAllMatches("666").length //=> 0

Steps to reproduce

Use that code
See 0, but expected 1

Additional context
No response
Node.js version
v16.6.1
Obscenity version
0.1.1
Priority

[X] Low
[ ] Medium
[ ] High

Terms

[X] I agree to follow the project's Code of Conduct.
[X] I have searched existing issues for similar reports.

The issue you're seeing here is caused by the collapse duplicates transformer, which is included in the set of recommended transformers. After this transformer is applied, the original input 666 becomes 6 which no longer matches the pattern 666; there's a warning to this effect in the documentation of the transformer:

This transformer should be used with caution, as while it can make certain
patterns match text that wouldn't have been matched before, it can also go
the other way. For example, the pattern hello clearly matches hello, but
with this transformer, by default, hello would become helo which does
not match. In this cases, the customThresholds option can be used to
allow two ls in a row, making it leave hello unchanged.

Thus to avoid this behavior you can either do as is suggested above and add a custom threshold that avoids transforming 6, or disable the transformer entirely.
As the behavior is documented I'm inclined to mark this as not a bug, though I absolutely see how the library behaves unintuitively in this case and would be open to considering suggestions for improvement.

Thanks for responding! That makes sense for 666, but I think this also fails for any number. For example 8562.
To add a bit more context to this, I'm using this in a live chat filter for my site. The chat exists on a live-stream page where the streamer can set which words they'd like to ban. This came up because a streamer had set the different parts of their address as "banned words" to avoid being doxxed in real-time. So for example, "8562" is banned
const customDataset = new DataSet();
customDataset.addPhrase((phrase) => {
  return phrase.setMetadata({ originalWord: "8562" })
    .addPattern(parseRawPattern("8562"))
    .addPattern(pattern`|8562|`)
});
const matcher = new RegExpMatcher({
        ...customDataset.build(),
        ...englishRecommendedTransformers
      });

matcher.getAllMatches("8562").length //=> 0

Though, this may just be because I have my patterns wrong... You've done a really great job with adding docs, so I may just be missing something.

This one is really quite unfortunate. The issue is again due to one of the default transformers, which skips non-alphabetic characters; this allows patterns such as foo to match f_o_o. Hence 8562 is transformed to the empty string which matches nothing.
While this is not a bug per se I think this is extremely unintuitive behavior and I'm inclined to remove this transformer from the set of recommended ones for English text, or perhaps even removing "recommended" transformers in general. The original intent was to provide something that works nicely out of the box, but as your report shows once anything custom is added it's easy for it to become confusing. WDYT?

Also, on an unrelated note — would you be willing to comment on which parts of the Obscenity API you use in your project? In particular, I'm curious as to whether you use any of the more complex features (custom transformers, censors, etc.) The reason I'm asking is now that I have a bit more time to work on open source, I'm thinking about cleaning up the API a little and releasing a v1.0.0, but if users are tied to the existing API I'll hold off on that.

I think your idea makes sense.
As for the API, I don't get too crazy with it. There's probably a lot more I should be doing with it that I'm not currently.
For the most part, that code I pasted above is essentially it. We have 2 separate functions where the first one is our default banned words.
import {
  DataSet,
  RegExpMatcher,
  englishRecommendedTransformers,
  pattern,
} from "obscenity";

const joystickDataset = new DataSet()
  .addPhrase((phrase) => {
                // they generally follow this pattern
		return phrase
			.setMetadata({ originalWord: 'badword' })
			.addPattern(pattern`badword`)
			.addWhitelistedTerm('...') // some close related word
	})
  .setMetadata({ originalWord: 'otherword' })
			.addPattern(pattern`oth[e]rword`)
			.addPattern(pattern`|oth|`)
			.addPattern(pattern`|word|`)
			.addPattern(pattern`?therword`)
const matcher = new RegExpMatcher({
  ...joystickDataset.build(),
  ...englishRecommendedTransformers,
});
export default {
  methods: {
    isTextInViolation(text) {
      return matcher.getAllMatches(text).length > 0;
    },
  }
}

Then we have the second function where a streamer can specify which words or phrases they want banned
bannedChatWordsDataset() {
  const customDataset = new DataSet();
  this.streamer.bannedChatWords.forEach((item, idx) => {
    const word = item.toLowerCase();
    customDataset.addPhrase((phrase) => {
      return phrase
        .setMetadata({ originalWord: word })
        .addPattern(parseRawPattern(word))
        .addPattern(pattern`|${word}`)
        .addPattern(pattern`${word}|`)
    });
  });

  return customDataset;
},

bannedChatWordsMatcher() {
  return new RegExpMatcher({
    ...this.bannedChatWordsDataset.build(),
    ...englishRecommendedTransformers
  });
},
isMessageInViolationOfBannedChatWords(message) {
      return this.bannedChatWordsMatcher.getAllMatches(message).length > 0;
    },

We do still have a few bugs around this implementation. I believe there's some words where you can't say just the word, but if you use it in a sentence, then it goes through... I have to come back to that portion later.
Stoked to hear you'll have more time on this though! It's a great project :heart:

Thanks for the response, that's helpful!
Back to the issue: I anticipate that I'll have time to work on releasing a fix next weekend, but for now you should be able to work around it in your application by passing a custom set of transformers instead of englishRecommendedTransformers.

Since v0.2.0 (released January), this should not be an issue as the problematic transformer is not included by default.


text:
🛑 earthlink status-backbone is down

In 5bcbd30, earthlink status-backbone (status-backbone.earthlink.ro) was down:

HTTP code: 502
Response time: 792 ms

Resolved: earthlink status-backbone is back up in 0d2de7a.


text:
🛑 CEI Sales Wiki is down

In 82919bf, CEI Sales Wiki (https://wiki.ceisales.com/login) was down:

HTTP code: 500
Response time: 19681 ms

Resolved: CEI Sales Wiki is back up in d538fb4 after 18 minutes.


text:
🛑 CEI Sales is down

In a2a91cb, CEI Sales (https://ceisales.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: CEI Sales is back up in 8e4ce4d after 19 minutes.


text:
🛑 MegaConstruct is down

In ed0c0dd, MegaConstruct (https://www.megaconstruct.ro) was down:

HTTP code: 0
Response time: 0 ms

Resolved: MegaConstruct is back up in bf21054.


text:
🛑 KM Digital is down

In 92db823, KM Digital (https://k-m.com) was down:

HTTP code: 403
Response time: 71 ms

Resolved: KM Digital is back up in 9e54704.


text:
🛑 Security & Telecom Systems is down

In ee17e8a, Security & Telecom Systems (https://security-telecom.ro) was down:

HTTP code: 403
Response time: 1291 ms

Resolved: Security & Telecom Systems is back up in 93c3a5d after 6 minutes.


text:
Clarify the difference between Ranges and Pipes

In .Net (c#) the difference is clear. They have IEnumerable and IObservable. Roughly speaking
Ranges are IEnumerable ( interactive )
and
Pipes are IObservable ( reactive )
The basic interfaces of each type have the same shape with the  difference described succinctly.
IEnumerable allows you to write queries over space
IObservable allows you to write queries over time
or another way to see it is that
IEnumerable is  pull based. The consumer asks for the next value
IObservable is push based. The consumer waits for the next value
That being said there exists a library call ReactiveExtensions that has a C++ port that follows the same reactive model that Pipes uses. https://github.com/ReactiveX/RxCpp Maybe you can get some inspiration from that code. There are loads of operators for dealing with time that space based query engines such as rangev3 don't need to worry about. async and threads and scheduling etc.
Regards
Brad

Thanks Brad for presenting the design different this way, and for the references. I've updated the documentation to include this insight about the design.

Can someone explain the difference between RxCpp and Pipes, or what factors may affect the decision to use one instead of the other? For me it looks like both Pipes and RxCpp cover the same front.

authors: MSK61 bradphelan joboccara

repo: joboccara/pipes


text:
Github actions for CI/CD of docker images

Could refer to https://www.prestonlamb.com/blog/creating-a-docker-image-with-github-actions for reference

@ivanfoong I am looking into it at the moment. Will update Tomorrow on the progress.

Moving this to the current week as need bit more time. There is one open PR #39
After this is merged need to send one more PR.

@ivanfoong check if you can pick this up and help to clean up the existing Docker setup?

Could setup docker swarm and use https://github.com/marketplace/actions/docker-swarm-deploy

Depends on #82

authors: ivanfoong subhransu

repo: jobsgowhere/jobsgowhere


text:
Theme error

https://cdn.discordapp.com/attachments/415246389287583757/607119377833132042/unknown.png
https://cdn.discordapp.com/attachments/415246389287583757/607115424978567168/unknown.png
when creating or joining a server the theme is broken for those dialogs

Fixed in 12540f8


text:
New installer (Blom plz release)

It's pretty clear that the current installer is in need of replacement, particularly because of the lack of cross-platform support. So the purpose of this issue is to combine #49, #70, and #92 and just say we need something new.
To summarize, the issues that need to be addressed are:

[ ] Proper cross-platform support
[ ] Option to choose beta branch or a custom fork
[ ] Better path-finding, including custom paths and allowing spaces in usernames
[ ] If the user needs dependencies, prompt them instead of letting it throw an error
[ ] Attempt to download and extract files before injecting to avoid broken Discord installations
[ ] Add other checks to make sure that files exist and add some error handling in index.js or the file that points to injection.js (since the injection method will likely be changed as well)

I think there also should be a static install directory, for example in %localappdata% since Discord is also stored in there, and some people do not know where the installer installs ED by default. It would make everything much easier


text:
Use babel instead of react-tools?

$ npm install --save-dev laravel-elixir-react

npm WARN deprecated react-tools@0.12.2: react-tools is deprecated. For more information, visit https://fb.me/react-tools-deprecated

@18601673727 thanks! In that case maybe it would be better to deprecate this package since Laravel Elixir already support babel by default. See https://github.com/sindresorhus/gulp-react/issues/37 what do you think?

@joecohens Yeah, my opinion is just like yours.

repo: joecohens/laravel-elixir-react


text:
Code cleanup

Check List:

Fixes #???
Unit tests : NA
Javadoc with a code example (API only) : YES / NO / NA

Notes
Most of these changes are documentation improvements and cleanup.
Plan on tackling some of the other problems, like a handful of {@link}s and also some language migrations to Java 8 lambdas and other improvements after this.

Thanks for the code review and cleanup !
I haven't used much java 8 features as I want to keep the master branch close to my 2.x branch (that relies on Java 7) so that features developed on 2.x are easy to merge in master.

Thanks !

authors: joel-costigliola mkobit

repo: joel-costigliola/assertj-core


text:
SVUI causing issues with Blizzard PVPUI (HonorFrame)

@klepp0906 says: 1x Blizzard_PVPUI\Blizzard_PVPUI-1.0.lua:518: attempt to index field 'selectedButton' (a nil value)
Blizzard_PVPUI\Blizzard_PVPUI-1.0.lua:518: in function HonorFrame_UpdateQueueButtons' Blizzard_PVPUI\Blizzard_PVPUI-1.0.lua:600: in functionHonorFrameSpecificList_Update'
Blizzard_PVPUI\Blizzard_PVPUI-1.0.lua:419: in function
Locals:
HonorFrame = HonorFrame {
0 =
type = "bonus"
BonusFrame = {
}
QueueButton = HonorFrameQueueButton {
}
SpecificFrame = HonorFrameSpecificFrame {
}
XPBar = {
}
Inset = {
}
RoleInset = {
}
}
canQueue = nil
denied = nil
(temporary) = nil
(temporary) = HonorFrameQueueButton {
0 =
Text = HonorFrameQueueButtonText {
}
RightSeparator = HonorFrameQueueButton_RightSeparator {
}
LeftSeparator = HonorFrameQueueButton_LeftSeparator {
}
Right = {
}
Middle = {
}
Left = {
}
}
(temporary) = defined =[C]:-1
(temporary) = defined :OnDisable:1
(temporary) = "attempt to index field 'selectedButton' (a nil value)"

Caused by force load in tokens.lua - Fixed in latest update.

repo: joev/SVUI-Temp


text:
Using SVGs

Would it be possible to support SVG rendering?
![SVG doesn't work](image.svg)

or <svg><path...
Also it would be nice if there was an option to leave other file types alone and just let the browser render them as it would, without trying to parse them.
Thanks!

This works fine for me. What's the exact command you're running?
Here's what I tried:
Command
$ grip

Files

README.md
Testing!
========

![SVG doesn't work](image.svg)

image.svg

I used grip.exe --browser "$file" and simply grip, and tried it in latest Firefox, Chrome and Opera. None of them worked.
The latter 2 browsers show a broken image placeholder with a link. When I follow the link it's an empty Grip page. Firefox shows the alt-text as a plain link, and still nothing at http://localhost:6419/image.svg.

What is $file? Can you give me an example of what that resolves to?

$file is a placeholder for the full path to a file. In Windows it resolves to something like C:\path\to\file.md

@akaleeroy Ok good, that's what I thought you meant.
So to be clear, you're running and seeing the following, right?
C:\grip-test>dir
 Volume in drive C has no label.
 Volume Serial Number is [...]

 Directory of C:\grip-test

01/03/2016  01:28 PM    <DIR>          .
01/03/2016  01:28 PM    <DIR>          ..
01/03/2016  01:28 PM             6,518 image.svg
01/03/2016  01:28 PM                30 README.md
               2 File(s)          6,548 bytes
               2 Dir(s)           [...] bytes free

C:\grip-test>grip.exe --browser "C:\grip-test\README.md"

And loading http://localhost:6419/ shows a Grip page with a broken SVG. Does it look like this?

Also, does visiting http://localhost:6419/image.svg show a 200 or a 404 request in the terminal?

Yep, that's correct.
Visiting http://localhost:6419/image.svg shows a 200 but doesn't render the image as an image. Instead it attempts to parse it and shows

What it should show is the correctly rendered image:

Interesting. I'm not able to reproduce.
What version of Grip are you using?
> grip -V

What version of Python?

Grip 4.1.0, Python 2.7.11.
Tried it in every browser.

Any luck on this?
I was only able to reproduce if I run grip on the image file directly and visiting http://localhost:6419/. (Visiting http://localhost:6419/image.svg rendered the image just fine.)
$ grip image.svg
 * Running on http://localhost:6419/ (Press CTRL+C to quit)

But that's not what you're doing. So hmmm.
Could you upload the SVG file somewhere? Or try saving the following to README.md and running grip on it?
Testing!
========

![Works!](https://upload.wikimedia.org/wikipedia/commons/3/30/Vector-based_example.svg)

Fetching from the web works, but if I save the image it doesn't. What happens instead I described above.
![Doesn't work!](image.svg)
http://localhost:6419/image.svg

Wow, this is baffling. I just re-read this whole thread to make sure I didn't miss anything.
I wonder if the MIME type is getting confused somehow. Could you try the following?

Run Python
import mimetypes
mimetypes.guess_type('image.svg')

And let me know what gets returned. Thanks for being patient with this!

>>> import mimetypes
>>> mimetypes.guess_type('image.svg')
(None, None)

I killed my Python 2 and installed Python 3. mimetypes.guess_type returns ('image/svg+xml', None) and grip works as expected.
I do not know what the f^@# happened but f*^% Python on Windows.
Thanks for the help, I guess you can close this now.

FYI, v4.2.0 contains a fix for this. Grip will now render SVGs when using Python 2.6 and below.
Thanks for opening and being patient with this issue, @akaleeroy!

authors: akaleeroy joeyespo

repo: joeyespo/grip


text:
-e/--existing-ids option not working?

Hi there!
This is such a great tool. After < 24 hours working with this I can tell that our group is going to get a ton of mileage out of cual-id, so thank you very much!
I'm currently running cual-id on High Sierra (10.13.6) and have only had one issue: the --existing-ids option doesn't seem to work!
I installed cual-id into its own Conda env without issue:
conda create -c https://conda.anaconda.org/johnchase -n cual-id python=3 cual-id
source activate cual-id

I get the following output from cual-id --help:
(cual-id) myID@machine:~$ cual-id --help
Usage: cual-id [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  create  Command to create barcode labels or sample...
  fix     Compare a set of possibly invalid IDs against...

And generating IDs with --length/-l and --fail-threshold/-f works without issue:
(cual-id) myID@machine:~$ time cual-id create ids -l 10 -f 0.99 10
5cfc82d2-041a-41b3-898d-fbec9b47bff7	ec9b47bff7
31abdf17-b0bd-4e5f-b0b0-e254bf8be4a7	54bf8be4a7
1f5483ba-492c-4baa-a489-e5c891db6149	c891db6149
4d07142a-669b-4513-a125-299377ac9be8	9377ac9be8
c4705cd4-623f-44eb-9195-edcff7367e41	cff7367e41
61f01f14-7403-42a7-8355-2ca629729804	a629729804
2fc45e0b-3726-491a-a969-13cf60d1b53d	cf60d1b53d
d8218270-0e52-4138-9106-5727766baef3	27766baef3
104cb1dc-24b6-4665-9624-612fb13c26e9	2fb13c26e9
ab02825b-88ed-4b6b-8a99-ac33ae581fbb	33ae581fbb

real	0m0.245s
user	0m0.200s
sys	0m0.041s

(cual-id) myID@machine:~$ time cual-id create ids --length 10 --fail-threshold 0.99 10
22281f49-5be0-4465-a38f-0e0650e47f4b	0650e47f4b
b03e9988-ea9b-42fa-ac6c-eadd0253a688	dd0253a688
6b191d3b-25f5-4d73-809d-4e504bf9f15d	504bf9f15d
6d4d3097-c671-4b1d-818a-75e01d3987d0	e01d3987d0
33cd7df0-9c3b-46a0-98f1-dde555baa009	e555baa009
93fa15f8-ddcc-4611-aaad-0de4ca694c4a	e4ca694c4a
08b6c9c2-9375-4ef4-8ab5-182e90cea65d	2e90cea65d
d32d0d73-fcf0-4049-a8da-fa950016ba38	950016ba38
f6fcec23-38a4-4e9a-a256-ac682bfcc036	682bfcc036
46eaefc4-2cc1-4d48-aeb2-cc26a3c195fb	26a3c195fb

real	0m0.246s
user	0m0.201s
sys	0m0.040s

But, when I write to file and try to use a pre-existing file to create IDs, I get the following error:
(cual-id) myID@machine:~$ time cual-id create ids --length 10 --fail-threshold 0.99 10 > test-ids.txt

real	0m0.247s
user	0m0.201s
sys	0m0.042s
(cual-id) myID@machine:~$ head test-ids.txt
dccc9d88-7e36-477a-ac4a-610ada8bc9fe	0ada8bc9fe
c296e7d2-fb98-4e31-a4d8-83e1e2999836	e1e2999836
c825451d-4317-4099-8ae0-7a2e4b8a7ee3	2e4b8a7ee3
ea7e6d72-c82a-4840-ad88-9a3c2c7f5435	3c2c7f5435
4df91764-4d5a-4301-8472-8c78cb3f0853	78cb3f0853
d92744b0-342b-4cdd-a084-1a462c6f39a6	462c6f39a6
555202bf-434d-4d2c-b01e-73aa52ee002d	aa52ee002d
75eaa961-9b62-4628-9071-5b02be0260cb	02be0260cb
b3a6ffed-895e-4011-aa58-c2f30ae87cd5	f30ae87cd5
75316bf9-81c7-4ca4-8517-4aefa2e9f8f3	efa2e9f8f3
(cual-id) myID@machine:~$ time cual-id create ids --length 10 --fail-threshold 0.99 --existing-ids test-ids.txt 10
Error: no such option: --existing-ids

real	0m0.242s
user	0m0.198s
sys	0m0.040s

I can see that --existing-ids should be an option as it's clearly in cual-id/cual-id at master at line 36:
@click.option('-e', '--existing-ids', type=click.File('U'), default=None, required=False)

Am I missing something? Thanks a ton!

Thanks you for posting the issue you are running into. The problem here is that the cual-id version on conda and pypi is the "release" version which does not contain all of the functionality that is present on github in the "development" version. What this means in reality is that I really need to issue a release so that all of the new functionality is present on conda and pypi.
To have access to all of the functionality immediately you can install directly from github with pip. To do this you will want to first uninstall the conda version of cual-id and then:
$ pip install https://github.com/johnchase/cual-id/archive/master.zip

or
$ git clone https://github.com/johnchase/cual-id.git
$ cd cual-id
$ pip install .

The issue of a release is here #40, however I think this issue should remain open until a new release is issued. @ebolyen do you want to add anything to this?

Thanks @johnchase and @ebolyen! For lazy people looking for a quick install until the latest version is on Conda, the following works great:
conda create --name cual-id python=3.5.5
source activate cual-id
pip install https://github.com/johnchase/cual-id/archive/master.zip
cual-id --help

authors: johnchase wyattmcdonnell

repo: johnchase/cual-id


text:
Flash fallback: possible to have height and width 100%?

I have added an inline style to the video tag defining 100% width and height, like so:

However when the Flash fallback is used, the video doesn't stretch all the way to the total height, but it remains locked in aspect to the 100% width. I couldn't find a definitive answer to this, is it possible to have the video stretch out to 100% width and height of the container when using the flash fallback?

@CoenWarmer Closing old issues. If you'd like to reopen this, let us know. Thanks!

repo: johndyer/mediaelement


text:
3.28

You have an on-premises network that contains 100 servers.
You need to recommend a solution that provides additional resources to your users. The solution
must minimize capital and operational expenditure costs.
What should you include in the recommendation?
A. a complete migration to the public cloud
B. an additional data center
C. a private cloud
D. a hybrid cloud

C

repo: johnnieng/afun


text:
doesn't work when first word in the line is tag name

prefix:   PREFIX-
expected:
.PREFIX-btn-danger[disabled],
fieldset[disabled] .PREFIX-btn-danger,
.PREFIX-btn-danger.PREFIX-disabled:hover,

actually:
.PREFIX-btn-danger[disabled],
fieldset[disabled] .btn-danger,
.PREFIX-btn-danger.PREFIX-disabled:hover,

Thanks for opening this issue, @rostowner. I'll have some time this afternoon to work on a fix. I'll keep you posted.

I've just published version 1.0.0 which should fix prefixing nested classes. Thanks for reporting!

authors: johnotander rostowner

repo: johnotander/gulp-class-prefix


text:
text3

[x] Turn on GitHub Pages
[x] Outline my portfolio
[x] Introduce myself to the world

[ ] Turn on GitHub Pages
[ ] Outline my portfolio
[ ] Introduce myself to the world


text:
[vue-tsc@^0.36] Invalid declaration when using

<template>

{{ msg }}

    Recommended IDE setup:
    VS Code
    +
    Volar

See README.md for more information.

      Vite Docs

    |
    Vue 3 Docs

  <button type="button" @click="count++">count is: {{ count }}</button>

    Edit
    components/HelloWorld.vue to test hot module replacement.

</template>

Output
The generated HelloWorld.vue.d.ts is different between v0.35 and v0.36 of vue-tsc.
v0.35
declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
    msg: string;
}>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
    msg: string;
}>>>, {}>;
export default _default;
declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: import('vue').PropType<T[K]>;
        required: true;
    };
};

v0.36
declare const _default: new () => {
    $: import("vue").ComponentInternalInstance;
    $data: {};
    $props: Partial<{}> & Omit<Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
        msg: string;
    }>>> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>;
    $attrs: {
        [x: string]: unknown;
    };
    $refs: {
        [x: string]: unknown;
    };
    $slots: Readonly<{
        [name: string]: import("vue").Slot | undefined;
    }>;
    $root: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
    $parent: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
    $emit: (event: string, ...args: any[]) => void;
    $el: any;
    $options: import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
        msg: string;
    }>>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {}> & {
        beforeCreate?: ((() => void) | (() => void)[]) | undefined;
        created?: ((() => void) | (() => void)[]) | undefined;
        beforeMount?: ((() => void) | (() => void)[]) | undefined;
        mounted?: ((() => void) | (() => void)[]) | undefined;
        beforeUpdate?: ((() => void) | (() => void)[]) | undefined;
        updated?: ((() => void) | (() => void)[]) | undefined;
        activated?: ((() => void) | (() => void)[]) | undefined;
        deactivated?: ((() => void) | (() => void)[]) | undefined;
        beforeDestroy?: ((() => void) | (() => void)[]) | undefined;
        beforeUnmount?: ((() => void) | (() => void)[]) | undefined;
        destroyed?: ((() => void) | (() => void)[]) | undefined;
        unmounted?: ((() => void) | (() => void)[]) | undefined;
        renderTracked?: (((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[]) | undefined;
        renderTriggered?: (((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[]) | undefined;
        errorCaptured?: (((err: unknown, instance: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null, info: string) => boolean | void)[]) | undefined;
    };
    $forceUpdate: () => void;
    $nextTick: typeof import("vue").nextTick;
    $watch(source: string | Function, cb: Function, options?: import("vue").WatchOptions<boolean> | undefined): import("vue").WatchStopHandle;
} & Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
    msg: string;
}>>> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {
    $slots: typeof import('./HelloWorld.vue.__VLS_template').default;
};
export default _default;
declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: import('vue').PropType<T[K]>;
        required: true;
    };
};

Problem
Problem is this line: $slots: typeof import('./HelloWorld.vue.__VLS_template').default; that is generated by v0.36. I'm not sure why this is happening but I think one of these two commits causes the issue:

f4baefad74f2470a737c5f98ae2c988f3b2aadd5
b10f6362ee2542d601d2812b805ea7944395ef1a

Workaround
Don't use

Output
declare const _default: import("vue").DefineComponent<{
    msg: {
        type: StringConstructor;
        required: true;
    };
}, {
    cout: import("vue").Ref<number>;
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
    msg: {
        type: StringConstructor;
        required: true;
    };
}>>, {}>;
export default _default;

Hi @bounoable, this behavior have been change after v0.37.0, please let me know if it works for you or not.

The latest version of the code is a bit different: https://github.com/johnsoncodehk/volar/blob/3485f7bdcb38b903990a9a8a7b3c3a8428050406/packages/vue-code-gen/src/generators/script.ts#L528
I see the problem now, App.vue.__VLS_template will not emit on vue-tsc, so there should not have $slots define for typed template slots. Thank you. :)

authors: bounoable johnsoncodehk

repo: johnsoncodehk/volar


text:
cannot correctly infer type for $slots of global components

reproduce repo:  https://github.com/aimergenge/volar-slots-reproduce
run pnpm lint, get:
src/components/CompB.vue:3:26 - error TS7022: 'name' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

3     <template v-for="(_, name) in $slots"
                           ~~~~

src/components/CompB.vue:5:14 - error TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ one: {}; two: {}; } & ({} | {})'.

5       v-slot:[name]="slotData"
               ~~~~~~

Found 2 errors.

But CompA doesn't have same problem
The difference between CompA and CompB is that CompA is used locally while CompB is used globally via a global-components.d.ts
I also note #701 , but add ($slots as Pick<typeof $slots, 'one' | 'two'>) doesn't have any effect

Also affected by this

This is expected behavior, $slots type is from DefineComponent but not define by volar. You can not inherit parent slots type by this way. If you need type-safe it, you must be hardcode each slot currently.
<template>
  <comp-c>
    <template #one="slotData">
      <slot name="one" v-bind="slotData"></slot>
    </template>
    <template #two="slotData">
      <slot name="two" v-bind="slotData"></slot>
    </template>
  </comp-c>
</template>

@johnsoncodehk
<template>
  <q-table :rows="rows">
    <template
      v-for="(_, slot) in ($slots as Readonly<QTableSlots>)"
      #[slot]="scope"
    >
      <slot :name="slot" v-bind="scope || {}" />
    </template>
  </q-table>
</template>

<script lang="ts" setup>
import type { QTableProps, QTableSlots } from 'quasar';

interface Props extends QTableProps {
  rows: { test: string }[];
}

defineProps<Props>();
</script>

@yusufkandemir Unfortunately based on the behavior of TypeScript this is not possible and you may have to annotate the exported component type. (You can reference https://twitter.com/johnsoncodehk/status/1579151876662390784)


text:
v-if | null check doesn't work for events (?)

It seems that v-if is not forwarded for event bindings 🤔
But bindings like v-text works
const variable: Ref<Something | null>
const doSomething(x: Something)

button(v-if="variable", v-text="variable.text", @click="doSomething(variable)")
//-                                                                 ~~~~~~~~ cannot be null

This is expected, see https://github.com/johnsoncodehk/volar/discussions/146.

Okay, so I need to wait on https://github.com/vuejs/vue-next/issues/1359
And just use workarounds for this at the moment, okay
Thanks for the incredible fast answer 🚀

My workaround is now:
@click="template && openSharedComponentDialog(template.sharedPath)"

repo: johnsoncodehk/vue-tsc


text:
redirect trailing slashes

fixes #805
I removed the trailing slash apache rule so that it behaves more like the website.

@dstockto once you're good with the changes we're good to merge

fixed with !866


text:
build(deps): update dinit from v0.18.0 to v0.19.0

update dinit from v0.18.0 to v0.19.0: https://github.com/davmac314/dinit/blob/master/NEWS

build successful

authors: editwentyone theborakompanioni

repo: joinmarket-webui/jam-docker


text:
Upload from clipboard

Is it possible to tweak the code to upload from clipboard? I am new to bash and wondering if that's something that may be easy tweaked or not

I think implementing this would be out of the scope of this project, however you can write the clipboard to a temporary file and upload that file using imgur-screenshot!

authors: andreyvolokitin jomo

repo: jomo/imgur-screenshot


text:
Question: Configuration

Hi
I have some questions about this integration.
I have setup the NordPool integration with the following configuration

And Ev Smart Charging with the following configuration

However it seems like that the integration never plans for the charging even though the price is below the limit.

Have I done something wrong in the setup?

A new charging plan is made after the prices for tomorrow are available, typically shortly after 13:00. So please wait a little.

That did the trick. Thank you.

authors: jonasbkarlsson mustachedkdev sadiq81


text:
[Solves #55] Fixed the Backend CI

Fixes the CI problems caused by the premature merge of the other PR
For this Issue #55

another PR is tackling this, so this is a duplicate

repo: jonathan-githubofficial/awaazo


text:
Using numbers in suffix

Hello, I am trying to active this result: "R$ 999,00"
The cents should be fixed, so this is my config:
`
config: {
prefix: 'R$ ',
suffix: ",00",
thousands: '.',
decimal: '',
precision: 0,
disableNegative: true,
disabled: false,
min: null,
max: null,
allowBlank: true,
minimumNumberOfCharacters: 0,
}
`
The result is: "R$ 999,", omitting the both zeros in the suffix.
Using letters in suffix works like expected: "R$ 999,AA".

Yep, that's really not supported right now. A pull request will be apreciated!

authors: jakjr jonathanpmartins


text:
docs(help): add change-case help text

Belongs to issue #169 .
Add help text for template helpers - changeCase and inflection.

I've added a new cli option help-templates because the template help was overcrowding the main help. I thought separating them would be more appropriate.

The text is in bare format. Markdown maybe for usefull in this case. https://github.com/axiros/terminal_markdown_viewer

The text is taken from the readme of those repositories. Maybe a more condence oneline per command example+result would be more appropriate.

I could take a look at 2 or 3 if those options are more wanted but it will take more time or could be done in another PR.

Looks fantastic, thanks!
Can we merge or do you have something you wanted to add before merge?

I found I was still missing some kind of cheat-sheet condense look so I've add a condense method summary to the start of the template help text. If its looks good from you, from my side it can be merged.

authors: elpddev jondot

repo: jondot/hygen


text:
Breaking change in 2.6.0

Hey, we just noticed that our scripts broke with 2.6.0 because we're overwriting initialize:
class WorkerQueueWorker
  include Sneakers::Worker
  def initialize(a, b)
    @dc = Dalli::Client.new(memcached, expires_in: 60*10)
    super(a, b)
  end
end

Was that an intentional break? Can that be quantified somewhere?

Duplicate of #248.

Much of Sneakers::Worker#initialize hasn't changed in 3 to 4 years. The signature hasn't changed since https://github.com/jondot/sneakers/commit/d4c6388dfa2473bf05ebeea11a4425d3774cdd00.
So with the little information provided here — "our scripts broke" is not a whole lot to work with — I suspect that this is an effect of https://github.com/jondot/sneakers/commit/e0891a0c7375097224152ef5dd4ffde0cacd0852, which doesn't have a default for opts[:threads].
@jcmfernandes @gabrieljoelc what default should we use?

I'll assume that the default we have in https://github.com/jondot/sneakers/blob/41883dd0df8b360c8d6e2f29101c960d5650f711/lib/sneakers/configuration.rb#L42 is reasonable.

@michaelklishin A bit more clarification, then. Here's the error:
Unexpected error wrong number of arguments (given 3, expected 2)
  /www/docker/rabbit/runner.rb:50:in `initialize'
  /usr/local/rvm/gems/ruby-2.4.0/gems/sneakers-2.6.0/lib/sneakers/workergroup.rb:38:in `new'
  /usr/local/rvm/gems/ruby-2.4.0/gems/sneakers-2.6.0/lib/sneakers/workergroup.rb:38:in `block in run'
  /usr/local/rvm/gems/ruby-2.4.0/gems/sneakers-2.6.0/lib/sneakers/workergroup.rb:38:in `map'
  /usr/local/rvm/gems/ruby-2.4.0/gems/sneakers-2.6.0/lib/sneakers/workergroup.rb:38:in `run'
  /usr/local/rvm/gems/ruby-2.4.0/gems/serverengine-1.5.11/lib/serverengine/worker.rb:74:in `main'

And runner.rb:50 is the code I posted above. So I guess the issue is that the third param here is now getting passed through? Or it was before but it was nil?

From my understanding, f70242f14ad7d8b92282e3e9d8f6a9037f8c4378 is the source of your problem.

@jcmfernandes your understanding matches mine. I don't consider this to be a breaking change either but figured it can trivially be a bit more defensive. This is a variation of the fragile base class problem: it can be hard for subclass authors to keep up with the changes.

I agree @michaelklishin :wink: :+1:

@greggilbert that's fairly confusing as all parameters have defaults. Anyhow, you should be able to pass an empty hash of options as of upcoming 2.6.1.

authors: greggilbert jcmfernandes michaelklishin

repo: jondot/sneakers


text:
🛑 NL - Netherlands is down

In cb73247, NL - Netherlands (https://www.skyshowtime.com/nl/help/) was down:

HTTP code: 404
Response time: 911 ms

Resolved: NL - Netherlands is back up in 026b7d4 after 14 minutes.

repo: jonesyriffic/gsp-sst


text:
🛑 PT - Portugal is down

In 453e138, PT - Portugal (https://www.skyshowtime.com/pt/help/) was down:

HTTP code: 404
Response time: 966 ms

Resolved: PT - Portugal is back up in 4103656 after 28 minutes.


text:
Can you get the source code?

Hello, I am very interested in this work, can you get the source code? Thank you

Thank you for your interest in our work. The source code has been released.
We appreciate your patience.

authors: fengchuanpeng jongdory

repo: jongdory/ALDM


text:
Calling Array on an ODE solution of ComponentArrays is slow

I think this is due to the fact that vcat/hcat on a VectorOfArray of ComponentArrays splats out the vector. It would be better to call everything on the inner array types and just add axes after the fact.

See if cc26c7f helps this.

Fixed by 6006bfa


text:
Some rva addresses is not patched

I understand that you won't be working on this project anymore, but maybe it will help someone in the future. This is an interesting project.

For example, there is such a problem in _vcrt_InitializeCriticalSectionEx()->try_get_function() [in CRT with /MT] with the rva address in the current instructions
49 8B 84 FF ? ? ? ? mov rax, rva ????[r15+rdi*8]
49 8B 9C F7 ? ? ? ? mov rbx, rva ????[r15+rsi*8]
4D 8B BC F7 ? ? ? ? mov r15, ds:rva ????[r15+rsi*8]

Just for the test, this instruction can be caught in this way (this is not the best way, just for test)
if (instr.mnemonic == ZYDIS_MNEMONIC_MOV && instr.attributes == (ZYDIS_ATTRIB_HAS_MODRM | ZYDIS_ATTRIB_HAS_SIB | ZYDIS_ATTRIB_HAS_REX | ZYDIS_ATTRIB_ACCEPTS_SEGMENT) && instr.length >= 8 && instr.raw.disp.value > 0x1000/*better to do > sec_text_addr + sec_text_size*/)

There is also a problem with rva addresses in .rdata

I also suspect that there will be problems with some short jmps

I understand that you won't be working on this project anymore, but maybe it will help someone in the future. This is an interesting project.
There is also a problem with rva addresses in .rdata

Thanks for the feedback. For #2, the reason is probably because the disassembler doesn’t recognize that the data is an RVA. This could probably be fixed with some heuristics, but it doesnt really matter in this example since chum doesn’t support exception handling.
I suspect #1 is related to this as well, but I’ll take a look when I get home.
As for #3, short jumps will get changed to a near jump if the offset can’t fit in the instruction, if that’s what you’re implying. Only 64-bit jmps/calls aren’t supported.

Another note for #3 is that I wrote the relative call/jmp encoding code before Zydis introduced ZydisEncoderEncodeInstructionAbsolute(). Switching over to that would make the code a lot cleaner and bug-free (since I'm sure that my implementation has a bunch of bugs!).

@N1ceL Alright I checked it out a bit, and I'm not entirely sure that there is a good solution for this...
This is what the first instruction looks like:
49 8b 84 ff 70 d1 01 00             mov rax, QWORD PTR [r15+rdi*8+0x1d170]
As you can see, it is a bit difficult to determine that 0x1d170 is an RVA. One way would be to check for constants in the range of 0 <= x <= image_size, but this will obviously lead to a huge amount of false positives. A more reliable option would be to scan nearby instructions and look for the image base address... this relies on the fact that RVAs are usually added to the image base.
For example, in the same function just a few instructions before:
4C 8D 3D 2B DB FF FF                lea     r15, cs:140000000h
If we could detect the combination of image base + RVA, then maybe this could be reliably detected, but I'm definitely not adding that! 😄

Thanks for the reply. The solution to this problem is really difficult, but this project is still one of the best on github for mutating instructions with thoughtful logic that other people can take note of. If all the rva addresses were fixed it would be fantastic, but it seems to me that a .map parser is needed for this

but it seems to me that a .map parser is needed for this (.map parser could help in detecting not only such instructions, but also exceptions in .rdata and provide information about the segments of the sections like idata, crt, xdata, edata, pdata and etc. This information would be able to minimize false positives)

Completely agree. I was planning on adding .map and pdb parsing eventually to the disassembler, but I got bored of this project. The entire project depends on the disassembler to not have any bugs, so when there are bugs, it breaks down completely.

repo: jonomango/chum


text:
Certificate maintenance routine not working with v1.0 release

In the latest version of the Docker Image v1.0 the automatical aquiring of a Let's Encrypt certificate is not working. There is no error thrown or any hint on why this is happening.
I used the same configuration with the v0.8 release, where everything is working.
[general]
listen = "0.0.0.0:53"
protocol = "both4"
domain = "dns.example.org"
nsname = "dns.example.org"
nsadmin = "dns.example.org"
records = [
    "dns.example.org. A 0.0.0.0",
    "dns.example.org. NS dns.example.org",
]

debug = true

[database]
# Database engine to use, sqlite3 or postgres
engine = "postgres"
connection = "postgres://acme:password@database/acme?sslmode=disable"

[api]
ip = "0.0.0.0"
disable_registration = false
port = "443"
# possible values: "letsencrypt", "letsencryptstaging", "cert", "none"
tls = "letsencrypt"
# only used if tls = "letsencrypt"
acme_cache_dir = "api-certs"
notification_email = "dns@example.org"
corsorigins = [
    "*"
]
use_header = false
header_name = "X-Forwarded-For"

[logconfig]
loglevel = "debug"
logtype = "stdout"
logformat = "json"

Log Output v0.8 directly after starting with this configuration:
acme-dns    | time="2022-09-04T22:13:33Z" level=info msg="2022/09/04 22:13:33 [INFO][cache:0xc000124550] Started certificate maintenance routine"

For v1.0 there is no entry regarding the certificate maintenance routine. When trying to access the API via HTTPS the following error appears:
acme-dns    | time="2022-09-04T22:29:02Z" level=info msg="http: TLS handshake error from 10.8.0.3:53232: no certificate available for 'dns.example.org'"

Any idea whats happening?

I think I'm encountering the same issue having also updated my Docker container from 0.8 to 1.0. I haven't seeing any errors logged by acme-dns, but my Let's Encrypt client started logging the following exception when trying to connect to the acme-dns API: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid.
Upon further investigation, I found that the API was serving an old, expired certificate, so I examined the contents of /root/api-certs and discovered that while a new certificate had been stored at /root/api-certs/certificates/acme-v02.api.letsencrypt.org-directory/auth.mydomain.com/auth.mydomain.com.crt, the API was still serving an expired certificate from /root/api-certs/acme/acme-v02.api.letsencrypt.org/sites/auth.mydomain.com/auth.mydomain.com.crt.
(Note: My container has a persistent volume mounted to /root/api-certs, which is why the directory wasn't emptied after the container was recreated with the 1.0 image, and acme-dns was thus able to serve the expired certificate).
After emptying my /root/api-certs volume and restarting the container, I found that acme-dns subsequently regenerated a new certificate at /root/api-certs/certificates/acme-v02.api.letsencrypt.org-directory/auth.mydomain.com/auth.mydomain.com.crt but the /root/api-certs/acme/acme-v02.api.letsencrypt.org directory wasn't recreated, and now the acme-dns API just isn't serving a certificate at all, which is in line with @p3l1's report.
It would therefore appear that acme-dns is either trying to serve the API certificate from the wrong location, or is failing to copy the certificate to the correct location.

repo: joohoi/acme-dns


text:
Verwijder Socket.io

We gebruiken socket.io zeer spaarzaam waardoor het handiger kan zijn om puur websockets te gebruiken

Hellow sir.
i wanna play http://webrtc.jstfy.com/
but it doesn't work now.
i am interesting about your project.
plz let me see your demo site.
thanks

Hallo @joostverdoorn,
I am also very interested. Let's play!

Thanks.~
but the demo site  ( http://webrtc.jstfy.com/ ) doesn't work now.
like this.
https://www.youtube.com/watch?v=1CN8EBaDC9M&feature=youtu.be
ps. i'm a korean and using chrome.

Hello @karensg ,
Have you run this game successfully ?
ps. I'm trying to run this game on centos 7 but i've failed.

authors: jhs512 joostverdoorn karensg

repo: joostverdoorn/webrtc


text:
Many functionalities missing for vertex/edge collections

There are many functionalities missing for the vertex/edge collections that are present for collections created by normal create_collection method of the database.
Some of them are to allow creating shards, allowing bulk_import.

Hi @akki
You can access the vertex/edge collection using the standard collection interface like db.col('my_vertex_collection_name'). Let me know if that meets your needs.

Thanks for the quick reply @joowani
I am currently doing db.col('my_vertex_collection_name') as an alternative. My main concern was regarding creating shards. I am unable to create shards for vertex/edge collections. I was kinda under the impression that vertex/edge collections would be subclasses of standard collections but when I saw the code that wasn't the case.

Hi @akki,
Right. The reason for the not-very-clean separation is due to the limitation of the HTTP REST API provided by ArangoDB (which python-arango uses under the hood). For now, you will have to create the collections you need for your graph using the standard collections interface so you can specify the shard configuration, and then create graph by using those collections and its vertices.

Yes, I create my collections using Arangosh currently.
Is it possible to do it in some way using multi-inheritance (I haven't looked at the code very closely right now).
Anyways, this isn't a very critical issue and there are work-arounds but I thought of reporting it. Thanks for the help!

Noted. I'll see what can be done to address this next release. Thanks @akki!

Hi @joowani , Thanks for creating this library to make Arango easy to access from Python.
Please see https://github.com/arangodb/arangodb/issues/3020 that I had raised in ArangoDB.
As per the suggestion there ,I am supposed to use replication factor while creating vertex collections. But there is no API to do that in python-arango for vertex-collections or at graph level itself.
Do you have any suggestions how I could achieve that or is an enhancement needed in python-arango to support that ?

Thanks @joowani , will try the workaround that you suggested.

@joowani, the db.create_collection() seems to set the replication_factor correctly for vertex collections.
However, for edge collections, the below method does not seem to set it properly.
graph.create_edge_definition(
    name='my_def',
    from_collections=['my_col'],
    to_collections=['my_col']
)

As per recent ArangoDB changelog
v3.2.6 (2017-10-26)
-------------------

* allow changing of collection replication factor for existing collections

* UI: replicationFactor of a collection is now changeable in a cluster
environment

Will python-arango be enhanced with more support for configuring replication factor beyond db.create_collection() ?

@jeeveeyes I sent you the below snippet in earlier emails for changing the replication factor for edges and that would also be quite fast using the document API directly.
edge_colls = {}
for from_coll,to_coll in edge_data:
name = from_coll + "ref" + to_coll
db.create_collection(name,edge=True,replication_factor=2)
edge_colls[name] = grph.create_edge_definition(name=name, from_collections = [from_coll], to_collections = [to_coll])

Thanks @kunalak. I shall try above method.
Can you also clarify if replication factor is required to be tuned for graphs too ?

As can be seen above , for a simple graph, the default replication_factor is 1.
I could not locate the Arango REST API to set that replication_factor for a graph while creating it or as a PUT of the properties.

@joowani , there is a configure() API on collection classes, but that does not accept and propagate replication_factor.

@jeeveeyes, the configure method is just a wrapper on top of this HTTP API call: https://docs.arangodb.com/3.2/HTTP/Collection/Modifying.html#change-properties-of-a-collection.
And it does not accept replication factor as a parameter. In fact I don't know if there is one exposed by ArangoDB at all (there does not seem to be one in their HTTP API spec. For now, you may need to use something like Arangosh or the web UI directly. @akki please refer to ArangoDB documentation or create an issue with them for more details on how to do this.

I would like to get back to the original question since I didn't understand how the workaround works. You said:

For now, you will have to create the collections you need for your graph using the standard collections interface so you can specify the shard configuration, and then create graph by using those collections and its vertices.

I know how to create standard collections but I don't know how to use them to create a graph. Do I need to manually insert each document from the collection to the vertex collection? If so that would invalidate the bulk import process.
Could you give me an example of how to use the workaround you suggest?

I didn't have the need to create a named graph. I just wanted to make collections of vertex/edge type which is possible through the standard collections interface.
From what I remember I used to create collections using the standard collection interface and then load them separately into the graph afterwards.
If you're looking for creating a graph, I guess this would be helpful for you - http://python-driver-for-arangodb.readthedocs.io/en/master/graph.html#edge-definitions

How do you load the standard collections into the graph?
I do need to use the graph interface but I also have a lot of data that I need to bulk import into the graph. But if I create a vertex/edge collection, the method for bulk importing is not available.

Hi @danielapoliveira,
After creating the vertex and edge collections, try using the standard collection interface.
So instead of doing something like this:
client.db('db').graph('graph').edge_collection('edge_collection').insert(edge_document)

Try this (untested):
client.db('db').collection('edge_collection').bulk_import(edge_documents)

Hi @joowani,
That workaround seems to work fine. Thanks!

authors: akki danielapoliveira jeeveeyes joowani kunalak

repo: joowani/python-arango


text:
Added aiohttp based client, added FutureResponse to lazily load respo…

This adds an aiohttp asynchronous http client which uses futures.  It also adds a FutureResponse object which will not automatically load responses on initialization, only on access.
Of note- The description on the wiki that you can monkey patch with requests using eventlet is incorrect.  While you can do this with no issue, the fact that the default Response accesses all fields upon initialization would require waits every time the Response object was created and defeat the purpose of this.
Also to note- this only works for python>3.5 due to the use of async await syntax.  There are checks in place in the code to throw a runtime error in earlier versions, however, I am unfamiliar with the automated coverage checker and test runner usages, and am unsure how to restrict the checking of this class with lower python versions.

cancelling to resubmit with changes that will resolve this


text:
Problems with Laravel 5.2

I did :
$ php artisan blogify:migrate
and i got this error :

[Symfony\Component\Debug\Exception\FatalThrowableError]
Fatal error: Call to undefined method Illuminate\Foundation\Application::bindShared()

so i replace :
$this->app->bindShared('form', function($app)
by
$this->app->singleton('form', function($app)
in vendor/illuminate/html/HtmlServiceProvider.php line 49
then I did :
$ php artisan blogify:migrate
I have now this error :

[ErrorException]
Array to string conversion

I search on the web but i didn't find any solution.
If you know how to fix this, thanks !

This should be solved I just merged the code base over to Laravel 5.2

authors: jorenvh raphael-thibierge

repo: jorenvh/Blogify


text:
Allow parquet column chunks to be deserialized to multiple arrays (e.g. iterator)

As described by @tusvold here, there are important cases where it is more advantageous to deserialize a column chunk into more than one array.
Specifically, the main issue is that a decompressed parquet column chunk is still much smaller than its corresponding arrow array. Therefore, on large column chunks, the user may prefer to deserialize only part of the decompressed column chunk into arrow while still holding the chunk in memory.
The equation is something along the lines of
size(decompressed parquet column chunk) + size(partial arrow array) <  size(complete chunk as arrow array)

To allow users to tradeoff memory usage and data fragmentation (of each array), we should offer something like
fn column_chunk_to_array(chunk, column_meta, length: Option<usize>) -> impl Iterator<Arc<dyn Array>>

that when length: None we recover our single array, when length: Some(n), we iterate over the chunk and output n items at the time.
Thanks again to @tusvold for this important insight.

It isn't so much decompressed column chunks being smaller than a corresponding array, as a single decompressed page within a column chunk being smaller than an array of the entire column chunk.
Ideally you would stream pages from the column chunk, decompressing them as needed, and only keeping them around until all the values have been yielded from that page.

I have been thinking about this. I haven't found this analysis anywhere else before, so will just leave it here for posterity.
data is split in row groups to allow for group pruning at the expense of lower compression - larger groups allow higher compression but less possible prunes, smaller groups allow for more pruning but can't be compressed as much.
We could separate this analysis between dict-encoded and non-dict encoded, but the overall conclusion is the same: the more values we pack to an compressor, the higher the maximum possible compression gains. For dict-encoded this is because dicts aren't shared between row groups.
The potential benefit to use more pages would be to allow page pruning. However, parquet itself deprecated writing page statistics since 2018. Thus, I do not really see how more pages per column chunk help us.
From this perspective, imo we should assume the optimal storage conditions: reading a column chunk with a single page (non-dict-encoded) or a column chunk with 2-3 pages (dict page + indices page + fallback page for groups with more than i32::MAX items).
Strategy 1
One strategy is to load a parquet row group in "mini-batches" of size n < N where N is the length of a row group. For this to happen, we need to:

read M compressed parquet columns to memory (for a total of M x N compressed items)
decompress the (usually single) pages on it
deserializen < N items
repeat 3. until we read all items

Strategy 2
An alternative load strategy is to load column by column:

read one compressed column to memory
decompress the (usually single) pages on it
deserialize N items
repeat 1-3 until we read all columns

Consequences of each
Let's now see how this pans out in two different data carrier patterns, "stream of chunks", Stream<Vec<Array>> (like datafusion) and "vector of streams", Vec<Stream<Array>> (like the chunked array in pyarrow).
Strategy 1 on stream of chunks

After step 1, we peak at M compressed columns
After step 2, we peak at M decompressed columns
During step 3-4, we peak at M decompressed columns + n * M deserialized items

Strategy 1 on vector of streams

After step 1, we peak at 1 compressed column
After step 2, we peak at 1 decompressed column
During step 3-4, we peak at 1 decompressed column + n deserialized items

Strategy 2 on stream of chunks

After step 1, we peak at 1 compressed columns
After step 2, we peak at 1 decompressed columns
During step 3-4, we peak at 1 decompressed column  + N * M deserialized items

Strategy 2 on vector of streams

After step 1, we peak at 1 compressed column
After step 2, we peak at 1 decompressed column
During step 3-4, we peak at 1 decompressed column + N deserialized items

Analysis
From this, my understanding is that the core difference here is between

Strategy 1: M decompressed columns + n * M deserialized items
Strategy 2: 1 decompressed column  + N * M deserialized items

Let's do some math and see the difference. Defining

b = n/N to be our batch size n relative to the row group size N.
s_e the average size of an individual encoded item in parquet
s_d the average size of an individual deserialized item in arrow
r as the ratio of s_d / s_e (the average ratio between the deserialized arrow and encoded parquet). For PLAIN, this equals 1 - ratio of nulls (since null values do not take space in parquet).

Defining S1 and S2 as the peak memory usage of Strategy 1 and Strategy 2 respectively, we can write the above as:
S1 = M * N * s_e + M * n * s_d
S2 = N * s_e + M * N * s_d

The ratio S1/S2 can be written as (divide both sides by M*N*s_e):
S1/S2 = (1 + b * r) / (1/M + r)

which is the important formula here.
We can now take two limits: M = 1 (load one column) and M = infinity (load many columns).
Low number of columns
For M = 1, we have
S1/S2 = (1 + b * r) / (1 + r)

For highly-encoded columns, say r = 4, and a batch size of 0.1 (10% of the row group), the above yields
S1/S2 = (1 + 0.4) / (1 + 4) = 0.35

For low-encoded columns, say r = 0.9, and a batch size of 0.1 (10% of the row group), the above yields
S1/S2 = (1 + 0.09) / (1 + 0.9) = 0.57

showing that S1 requires less memory (~40%)
Loading high number of columns
For M = inf, we have
S1/S2 = (1 + b * r) / r

For highly-encoded columns, say r = 4, and a batch size of 0.1 (10% of the row group), the above yields
S1/S2 = (1 + 0.4) / 4 = 0.35

I.e. S1 requires less memory (~66%)
For low-encoded columns, say r = 0.9, and a batch size of 0.1 (10% of the row group), the above yields
S1/S2 = (1 + 0.09) / 0.9 = 1.2

I.e. S1 requires more memory (~20%)
Conclusions
My conclusion atm is that Strategy 1 dominates in most cases and it should be the default (i.e. the goal of this PR). IMO this is interesting because it just shows that it is better to read the whole (after projection pushdown) row group into memory, decompress it, and then iterate on its individual columns.

data is split in row groups to allow for group pruning at the expense of lower compression

This is only partly true, the other motivator is that the row group is typically unit of IO and distributed parallelism. Separate row groups are not all that dissimilar from separate files, with all the costs and benefits thereof.

The potential benefit to use more pages would be to allow page pruning.

Pages are significantly smaller than column chunks, row groups may be up to a GB compressed, whereas pages (other than dictionary pages) are typically closer to 8KB compressed. See the end of this document. So another benefit is reducing the amount of uncompressed data that must be buffered in the read path at any point in time.

However, parquet itself deprecated writing page statistics since 2018.

That is because it now writes them into a different data structure called PageIndex that is slightly less useless. That being said I'm not aware of many systems that make use of this...

Thus, I do not really see how more pages per column chunk help us.

Regardless of the utility of multiple pages per column chunk, if interoperability with other tooling is important, multiple small pages per column chunk is likely to be an assumption of other tooling.
FWIW I agree that page pruning based on statistics is not particularly effective for most use-cases, I have a proposal for selection masks in parquet that I hope to start work on in the latter half of this week - https://github.com/apache/arrow-rs/issues/1191.

I now have a fix for this on my local, I am just cleaning it up before a PR. It reads the pages as they are needed.

authors: jorgecarleitao tustvold


text:
Timeseries query

Currently Crux does not support querying over history.
Queries like "Give me the patient count for each month for the last year" would be interesting to ask.
Once we find a way to run these queries, we should add a demo showing this.

It seems like something in this direction is coming with https://github.com/juxt/crux/issues/968

repo: jorinvo/crux-typescript-healthcare-demo


text:
[FIX] #25 path initial param issue

Addresses #25

I should add some tests to at least "document" this behavior. I will do that tomorrow. I won't merge it until I don't have a few tests...

repo: josepot/rereducer