error if directory static/files/citations not exists

After upgrading to the latest version, I got errors below:
ERROR 2017/10/19 16:35:41 Error while rendering "page": template: theme/publication/single.html:82:13: executing "theme/publication/single.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_links.html:17:14: executing "theme/partials/publication_links.html" at <readDir $directory>: error calling readDir: Failed to read Directory static/files/citations/ with error message open /Users/seisman/Gits/ustchome/static/files/citations: no such file or directory
ERROR 2017/10/19 16:35:41 Error while rendering "page": template: theme/project/single.html:33:9: executing "theme/project/single.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_li_simple.html:9:8: executing "theme/partials/publication_li_simple.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_links.html:17:14: executing "theme/partials/publication_links.html" at <readDir $directory>: error calling readDir: Failed to read Directory static/files/citations/ with error message open /Users/seisman/Gits/ustchome/static/files/citations: no such file or directory
ERROR 2017/10/19 16:35:41 Error while rendering "section": template: theme/section/publication.html:59:15: executing "theme/section/publication.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_li_mla.html:15:8: executing "theme/partials/publication_li_mla.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_links.html:17:14: executing "theme/partials/publication_links.html" at <readDir $directory>: error calling readDir: Failed to read Directory static/files/citations/ with error message open /Users/seisman/Gits/ustchome/static/files/citations: no such file or directory
ERROR 2017/10/19 16:35:41 Error while rendering "home": template: theme/index.html:1:3: executing "theme/index.html" at <partial "widget_page...>: error calling partial: template: theme/partials/widget_page.html:23:9: executing "theme/partials/widget_page.html" at <partial $widget $par...>: error calling partial: template: theme/partials/widgets/publications_selected.html:22:11: executing "theme/partials/widgets/publications_selected.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_li_detailed.html:57:11: executing "theme/partials/publication_li_detailed.html" at <partial "publication...>: error calling partial: template: theme/partials/publication_links.html:17:14: executing "theme/partials/publication_links.html" at <readDir $directory>: error calling readDir: Failed to read Directory static/files/citations/ with error message open /Users/seisman/Gits/ustchome/static/files/citations: no such file or directory

This bug can be fixed after directory static/files/citations is created.
BTW: hugo 0.30 is already released, fileExists is available now.

After creating static/files/citation I get the next error:
ERROR 2017/10/19 18:11:27 Error while rendering "home": template: theme/index.html:1:3:
executing "theme/index.html" at <partial "widget_page...>:
error calling partial: template:
theme/partials/widget_page.html:23:9: executing "theme/partials/widget_page.html"
at <partial $widget $par...>: error calling partial: template:
theme/partials/widgets/posts.html:25:14: executing "theme/partials/widgets/posts.html"
at <len $page.Params.tag...>: error calling len: len of untyped nil

@pat-s the new error you're getting sounds like you haven't updated the parameters of the Post widget - the breaking changes RE new/changed parameters can be found here: https://sourcethemes.com/academic/post/v2.0.0/

Posts widget: Add filter to exclude tags
Change tags option to tags_include [BREAKING CHANGE]
Add tags_exclude option


Resource version too old

hello,
even with 1.4.2i get the error.
io.fabric8.kubernetes.client.KubernetesClientException: too old resource version: 9055242 (9091399)

1.4.3 solves this issue


API and extension host work for multi root

This is an umbrella item that track changes that are required for making the extension host and API multi-root aware.

Open questions and Todos

We have the workspaceContains-activation event and I assume we (re-)evaluate whenever a new folder comes in? @alexandrudima for feedback/input
The value of vscode.rootPath is computed at startup time but now it might change (when we close the folder that we have chosen to be the rootPath)
We have extension storage path which we today derive from the workspace identifier  and need something comparable in the future

@jrieken for now since we have the model of a main folder that has an associated setting, rootPath would always point to this folder and not change unless another folder is opened (that would restart the extension host). We should then deprecate rootPath in favour of new API that has a list of folders and an associated event.
An alternative solution would be to simply set rootPath to null in case multiple folders are opened so that extensions are in the same situation as when the user had no folder opened.

Yeah, for now I have no problems, but as soon as remove and add all folder I do. Also setting rootPath to null or undefined is tricky because it will come after the fact, e.g. I start with one folder and then add other later

@jrieken good point, I forgot about the fact that we restart the extension host typically in that case.
Maybe then it is better for now to just always have rootPath be the folder path of the main folder the user opened and the new API to be dynamically changing based on the configuration?

just always have rootPath be the folder path of the main folder the user opened

Unsure, it would bake the notion of a main folder into the API

@jrieken that is true, but I see no way of setting rootPath dynamically if we are not able to reload the extension host in the background. Otherwise this would mean each time a root folder changes we have to reload the entire window.

Regarding workspaceContains, this is now evaluated only at folder opening time. In other words, if an extension is looking for a file called hello.txt, and a folder is opened without that file, and later a file called hello.txt is created, the extension does not get activated.
I agree, the natural mapping of workspaceContains is to evaluate it on each of the opened folders, at folder opening time.

After talking to @jrieken today there are some ideas what to do with our current rootPath extension API
Set rootPath to master
In this case, workspace.rootPath always has the value of the folder that was opened that carries the additionalFolders setting. This would require a minimal amount of work because multi-root always requires a folder to be opened to begin with. The disadvantage of this approach is that it "leaks" the concept of the master folder to our extensions.
Set rootPath to null in multi-root
Here we simply set workspace.rootPath to null in case more than one folder is opened. Extensions today already have to deal with this when the user opens an empty workspace without folder. This has the advantage of making clear that multi-root is a new concept that requires the extension to adopt new API. There is some work involved though to make this experience smooth: We cannot change rootPath dynamically, so any change in the multi-folder configuration will trigger a reload of the window (for transitions from 1 to many or many to 1). We need to invest into a way of being able to restart the extension host in the background but this is out of scope for MVP.
Remove rootPath for extensions > 1.14
In this model we forward-break our API by removing workspace.rootPath beginning with our next release. For each extension we can detect if it supports 1.14 and then decide to not populate workspace.rootPath at all. For extensions that are still supporting older versions we would provide workspace.rootPath as before with one of the 2 solutions outlined above. The advantage here is that new extensions (those that support 1.14) would not even see workspace.rootPath as API but only the new workspace API we provide.
@Microsoft/vscode feedback welcome

I am personally in favour of setting rootPath to null when opening more than one folder. This was already outlined as proposal in @Tyriar and mine document about multi root support.

I'd set rootPath for old extensions to keep them maximally functional and remove rootPath for newer extensions to force a clear cut so extensions do not end up depending on both old and new APIs.

So, the very cut of multi-root API is small and just the list of folders and an event when that list changes. Also, I have changed workspace.rootPath to be undefined when there is more than 1 workspace.
export namespace workspace {

	export const onDidChangeWorkspaceFolders: Event<Uri[] | undefined>;

	export let workspaceFolders: Uri[] | undefined;
}

After talking in todays multi-root sync we decided to go with the solution of Set rootPath to null in multi-root described in https://github.com/Microsoft/vscode/issues/28526#issuecomment-308177541
While the forward breaking is a compelling idea, it needs more infrastructure that we do not have currently. Once we have this, we would use it to remove any deprecated API actually that we have.
For now we will deprecate rootPath in the vscode.d.ts and update the documentation where we still reference it.
Kai pointed out that we must reserve at least one sprint for extensions to adopt the new API. We should not make multi root broadly enabled without having a significant number of our top extensions having it adopted. Enabling multi-root only in insiders for now gives extension authors a chance to adopt the new APIs.

Set rootPath to null in multi-root

Please stop saying null when it is undefined 🙃

@bpasero given the recent discussions the decision makes sense.
Two things:

what is the user experience for users when they go from 1 to 2 root folders and they have extensions installed that are using the deprecated API? If I remember properly you had some mocks for scenario and I suggest should revive/review them again.

what do we do with extensions that were not updated after the one sprint adoption period? My concern is that there are extensions that are popular and in use, but that are no longer actively maintained.

I personally find a one sprint adoption period very short especially given the fact that this falls into the summer month and extension author might be on summer vacation.

When I opened my multi root workspace today with latest insiders, I see following error

And this is coming from an extension..  Probably we should handle this nicely, convey some how this is multi root and extension does not support it?

With rootPath to undefined in multi-root set up causes GIT extension to be disabled. This blocks to self host on multi root.

I read that we should go back to making it the first workspace folder

After talking in todays multi-root sync we decided to go with the solution of Set rootPath to undefined in multi-root described in #28526 (comment)

Maybe we need to rethink this. Today, after making rootPath behave like that, we have seen issues with https://github.com/KnisterPeter/vscode-github which activated via workspaceContains:.git and fails (throws errors) because rootPath is not defined. With what we have to day, the extension is doing everything correct and we not break it like this. So, it might be better to have a somewhat stable rootPath, e.g. the first root folder by some stable sort order, and restart only when that goes away. Deprecation and new API obviously still remains

fyi @Microsoft/vscode The alternative proposal is to make the first workspace the root folder. In our current implementation that would be the master folder but in an implementation with a list of equal folders (ala vscode-project.json) it would be the first (index=0) folder. Only when that folder goes away (is getting closed/removed) we would need to restart the extension (which today in only possible by reloading the window).

The alternative proposal is to make the first workspace the root folder.

@jrieken the whole "master folder" concept thing is a concept not many people like and is pending @bpasero and @sandy081 I think looking into how we are going to persist the workspaces in the long run.
The concern with making it the first workspace is that the extension will work for one folder and potentially one folder only, and therefore not behave as expected for the non-"master folders". This is what I've been envisioning for the rollout:

Introduce new APIs, deprecate rootPath (still use the first folder)
Notify extension authors about the API change if they use rootPath in their extension
Assist prominent extensions with adapting to the new API
Indicate that extensions may not operate properly (eg. if they poke rootPath, show a warning message box or a indicator in the extension viewlet)
(Optional) Switch rootPath to be undefined once adoption is satisfactory (maybe after 2-3 months?)

If we do not do step 5 in the long term then there will always be extensions that are buggy and misbehave in a multi-root scenario, rather than providing their empty workspace behavior that should be more reliable/stable (even if the functionality is disabled completely). Perhaps doing step 5 may also encourage authors more to go and fix up their extension to support multi-root?

@jrieken the whole "master folder" concept thing is a concept not many people like and is pending @bpasero and @sandy081 I think looking into how we are going to persist the workspaces in the long run.

 That's why I didn't say master but first 🙊.

Introduce new APIs, deprecate rootPath (still use the first folder)

Yep, that is still the plan but we don't want to break existing extensions using it by making it defunct. So, using the first folder is the don't-break-strategy but not the future.

re https://twitter.com/k_cieslak/status/877854547238170624 @Krzysztof-Cieslak lets continue the discussion here, with more than 160 character available :-)

As I've mentioned to @Tyriar in other response thread to my tweet I have 2 main issues:

rootPath is used quite a lot in my plugins (I've counted 20 something usages in 4 plugins I maintain)  - some of them can probably be replace by some combinations of workspace.findFiles and new Workspace APIs, but still it will require decent amount of work (just because old API is used in many different functionalities, breaks some assumptions that were made, it's change from sync to promise based API, etc). It's definitely doable, it's not probably something super hard to do conceptually but just plain amount of changes will be problematic (given those are OSS projects I do in spare time - and I guess same is true for any other big plugin that is not luck enough to be supported by any corporation ;) )

At least in case of F# (and possibly Elm - I'd need to check it out) the language server (which is not implementing LSP) is designed for "single workspace" approach. From top of my head there are 2 possible approaches - either I add multiple workspace to language server which is lot of work on server side (and also is problematic since VSCode plugin is not only user of this language server) , or I spawn separate server for each workspace which requires me to do decent amount of changes in plugin side - either way those would be not super trivial changes and will require decent amount of work.

I guess what I've ment in tweet is not "breaking" as my extensions stops working day after you release it (unless you set rootPath to undefined - this would be for sure breaking change), but rather I've meant that It will be really lot of work to make plugins support multiple workspaces.
From my point of view the 5 points plan that @Tyriar suggested above seems fine. We need those few months transitions period to port extensions to new API and then test them enough.

Also as a side note - even if you remove rootPath eventually it won't matter us much since least effort workaround will be using workspaceFolders[0] as substitution for the rootPath.... my F# Atom plugin still does that even though they've introduced multiple folders support years ago ;)

That is correct, we cannot enforce that an extension uses all workspace information that is available and if an extension only works on the first folder that's the way it works. I think that is just the nature of new, major features coming late to the party; like multi-root. The reverse is that it doesn't make much sense to set rootPath to undefined. We liked that idea because already today it can be undefined and extensions should be fit, in the sense of not explode, when this happens. However, the consequence is that those extensions will work in single-file-mode when there are multiple folders and I don't think that is better than having them work in single-folder-mode.
So, I think depicting the first folder as rootPath and restarting the extension host when that folder changes in the best compromise. The way how smart extensions work shouldn't change by that. And btw we did push those fixes already yesterday.

We liked that idea because already today it can be undefined and extensions should be fit, in the sense of not explode, when this happens. However, the consequence is that those extensions will work in single-file-mode when there are multiple folders and I don't think that is better than having them work in single-folder-mode.

Sure we do check rootPath for undefined and we do have single-file-mode.... But it would give really bad UX - it's rather clear when VSCode is opened in single file mode, so it's obvious that some extensions may not work. With multiple workspaces it's not as obvious, whole editor behaves normally, just for some random reason (from user perspective) extension doesn't work.

So, I think depicting the first folder as rootPath and restarting the extension host when that folder changes in the best compromise.

This sounds good, indeed.

@egamma no mockups for this scenario yet because "Multi Root Light" was about keeping rootPath around, even when going into multi root. It looks like we will have to work on the UX for this though once we set rootPath to undefined.
Giving extensions a longer period of time to adopt this change makes sense to me. I also agree that one sprint will not be enough, especially during summer.

After discussions with @weinand we decided to represent a workspace folder as dedicated object, for now like so. With that life is already a little easier and it also allows for future growth of the API.
export interface WorkspaceFolder {
	readonly uri: Uri;
	readonly name: string;
	readonly index: number;
}

Also, we added a way to find a workspace folder given a certain uri. /cc @mjbvz - I believe you have a ghetto-style implementation of that.
export function getContainingWorkspaceFolder(uri: Uri): WorkspaceFolder | undefined;

Sounds good to me. @jrieken is the index property identical to the position in the workspaceFolders array? If so, I wonder why it needs to be so prominent.

Yeah, the index is meant to represent the order, as defined in the code-workspace-file, and merely for convenience. @weinand has a good use-case which is about sorting a derived tree (of loaded scripts) like we sort the workspace folder list. This saves you a workspaceFolders.indexOf(someWorkspaceFolder) which is esp helpful when object instances have changed after processing some event. Tho, open for more feedback on this

@jrieken I like the idea of getContainingWorkspaceFolder but TS may be a bit weird when it comes this sort of API for nested folders. For a folder structure:
base/
    a.js
    sub/
        b.js

Where the user opens folder root and sub, for the file b.js TS needs the most broad enclosing project, which would be root in this case instead of sub. I imagine this is the opposite of what getContainingWorkspaceFolder would normally do

Sorry, how is getContainingWorkspaceFolder different from IWorkspaceContextService.getRoot?

Sorry, how is getContainingWorkspaceFolder different from IWorkspaceContextService.getRoot?

It's no different, just uses the API types and a more explicit name.

Where the user opens folder root and sub, for the file b.js TS needs the most broad enclosing project, which would be root in this case instead of sub. I imagine this is the opposite of what getContainingWorkspaceFolder would normally do

That is interesting. You might be able to call this n times... So b.js -> sub/ and then sub/ -> base/. That could or should work.

... So b.js -> sub/ and then sub/ -> base/. That could or should work.

It doesn't work today but we could make it work. Alternative could to let WorkspaceFolder have a parent pointer. Tho not sure I like that, it's a corner case and might make things look more complex than necessary.

Pushed more tweaks and moved the API out of proposed. fyi @mjbvz The getWorkspaceFolder now returns a parent workspace if called with one: https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/test/electron-browser/api/extHostWorkspace.test.ts#L105


Support for ID 1c88:1001 Somagic, Inc.

I've scoured the internet for a means to get this working in linux (Centos 7 flavor).  I'd be willing to help in any way I can, just let me know what I can do!

Nice,
The source code for the accompanying tools are pulled from the debian project:
https://github.com/stevelacy/EasyCap/tree/master/somagic-easycap-tools_1.1
https://github.com/stevelacy/EasyCap/tree/master/somagic-easycap_1.1
If you could compile the driver or determine if the debain driver works on fedora.
Did you manage to get the project, or part of it to run?

I was not able to successfully use the extraction tool on any of the SmiUsbGrabber3C.sys files, as each version failed, per OS (xp, win7, etc..) with "Somagic firmware was not found in driver file."  I did test the extraction tool with the included SmiUsbGrabber.sys file to test, which successfully extracted.  None of the file sizes matched in somagic-extract-firmware.c file.  The xp version on my CD is 81361 (vs 805632 in the extraction tool).
./somagic-init
USB device 1c88:0007 was not found. Is the device attached?
lsusb
Bus 001 Device 003: ID 1c88:1001 Somagic, Inc.

Here's the lsusb -v dump for the device:
Bus 001 Device 007: ID 1c88:1001 Somagic, Inc.
Device Descriptor:
bLength                18
bDescriptorType         1
bcdUSB               2.00
bDeviceClass            0 (Defined at Interface level)
bDeviceSubClass         0
bDeviceProtocol         0
bMaxPacketSize0        64
idVendor           0x1c88 Somagic, Inc.
idProduct          0x1001
bcdDevice            1.00
iManufacturer           1  Somagic, Inc.
iProduct                2 ezcap Video Grabber
iSerial                 3 SMIGRAB03F9876543210
bNumConfigurations      1
Configuration Descriptor:
bLength                 9
bDescriptorType         2
wTotalLength           75
bNumInterfaces          2
bConfigurationValue     1
iConfiguration          0
bmAttributes         0x80
(Bus Powered)
MaxPower              500mA
Interface Descriptor:
bLength                 9
bDescriptorType         4
bInterfaceNumber        0
bAlternateSetting       0
bNumEndpoints           0
bInterfaceClass       255 Vendor Specific Class
bInterfaceSubClass    255 Vendor Specific Subclass
bInterfaceProtocol    255 Vendor Specific Protocol
iInterface              0
Interface Descriptor:
bLength                 9
bDescriptorType         4
bInterfaceNumber        0
bAlternateSetting       1
bNumEndpoints           1
bInterfaceClass       255 Vendor Specific Class
bInterfaceSubClass    255 Vendor Specific Subclass
bInterfaceProtocol    255 Vendor Specific Protocol
iInterface              0
Endpoint Descriptor:
bLength                 7
bDescriptorType         5
bEndpointAddress     0x82  EP 2 IN
bmAttributes            5
Transfer Type            Isochronous
Synch Type               Asynchronous
Usage Type               Data
wMaxPacketSize     0x03ff  1x 1023 bytes
bInterval               1
Interface Descriptor:
bLength                 9
bDescriptorType         4
bInterfaceNumber        0
bAlternateSetting       2
bNumEndpoints           1
bInterfaceClass       255 Vendor Specific Class
bInterfaceSubClass    255 Vendor Specific Subclass
bInterfaceProtocol    255 Vendor Specific Protocol
iInterface              0
Endpoint Descriptor:
bLength                 7
bDescriptorType         5
bEndpointAddress     0x82  EP 2 IN
bmAttributes            5
Transfer Type            Isochronous
Synch Type               Asynchronous
Usage Type               Data
wMaxPacketSize     0x1400  3x 1024 bytes
bInterval               1
Interface Descriptor:
bLength                 9
bDescriptorType         4
bInterfaceNumber        1
bAlternateSetting       0
bNumEndpoints           1
bInterfaceClass         3 Human Interface Device
bInterfaceSubClass      1 Boot Interface Subclass
bInterfaceProtocol      1 Keyboard
iInterface              0
HID Device Descriptor:
bLength                 9
bDescriptorType        33
bcdHID               1.11
bCountryCode            0 Not supported
bNumDescriptors         1
bDescriptorType        34 Report
wDescriptorLength      65
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength                 7
bDescriptorType         5
bEndpointAddress     0x83  EP 3 IN
bmAttributes            3
Transfer Type            Interrupt
Synch Type               None
Usage Type               Data
wMaxPacketSize     0x0040  1x 64 bytes
bInterval              10
Device Qualifier (for other device speed):
bLength                10
bDescriptorType         6
bcdUSB               2.00
bDeviceClass            0 (Defined at Interface level)
bDeviceSubClass         0
bDeviceProtocol         0
bMaxPacketSize0        64
bNumConfigurations      1
Device Status:     0x0000
(Bus Powered)

Attached a usbmon dump of a few minutes.  It includes both the device and the usb hub it was connected to, both on bus 001.
usbmonzip.zip

I've got the same issue on Arch Linux.  I'm happy to help, if you give me some direction...

I haven't used it in a while so I'd need to re-build as well.
Let me see if I can extract the firmware for that device

Just as a note, multiple versions of the driver for this device which identifies as 1c88:1001 are here:
https://ftp.csl-computer.com/pub/drivers/videograbber/302591-USB_Video_Grabber/

Yeah, the signature for the driver changed when they changed the device id: https://github.com/stevelacy/EasyCap/blob/master/somagic-easycap-tools_1.1/somagic-extract-firmware.c#L205

Currently the project supports the device 1C88:1001 ?

3.384192] usb 1-1.2: Product: ezcap Video Grabber
[    3.384207] usb 1-1.2: Manufacturer:  Somagic, Inc.
[    3.384223] usb 1-1.2: SerialNumber: SMIGRAB03F9876543210
[    3.389076] input:  Somagic, Inc.   ezcap Video Grabber as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.1/0003:1C88:1001.0001/input/input0
[    3.444305] hid-generic 0003:1C88:1001.0001: input,hidraw0: USB HID v1.11 Keyboard [ Somagic, Inc.   ezcap Video Grabber] on usb-3f980000.usb-1.2/input1

I'm trying on ARM but I can not get it to work. (Raspbian Pixel).
sudo somagic-init

/usr/local/bin/somagic-init: 1: /usr/local/bin/somagic-init: Syntax error: redirection unexpected

sudo somagic-capture |sudo  mplayer -vf yadif,screenshot -demuxer rawvideo -rawvideo "pal:format=uyvy:fps=25" -aspect 4:3 -

uyvy:fps=25" -aspect 4:3 -
/usr/local/bin/somagic-capture: 1: /usr/local/bin/somagic-capture: Syntax error: "(" unexpected
MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team
Cannot open file '/root/.mplayer/input.conf': No such file or directory
Failed to open /root/.mplayer/input.conf.
Cannot open file '/etc/mplayer/input.conf': No such file or directory
Failed to open /etc/mplayer/input.conf.
Playing -.
Reading from stdin...
Detected file format: rawvideo
Load subtitles in .
X11 connection rejected because of wrong authentication.
vo: couldn't open the X11 display (localhost:10.0)!
X11 connection rejected because of wrong authentication.
vo: couldn't open the X11 display (localhost:10.0)!
X11 connection rejected because of wrong authentication.
vo: couldn't open the X11 display (localhost:10.0)!
X11 connection rejected because of wrong authentication.
[gl] OpenGL 3.x context creation not implemented.
X11 connection rejected because of wrong authentication.
vo: couldn't open the X11 display (localhost:10.0)!
X11 connection rejected because of wrong authentication.
SDL SetVideoMode failed: OpenGL not available
X11 connection rejected because of wrong authentication.
vo: couldn't open the X11 display (localhost:10.0)!
X11 connection rejected because of wrong authentication.
[VO_SDL] Using driver: fbcon.
X11 connection rejected because of wrong authentication.
vo: couldn't open the X11 display (localhost:10.0)!
[ass] auto-open
Opening video filter: [screenshot]
Opening video filter: [yadif]
VIDEO:  720x576  25.000 fps  165888.0 kbps (20736.0 kB/s)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
Aspect ratio is 1.33:1 - scaling to correct movie aspect.
[swscaler @ 0x75a07980]using unscaled uyvy422 -> yuv420p special converter
VO: [sdl] 720x576 => 768x576 Planar YV12
Selected video codec: RAW UYVY [raw]
Audio: no sound
Starting playback...
V:   0.0   0/  0 ??% ??% ??,?% 0 0
Exiting... (End of file)

Regards

 Syntax error: redirection unexpected and Syntax error: "("  sound like bash errors. https://stackoverflow.com/a/2462357

Thank you!
I run sudo

dpkg-reconfigure dash

and select No. But now I have other error:
pi@raspberrypi:~/EasyCap/somagic-easycap_1.1 $ somagic-init
-bash: /usr/local/bin/somagic-init: cannot execute binary file: Exec format error

Regards

The source is in this repo, docs: https://github.com/stevelacy/EasyCap/blob/master/documentation/installation.md#compile-from-source

Thanks you!
I just tried this:
cd EasyCap
make clean
make
sudo make install
somagic_init

USB device 1c88:0007 was not found. Is the device attached?

Yes!, it's plugged to Raspberry Pi 2 and the green led is high, but my id is 1c88:1001 Somagic, Inc (aqprox brand).
somagic-capture -c --iso-transfers 100 --pal --sync=1 | mplayer -nocache -vf yadif -demuxer rawvideo -rawvideo "pal:format=uyvy:fps=25" -aspect 4:3 -

USB device 1c88:003c was not found.
USB device 1c88:003d was not found.
USB device 1c88:003e was not found.
USB device 1c88:003f was not found.
Has device initialization been performed?
MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team

Regards

Did you try using the device id? #6

sudo somagic-capture -d 1 -c --iso-transfers 100 --pal --sync=1 | mplayer -nocache -vf yadif -demuxer rawvideo -rawvideo "pal:format=uyvy:fps=25" -aspect 4:3 -

Failed to set active device configuration: Device or resource busy

I added 1001 device to somagic-init and somagic-capture and then compile it but I get the same message.
sudo somagic-init

Failed to set active device configuration: Device or resource busy

sudo somagic-capture -c --iso-transfers 100 --pal --sync=1 | mplayer -nocache -vf yadif -demuxer rawvideo -rawvideo "pal:format=uyvy:fps=25" -aspect 4:3 -

Failed to set active device configuration: Device or resource busy

I have the same experience as @hexagon-robotics . I put my 1001 code into the somagic-init, but I get the same device or resource busy.
I also think that the firmware distributed in the git repo is not for the 1001 device. (Generally, bad form to distribute built binaries in a git repo)

So, how does one go about decoding the .sys file to find the right firmware for the 0x1001 devices?

Any updates on this?

No, I will close this issue as I no longer am adding support for new devices I do not own

@stevelacy Surely there is still a possibility of other adding support, since this is an open source project? Might want to leave it open for others to see that this is still an issue.

Yes, I will gladly merge any PR for adding new devices, I'll keep it open for that

I have an EasyCap which identifies as 1c88:1001 and I also have the original driver CD however the firmware extract utility does not recognise any of the firmware files.
I am using a Raspberry Pi 4 running the latest Raspbian and I compiled the tools from source. Is thre anything I can do? If someone gives me instructions I can generate the CRC or whatever and push it to the repo. It would be great if I can get this thing working

Hi.
I've managed to make firmware extraction work for 1c88:1001: see https://github.com/stevelacy/EasyCap/pull/13
However I couldn't make somagic-init work with it yet though. What I've tried:

modify somagic-init to support 1c88:1001 device identifier instead of 1c88:0007
release the device held by usbhid with echo -n "2-1:1.0" > /sys/bus/usb/drivers/usbhid/unbind
run somagic-init

[timestamp] [threadID] facility level [function call] <message>
--------------------------------------------------------------------------------
[ 0.002181] [0000f471] libusb: debug [libusb_get_device_list]
[ 0.002192] [0000f471] libusb: debug [discovered_devs_append] need to increase capacity
[ 0.002195] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1d6b:0x0003
[ 0.002199] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x18a5:0x0302
[ 0.002202] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1c88:0x1001
[ 0.002204] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1a40:0x0201
[ 0.002206] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x0b05:0x1847
[ 0.002209] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x046d:0x081b
[ 0.002212] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1a40:0x0201
[ 0.002215] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1d6b:0x0002
[ 0.002219] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1d6b:0x0003
[ 0.002222] [0000f471] libusb: debug [libusb_get_device_descriptor]
0x1d6b:0x0002
[ 0.002226] [0000f471] libusb: debug [libusb_get_device_list]
[ 0.002228] [0000f471] libusb: debug [discovered_devs_append] need to increase capacity
[ 0.002231] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002233] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002234] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002236] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002238] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002240] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002242] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002244] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002245] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002246] [0000f471] libusb: debug [libusb_get_device_descriptor]
[ 0.002248] [0000f471] libusb: debug [libusb_open] open 1.24
[ 0.002259] [0000f471] libusb: debug [usbi_add_pollfd] add fd 10 events 4
[ 0.002263] [0000f471] libusb: debug [libusb_claim_interface] interface 0
[ 0.002274] [0000f471] libusb: debug [libusb_set_interface_alt_setting] interface 0 altsetting 0
[ 0.002375] [0000f471] libusb: debug [libusb_alloc_transfer] transfer 0x5651ac093f30
[ 0.002381] [0000f471] libusb: debug [libusb_submit_transfer] transfer 0x5651ac093f30
[ 0.002382] [0000f471] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 0.002390] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.002392] [0000f471] libusb: debug [handle_events] poll fds modified, reallocating
[ 0.002395] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 0.002504] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 0.002511] [0000f471] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=18
[ 0.002513] [0000f471] libusb: debug [handle_control_completion] handling completion status 0
[ 0.002515] [0000f471] libusb: debug [disarm_timerfd]
[ 0.002517] [0000f471] libusb: debug [usbi_handle_transfer_completion] transfer 0x5651ac093f30 has callback 0x7fc6ce27d590
[ 0.002519] [0000f471] libusb: debug [sync_transfer_cb] actual_length=18
[ 0.002521] [0000f471] libusb: debug [libusb_free_transfer] transfer 0x5651ac093f30
1 get descriptor returned 18, bytes: 12 01 00 02 00 00 00 40 88 1c 01 10 00 01 01 02 03 01<EMAIL_ADDRESS>[ 0.002527] [0000f471] libusb: debug [libusb_alloc_transfer] transfer 0x5651ac093050
[ 0.002529] [0000f471] libusb: debug [libusb_submit_transfer] transfer 0x5651ac093050
[ 0.002530] [0000f471] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 0.002535] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.002536] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 0.002701] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 0.002708] [0000f471] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=9
[ 0.002710] [0000f471] libusb: debug [handle_control_completion] handling completion status 0
[ 0.002711] [0000f471] libusb: debug [disarm_timerfd]
[ 0.002713] [0000f471] libusb: debug [usbi_handle_transfer_completion] transfer 0x5651ac093050 has callback 0x7fc6ce27d590
[ 0.002715] [0000f471] libusb: debug [sync_transfer_cb] actual_length=9
[ 0.002717] [0000f471] libusb: debug [libusb_free_transfer] transfer 0x5651ac093050
2 get descriptor returned 9, bytes: 09 02 4b 00 02 01 00 80 fa "..K......"
[ 0.002721] [0000f471] libusb: debug [libusb_alloc_transfer] transfer 0x5651ac099b60
[ 0.002723] [0000f471] libusb: debug [libusb_submit_transfer] transfer 0x5651ac099b60
[ 0.002724] [0000f471] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 0.002729] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.002730] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 0.002944] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 0.002951] [0000f471] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=34
[ 0.002953] [0000f471] libusb: debug [handle_control_completion] handling completion status 0
[ 0.002954] [0000f471] libusb: debug [disarm_timerfd]
[ 0.002956] [0000f471] libusb: debug [usbi_handle_transfer_completion] transfer 0x5651ac099b60 has callback 0x7fc6ce27d590
[ 0.002958] [0000f471] libusb: debug [sync_transfer_cb] actual_length=34
[ 0.002960] [0000f471] libusb: debug [libusb_free_transfer] transfer 0x5651ac099b60
3 get descriptor returned 34, bytes: 09 02 4b 00 02 01 00 80 fa 09 04 00 00 00 ff ff ff 00 09 04 00 01 01 ff ff ff 00 07 05 82 05 ff 03 01 "..K..............................."
[ 0.002967] [0000f471] libusb: debug [libusb_release_interface] interface 0
[ 0.002973] [0000f471] libusb: debug [libusb_set_configuration] configuration 1
[ 0.003161] [0000f471] libusb: debug [libusb_claim_interface] interface 0
[ 0.003172] [0000f471] libusb: debug [libusb_set_interface_alt_setting] interface 0 altsetting 0
[ 0.004324] [0000f471] libusb: debug [libusb_alloc_transfer] transfer 0x5651ac08ec90
[ 0.004330] [0000f471] libusb: debug [libusb_submit_transfer] transfer 0x5651ac08ec90
[ 0.004331] [0000f471] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 0.004337] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.004338] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 0.004447] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 0.004455] [0000f471] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=2
[ 0.004456] [0000f471] libusb: debug [handle_control_completion] handling completion status 0
[ 0.004458] [0000f471] libusb: debug [disarm_timerfd]
[ 0.004460] [0000f471] libusb: debug [usbi_handle_transfer_completion] transfer 0x5651ac08ec90 has callback 0x7fc6ce27d590
[ 0.004462] [0000f471] libusb: debug [sync_transfer_cb] actual_length=2
[ 0.004464] [0000f471] libusb: debug [libusb_free_transfer] transfer 0x5651ac08ec90
5 control msg returned 2, bytes: 01 03 ".."
[ 0.004468] [0000f471] libusb: debug [libusb_alloc_transfer] transfer 0x5651ac08ed70
[ 0.004470] [0000f471] libusb: debug [libusb_submit_transfer] transfer 0x5651ac08ed70
[ 0.004471] [0000f471] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 0.004476] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.004477] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 0.004619] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 0.004626] [0000f471] libusb: debug [reap_for_handle] urb type=2 status=-32 transferred=0
[ 0.004629] [0000f471] libusb: debug [handle_control_completion] handling completion status -32
[ 0.004632] [0000f471] libusb: debug [handle_control_completion] unsupported control request
[ 0.004634] [0000f471] libusb: debug [disarm_timerfd]
[ 0.004637] [0000f471] libusb: debug [usbi_handle_transfer_completion] transfer 0x5651ac08ed70 has callback 0x7fc6ce27d590
[ 0.004639] [0000f471] libusb: debug [sync_transfer_cb] actual_length=0
[ 0.004641] [0000f471] libusb: debug [libusb_free_transfer] transfer 0x5651ac08ed70
6 control msg returned -9, bytes:
[ 0.005728] [0000f471] libusb: debug [libusb_alloc_transfer] transfer 0x5651ac097d00
[ 0.005733] [0000f471] libusb: debug [libusb_submit_transfer] transfer 0x5651ac097d00
[ 0.005735] [0000f471] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 0.005741] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.005742] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 1.005805] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 1.005838] [0000f471] libusb: debug [handle_events] timerfd triggered
[ 1.005847] [0000f471] libusb: debug [libusb_cancel_transfer] transfer 0x5651ac097d00
[ 1.005981] [0000f471] libusb: debug [disarm_timerfd]
[ 1.006019] [0000f471] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 1.006030] [0000f471] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 1.006044] [0000f471] libusb: debug [handle_events] poll() returned 1
[ 1.006058] [0000f471] libusb: debug [reap_for_handle] urb type=2 status=-2 transferred=0
[ 1.006071] [0000f471] libusb: debug [handle_control_completion] handling completion status -2
[ 1.006084] [0000f471] libusb: debug [usbi_handle_transfer_cancellation] detected timeout cancellation
[ 1.006095] [0000f471] libusb: debug [disarm_timerfd]
[ 1.006108] [0000f471] libusb: debug [usbi_handle_transfer_completion] transfer 0x5651ac097d00 has callback 0x7fc6ce27d590
[ 1.006120] [0000f471] libusb: debug [sync_transfer_cb] actual_length=0
[ 1.006132] [0000f471] libusb: debug [libusb_free_transfer] transfer 0x5651ac097d00
7 control msg returned -7, bytes:
[...]
^C

It seems that for this particular device (the Somagic 1c88:1001) you do not need the firmware nor to run somagic-init.
I added the USB ID so somagic-capture, and the program manages to capture some video data. I could not decode it properly (I had some vertical sync issues), but I think those have to do with the camera I was using and my ignorance of ffmpeg options.

Hi pablob127,
I added the correct USB ID to the source, but can seem to complete the step of releasing the device  as I get this error:
~/source/EasyCap/somagic-easycap_1.1$ sudo echo -n "2-1:1.0" > /sys/bus/usb/drivers/usbhid/unbind
bash: /sys/bus/usb/drivers/usbhid/unbind: Permission denied
Running it with sudo doesn't seem to help.  Any other suggestions?
Thanks again for getting me this far!

sudo echo -n "2-1:1.0" > /sys/bus/usb/drivers/usbhid/unbind

The redirection isn't done by root, hence the error. See: https://stackoverflow.com/questions/82256/how-do-i-use-sudo-to-redirect-output-to-a-location-i-dont-have-permission-to-wr
Moreover you need to adapt the device number (e.g. "2-1:1.0" above) to your device. First find the device id:
> lsusb -d 1c88:1001
Bus 001 Device 007: ID 1c88:1001 Somagic, Inc.

# Device number is 7

> lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 10000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
    |__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/7p, 480M
        [...]
        |__ Port 4: Dev 5, If 2, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 5: Dev 6, If 0, Class=Hub, Driver=hub/7p, 480M
            |__ Port 4: Dev 8, If 0, Class=Mass Storage, Driver=usb-storage, 480M
            |__ Port 2: Dev 7, If 0, Class=Vendor Specific Class, Driver=, 480M
            |__ Port 2: Dev 7, If 1, Class=Human Interface Device, Driver=usbhid, 480M
                          ^-- HERE: device 7 is bound to usbhid
            |__ Port 5: Dev 9, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

The device id seems to be: BUS-Port[.Port]*:1.If So in my case it is 1-3.5.2:1:1
> su
> echo -n "1-3.5.2:1.1" > /sys/bus/usb/drivers/usbhid/unbind
> exit

I am off with something.  Here's my info:
[407354.312463] usb 1-1.2: new high-speed USB device number 23 using
xhci_hcd
[407354.333604] usb 1-1.2: New USB device found, idVendor=1c88,
idProduct=1001, bcdDevice= 1.00
[407354.333609] usb 1-1.2: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[407354.333611] usb 1-1.2: Product: ezcap Video Grabber
[407354.333614] usb 1-1.2: Manufacturer:  Somagic, Inc.
[407354.333616] usb 1-1.2: SerialNumber: SMIGRAB03F9876543210
[407354.337758] input:  Somagic, Inc.   ezcap Video Grabber as
/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.1/0003:1C88:1001.000B/input/input45
[407354.397107] hid-generic 0003:1C88:1001.000B: input,hidraw6: USB HID
v1.11 Keyboard [ Somagic, Inc.   ezcap Video Grabber] on
usb-0000:00:14.0-1.2/input1
~$ lsusb -d 1c88:1001
Bus 001 Device 023: ID 1c88:1001 Somagic, Inc.
~$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 5000M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 3: Dev 7, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=uas, 5000M
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 15, If 0, Class=Vendor Specific Class,
Driver=ftdi_sio, 12M
|__ Port 4: Dev 16, If 2, Class=Human Interface Device,
Driver=usbhid, 12M
|__ Port 4: Dev 16, If 0, Class=Human Interface Device,
Driver=usbhid, 12M
|__ Port 4: Dev 16, If 1, Class=Human Interface Device,
Driver=usbhid, 12M
|__ Port 2: Dev 14, If 0, Class=Vendor Specific Class,
Driver=ftdi_sio, 12M
|__ Port 4: Dev 6, If 2, Class=Human Interface Device,
Driver=usbhid, 12M
|__ Port 4: Dev 6, If 0, Class=Human Interface Device,
Driver=usbhid, 12M
|__ Port 4: Dev 6, If 1, Class=Human Interface Device,
Driver=usbhid, 12M
|__ Port 2: Dev 23, If 1, Class=Human Interface Device,
Driver=usbhid, 480M
|__ Port 2: Dev 23, If 0, Class=Vendor Specific Class, Driver=, 480M
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 7, If 3, Class=Video, Driver=uvcvideo, 480M
|__ Port 1: Dev 7, If 1, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 1: Dev 7, If 2, Class=Video, Driver=uvcvideo, 480M
|__ Port 1: Dev 7, If 0, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 4: Dev 19, If 0, Class=Mass Storage, Driver=usb-storage,
480M
|__ Port 4: Dev 5, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 4: Dev 5, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 8: Dev 9, If 1, Class=CDC Data, Driver=cdc_acm, 12M
|__ Port 8: Dev 9, If 0, Class=Communications, Driver=cdc_acm, 12M
|__ Port 12: Dev 11, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 12: Dev 11, If 1, Class=Video, Driver=uvcvideo, 480M
~$ su
echo -n "1-2.2.2:1.1" > /sys/bus/usb/drivers/usbhid/unbind
bash: echo: write error: No such device
Thanks again for your help!
On Wed, Jun 3, 2020 at 9:22 AM Sylvain Henry<EMAIL_ADDRESS>wrote:

sudo echo -n "2-1:1.0" > /sys/bus/usb/drivers/usbhid/unbind
The redirection isn't done by root, hence the error. See:
https://stackoverflow.com/questions/82256/how-do-i-use-sudo-to-redirect-output-to-a-location-i-dont-have-permission-to-wr
Moreover you need to adapt the device number (e.g. "2-1:1.0" above) to
your device. First find the device id:

lsusb -d 1c88:1001
Bus 001 Device 007: ID 1c88:1001 Somagic, Inc.

Device number is 7

lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 10000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/7p, 480M
[...]
|__ Port 4: Dev 5, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 5: Dev 6, If 0, Class=Hub, Driver=hub/7p, 480M
|__ Port 4: Dev 8, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 7, If 0, Class=Vendor Specific Class, Driver=, 480M
|__ Port 2: Dev 7, If 1, Class=Human Interface Device, Driver=usbhid, 480M
^-- HERE: device 7 is bound to usbhid
|__ Port 5: Dev 9, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

The device id seems to be: BUS-Port[.Port]*:1.If So in my case it is
1-3.5.2:1:1

su
echo -n "1-3.5.2:1.1" > /sys/bus/usb/drivers/usbhid/unbind
exit

—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/stevelacy/EasyCap/issues/1#issuecomment-638231314,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AHMNPM6KK6VONNRZFWCWIKDRUZMCRANCNFSM4CBQ3KJA
.

@mrgw454
In your case it should be: 1-1.2:1.1
It's also given in the log:
[407354.337758] input:  Somagic, Inc.   ezcap Video Grabber as
/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.1/0003:1C88:1001.000B/input/input45
[407354.397107] hid-generic 0003:1C88:1001.000B: input,hidraw6: USB HID

That was it.
Thank you so much!
On Wed, Jun 3, 2020 at 12:40 PM Sylvain Henry<EMAIL_ADDRESS>wrote:

@mrgw454 https://github.com/mrgw454
In your case it should be: 1-1.2:1.1
It's also given in the log:
[407354.337758] input:  Somagic, Inc.   ezcap Video Grabber as
/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.1/0003:1C88:1001.000B/input/input45
[407354.397107] hid-generic 0003:1C88:1001.000B: input,hidraw6: USB HID
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stevelacy/EasyCap/issues/1#issuecomment-638348204,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AHMNPM2OJQULCYSOAHMJPOTRU2DHNANCNFSM4CBQ3KJA
.

I have new EzCap USB Video Grabber from aliexpress (https://aliexpress.ru/item/32824460178.html). The CD with Windows driver is included. In Windows 8.1 device is works.

And faced with installation too. I use Slackware64-current linux up to date.
$ lsusb
Bus 001 Device 021: ID 1c88:1001 Somagic, Inc. ezcap Video Grabber

$ dmesg
[34339.604688] usb 1-1: new high-speed USB device number 21 using xhci_hcd
[34339.731567] usb 1-1: New USB device found, idVendor=1c88, idProduct=1001, bcdDevice= 1.00
[34339.731571] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[34339.731574] usb 1-1: Product: ezcap Video Grabber
[34339.731576] usb 1-1: Manufacturer:  Somagic, Inc.
[34339.731578] usb 1-1: SerialNumber: SMIGRAB03F9876543210
[34339.733072] input:  Somagic, Inc.   ezcap Video Grabber as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:1C88:1001.000F/input/input38
[34339.785175] hid-generic 0003:1C88:1001.000F: input,hidraw3: USB HID v1.11 Keyboard [ Somagic, Inc.   ezcap Video Grabber] on usb-0000:00:14.0-1/input1
[34340.364091] udevd[3197]: failed to execute '/lib/udev/libinput-device-group' 'libinput-device-group /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:1C88:1001.000F/input/input38/event17': No such file or directory

I dowloaded EasyCap source version 1.1 from github and compiled. Then applied somagic-easycap-tools_1.1 for copy of driver from CD.

$ sudo ./somagic-extract-firmware ../../Driver/Drivers/win_xp/SmiUsbGrabber3C.sys
Firmware written to '/lib/firmware/somagic_firmware.bin'.

Unbind the device:
echo -n "1-1:1.1" > /sys/bus/usb/drivers/usbhid/unbind
Go to somagic-easycap_1.1 directory and apply somagic-init:
sudo ./somagic-init
Firmware file '/lib/firmware/somagic_firmware.bin' was not recognized.
Then I change ID in somagic-init.c to 0x1001, recompile and again
sudo ./somagic-init
Firmware file '/lib/firmware/somagic_firmware.bin' was not recognized.
somagic-capture not works

$ sudo ./somagic-capture
USB device 1c88:003c was not found.
USB device 1c88:003d was not found.
USB device 1c88:003e was not found.
USB device 1c88:003f was not found.
Has device initialization been performed?

If I add 0x1001 in array PRODUCT[PRODUCT_COUNT] and change PRODUCT_COUNT=5 then
$ sudo ./somagic-capture
Failed to set active device configuration: Device or resource busy
or
sudo ./somagic-capture -c --iso-transfers 100 --pal --sync=1
./somagic-capture: Failed to submit request #84 for transfer: Cannot allocate memory

Thank you. I spent over four hours searching for a solution.


Update common.py postgres connection string

By removing localhost we enable the default use of Unix sockets which integrates better with the postgresql access rights in pg_hba.conf.

Will this work on Windows?

Can't test this now, but I'm guessing it won't. But using localhost both Windows and *nix users need to change the connection string either way? Perhaps a commented example string would be better?

An if/else/endif statement would work: {% if cookiecutter.windows == 'y' %}localhost{% else % }{% endif %}
This requires a change to cookiecutter.json. The default for a cookiecutter.windows setting should be n.


Episodes and Shows functionality

Partly resolved #36 I implemented episodes and shows Spotify API functions, they are pretty much the same as album + tracks. So, the code is very close to them.
The steps I did:

Saw how you implemented the same logic inside album and tracks.
Created types for episode and track, which is close to album and tracks.
Created new functions, that implements logic from episodes and tracks chapters of Spotify Docs.
Also, I tested it a bit by hands and it seems to work good.
Wrote some docs for new functionality.
Run pnpm lint and default tests.

Codecov Report

Merging #37 (ab89968) into main (78e6662) will decrease coverage by 1.14%.
The diff coverage is 0.00%.

@@            Coverage Diff            @@
##             main     #37      +/-   ##
=========================================
- Coverage   10.81%   9.67%   -1.14%
=========================================
  Files          34      38       +4
  Lines        4588    5126     +538
  Branches       16      16
=========================================
  Hits          496     496
- Misses       4092    4630     +538

Impacted Files
Coverage Δ

src/api/endpoints.ts
0.00% <0.00%> (ø)

src/api/episode/episode.endpoints.ts
0.00% <0.00%> (ø)

src/api/episode/episode.types.ts
0.00% <0.00%> (ø)

src/api/general.types.ts
0.00% <0.00%> (ø)

src/api/index.ts
0.00% <0.00%> (ø)

src/api/show/show.endpoints.ts
0.00% <0.00%> (ø)

src/api/show/show.types.ts
0.00% <0.00%> (ø)

Thank you so much for your contribution to the project! It looks like good quality code to me. In the future I would like to write tests for this and other functionality, but so far everything looks good. In the near future I will also try to make the contributors section in the readme. Thank's again!


Checkbox style

When I create checkboxes in Acrobat Pro, I have options of style: check, cross, circle, etc. Can I specify these options in pdf-lib? Can I change the style on an existing checkbox, or even create a checkbox with a different style?

Hello @bcholmes!
You can't specify the specific options that acrobat offers. That would be a great feature to offer though if you'd like to build a PR for it 😄
However, you can specify a custom style for checkboxes (or any other form field). I build the acroforms API specifically to allow this. This integration test showcases the feature: https://github.com/Hopding/pdf-lib/blob/9168383d88e60b77922d2d031f4f9138eeff7240/apps/node/tests/test17.ts#L78-L194
You can run the test and view the resulting document by cloning the repo and running:
yarn install
yarn apps:node 17

Thanks for answering my question.
I'd love to do a PR, once I have a bit more fluency with pdf-lib under my belt.

Hi!
I would like to work on this. However, I was wondering what should the API to choose from a set of predefined checkbox appearances look like.
@Hopding, should some new AppearanceProviderFor<PDFCheckBox> consts simply be exported from the library (maybe in a submodule) in order to be directly passed to PDFCheckBox.updateAppearances?
Or maybe the default checkbox appearance should include the logic to optionally (e.g. based on a new argument) draw different shapes for the 'on' state with operations like drawCheckMark?
I still need to familiarize with this codebase but I stumbled upon this issue while working on a personal project and I think it would be a nice addition.

I had the same need to have a checkbox with the Acrobat "Cross" style and it took me a while to find an approach that works for me.
The problem with updating the appearances of a checkbox using pdf-lib is that Acrobat partly ignores them. I was successful in showing a cross when checked, but when clicking somewhere else on the page the appearance reverted to the "Check" style (the default). I could also see that in the properties of the checkbox.
Important is that the style of a checkbox is not part of the PDF specification. In other words, the style that Acrobat shows in the UI must be Acrobat-specific, but there is no custom entry in the PDFDict of the checkbox. The only explanation I see is that Acrobat checks the stream of the appearance to determine the style; by the way, the cross in a checkbox created by Acrobat is not made up of two lines, but of a character from the Zapf Dingbats font.
If that assumption is correct, then the problem must be solvable by making sure the whole PDFDict of the indirect object that describes the checkbox is identical to that as created by Acrobat.
I tried doing that, but I could not get it to work and I was also worried that a small detail could make the difference between success and frustration.
I then took the approach of duplicating the whole checkbox construct from a template file created with Acrobat and that does the trick. Attached is the code that can be run from the command line (as .ts files are not allowed I added .txt, so remove that and transpile).
acrobatcheckbox.ts.txt
The approach of using a template file also has its advantages, or at least it has for my use case: the user can edit the template file to create the checkbox of their liking and the code still works. I have not tried it, but it may also be a useful approach for the more complex widgets, e.g. text fields with a specific formatting, validation rules or calculated values.

@bcholmes Have you been able to try this out and has it proven to be a solution for you too?


[Add] CUSTOM ANIMATED CARTOON Button

Details
i want to add a CUSTOM ANIMATED CARTOON Button
https://github.com/Spyware007/Animating-Buttons/assets/119161467/c406aa1b-4397-446f-8beb-ff97bbeb6c32
Screenshots

Type of Contribution

[ ] Update to an existing Animated Button
[X] Adding a new Button
[ ] Resolving a bug
[ ] Proposal to the Repository
[ ] Changes related to documentation or README.md
[ ] Other Changes

Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I am willing to work on this issue
[X] I am a GSSoC'23 contributor

@Souravvmishra I am writing to kindly request your attention and consideration in reviewing and assigning this issue. I would greatly appreciate it if you could allocate some time to review the issue and provide your feedback. If there are any areas that require further attention or modifications, please let me know, and I will be more than willing to address them promptly.

Please check #1346

@TANYA-CHAN  Can you please assign this issue to me it will be very helpfull for me

@TANYA-CHAN Can you please assign this issue to me it will be very helpfull for me

Even if you create a PR it can be only merged after a few days when the firebase conversion happens

ok @TANYA-CHAN but thankyou for considering my request means a lot

No problem


CASSCF spin exploded in the final CASCI E output

Dear PySCF developers and users,
recently I met a special case: for some challenging systems like Cr2, the CASSCF(12,12) orbital optimization goes well with good initial orbitals, and the CASCI spin is as expected
macro iter   1 ( 14 JK    4 micro), CASSCF E = -2086.60797280248  dE = -5.24323987e-03  S^2 = 0.0000004
macro iter   2 ( 11 JK    4 micro), CASSCF E = -2086.60801066618  dE = -3.78636978e-05  S^2 = 0.0000003
macro iter   3 (  3 JK    1 micro), CASSCF E = -2086.60801153831  dE = -8.72137207e-07  S^2 = 0.0000001
macro iter   4 (  3 JK    1 micro), CASSCF E = -2086.60801169759  dE = -1.59276624e-07  S^2 = 0.0000000
macro iter   5 (  3 JK    1 micro), CASSCF E = -2086.60801172659  dE = -2.89987838e-08  S^2 = 0.0000000

However, the CASCI spin suddenly explodes in the final printing
...
i = 86  <i|F|i> =   3.55688326
i = 87  <i|F|i> =   3.55688328
i = 88  <i|F|i> =   4.12346818
i = 89  <i|F|i> =   4.12346819
i = 90  <i|F|i> =   5.33836819
    CPU time for 1-step CASSCF    770.41 sec, wall time     12.65 sec
CASSCF energy = -2086.60801172659
CASCI E = -2086.60801172659  E(CI) = -31.4772790717298  S^2 = 6506837.6924629

Is it possible that there is some tiny bug in the final calculation of CASCI S^2? I only perform tests using PySCF 2.3~2.5 and this problem always exists.
The final few lines in the python script are
mc = mcscf.CASSCF(mf,12,(6,6))
mc.max_memory = 126000 # MB
mc.fcisolver.max_memory = 54000 # MB
mc.fcisolver.spin = 0
mc.fcisolver.max_cycle = 200
mc.natorb = True
mc.max_cycle = 300
mc.verbose = 5
mc.kernel()

Here are some input and output files attached, in cases that you want to perform some calculations for debugging.
CASCI_spin_explosion.zip
Many thanks!

I cannot reproduce. Do you see this error using one thread? Issues may be easier to reproduce if you can provide a docker image.

Hi, Qiming, thanks to your kind help. I try different threads and the resulting <S^2> are different

No. threads
<S^2>

1
0.0

16
0.0

28
0.0

29
0.0

30
33.6943185

32
9.6745643

Besides, the non-zero S^2 will change with a second run. But the zero S^2 is always 0.0.
And thanks to @hebrewsnabla 's help, I create a simpler example which can reproduce a similar explosion
from pyscf import gto, scf, mcscf, lib

nproc = 64
lib.num_threads(nproc)

mol = gto.M()
mol.atom = '''
Cr   0.0  0.0  0.00
Cr   0.0  0.0  1.68
'''

mol.basis = 'def2TZVP'
mol.charge = 0
mol.spin = 0
mol.verbose = 4
mol.build(parse_arg=False)

mf = scf.RHF(mol)
mf.max_cycle = 300
mf.max_memory = 180000 # MB
mf.kernel()

mc = mcscf.CASSCF(mf,12,(6,6))
mc.max_memory = 126000 # MB
mc.fcisolver.max_memory = 54000 # MB
mc.fcisolver.spin = 0
mc.fcisolver.max_cycle = 200
mc.natorb = True
mc.verbose = 5
mc.kernel()

The result is
...
i = 88  <i|F|i> =   4.12348431
i = 89  <i|F|i> =   4.12348431
i = 90  <i|F|i> =   5.33836619
    CPU time for 1-step CASSCF   1795.28 sec, wall time     28.54 sec
CASSCF energy = -2086.60801173985
CASCI E = -2086.60801173985  E(CI) = -31.4775181538134  S^2 = 5216.8550832

Moreover, if mc.natorb = True is deleted, the resulting S^2 is normal
...
i = 88  <i|F|i> =   4.12349451
i = 89  <i|F|i> =   4.12349451
i = 90  <i|F|i> =   5.33837706
    CPU time for 1-step CASSCF   1755.91 sec, wall time     27.57 sec
CASSCF energy = -2086.60801171755
CASCI E = -2086.60801171755  E(CI) = -31.4775954615125  S^2 = 0.0000000

Maybe there is something sensitive to the number of threads for mc.natorb = True.


Enable mypy warn_no_return in mypy for stricter type checking

Warns when a function that normally returns a value doesn't. Fixed all
cases discovered by the tool.

Codecov Report

Merging #980 into develop will decrease coverage by 0.01%.
The diff coverage is 85.71%.

@@             Coverage Diff             @@
##           develop     #980      +/-   ##
===========================================
- Coverage    89.69%   89.68%   -0.02%
===========================================
  Files           10       10
  Lines         2631     2638       +7
  Branches       453      453
===========================================
+ Hits          2360     2366       +6
- Misses         184      185       +1
  Partials        87       87


Governance proposal transaction silently failing

Expected Behavior
celocli governance:propose pushes a proposal to the queue
Current Behavior
celocli governance:propose succeeds and displays txHash from receipt but no ProposalQueued event is emitted and celocli governance:list shows no existing proposals
checkout branch yorhodes/baklava-attestations-upgrade
steps to repro:

apply patch of Attestations.sol to baklavastaging artifacts
deploy Attestations to baklavastaging by port-forwarding and running a new migration 25_new_attestations.ts
construct a governance proposal using ProposalBuilder.addProxyRepointTx with the newly deployed contract's address and submit using celocli governance:propose
inspect network state with celocli governance:list and/or blockscout etc.

see https://baklavastaging-blockscout.celo-testnet.org/tx/0x7778693334153deb880571082890afcb0643dd4e70fb8d24a042d9649f51d3be/raw_trace

Looks like the interface of propose was changed, so this call went to the fallback function.


update to 0.1.0

Changes:

new feedstock

No dev or doc url, as the repo is internal.

Linter check found the following problems:
The following problems have been found:
ERROR: clone/recipe/meta.yaml:21: host_section_needs_exact_pinnings: Packages in host must have exact version pinnings, except python build tools.
ERROR: clone/recipe/meta.yaml:22: missing_wheel: For pypi packages, wheel should be present in the host section
ERROR: clone/recipe/meta.yaml:33: missing_pip_check: For pypi packages, pip check should be present in the test commands
ERROR: clone/recipe/meta.yaml:43: missing_dev_url: The recipe is missing a dev_url
ERROR: clone/recipe/meta.yaml:43: missing_documentation: The recipe is missing a doc_url or doc_source_url
Errors were found

Linter check found the following problems:
The following problems have been found:
ERROR: clone/recipe/meta.yaml:21: host_section_needs_exact_pinnings: Packages in host must have exact version pinnings, except python build tools.
ERROR: clone/recipe/meta.yaml:22: missing_wheel: For pypi packages, wheel should be present in the host section
ERROR: clone/recipe/meta.yaml:33: missing_pip_check: For pypi packages, pip check should be present in the test commands
ERROR: clone/recipe/meta.yaml:43: missing_dev_url: The recipe is missing a dev_url
ERROR: clone/recipe/meta.yaml:43: missing_documentation: The recipe is missing a doc_url or doc_source_url
Errors were found

Linter check found the following problems:
The following problems have been found:
ERROR: clone/recipe/meta.yaml:21: host_section_needs_exact_pinnings: Packages in host must have exact version pinnings, except python build tools.
ERROR: clone/recipe/meta.yaml:22: missing_wheel: For pypi packages, wheel should be present in the host section
ERROR: clone/recipe/meta.yaml:33: missing_pip_check: For pypi packages, pip check should be present in the test commands
ERROR: clone/recipe/meta.yaml:43: missing_documentation: The recipe is missing a doc_url or doc_source_url
ERROR: clone/recipe/meta.yaml:43: missing_dev_url: The recipe is missing a dev_url
Errors were found


getTimeline function -> parameter userID unused?

I am confused.
When I use the getTimeline with my Twitter UserID, I receive my feed. As expected.
But by accident, I just used an empty String instead my userID sent as parameter and I still got my feed.
Also I have just tried to send the String lol instead of a valid userID, still got my feed. Is that a wanted behavior?
I'm talking about that function:
public func getTimeline(for userID: String, count: Int? = nil, sinceID: String? = nil, maxID: String? = nil, trimUser: Bool? = nil, contributorDetails: Bool? = nil, includeEntities: Bool? = nil, success: SuccessHandler? = nil, failure: FailureHandler? = nil) {
        let parameters: Dictionary<String, Any> = ["user_id": userID]

        self.getTimeline(at: "statuses/user_timeline.json", parameters: parameters, count: count, sinceID: sinceID, maxID: maxID, trimUser: trimUser, contributorDetails: contributorDetails, includeEntities: includeEntities, success: success, failure: failure)
}

It does not matter what String I send as for userID: String, it always returns MY feed.

If you send a valid userID, it will return the correct user.
It is normal Twitter behaviour to send your Twitter feed if you supply an invalid userID, it's not a Swifter issue.

Okay. So if the ID is valid, I get the feed from the ID, if not, I receive my home feed?

That is correct.


Warning during compilation about llvm-config --prefix

During compilation we observe the following warning:
warning: couldn't execute `llvm-config --prefix` (error: No such file or directory (os error 2))
warning: set the LLVM_CONFIG_PATH environment variable to a valid `llvm-config` executable

This is coming from bindgen crate and its dependency, clang-sys.
clang-sys searches for libclang library on the system using different means and one of them is via executing llvm-config --prefix.
Even if the libclang library is found on the system, a warning will be emitted.

Just keeping this issue for reference.


fix a comma

fixing a comma error on line 10

Changes Unknown when pulling fce5bd34706027e9ba04537eeebd535c54a62a8e on zogbi:patch-1 into ** on summernote:master**.


poetryup fails to execute on Windows within a Poetry environment

> poetry shell
> poetryup --latest
Traceback (most recent call last):
  File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\Scripts\poetryup.exe\__main__.py", line 7, in <module>
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\typer\main.py", line 214, in __call__
    return get_command(self)(*args, **kwargs)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\typer\main.py", line 500, in wrapper
    return callback(**use_params)  # type: ignore
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\poetryup\main.py", line 47, in poetryup
    pyproject = Pyproject(pyproject_str)
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\poetryup\core\pyproject.py", line 26, in __init__
    self.poetry_version = version_.parse(self.__get_poetry_version())
  File "C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\tmp-N1D6edvU-py3.10\lib\site-packages\poetryup\core\pyproject.py", line 327, in __get_poetry_version
    subprocess.run(
  File "C:\Program Files\Python310\lib\subprocess.py", line 501, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Program Files\Python310\lib\subprocess.py", line 966, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Program Files\Python310\lib\subprocess.py", line 1435, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified

It seems that on Windows, poetryup cannot find the path to poetry when installed in a Poetry session. This works fine when I tested it on macOS. Perhaps there is some kind of environment variable/subprocess issue when poetryup is running on Windows?
Environment
> python --version
Python 3.10.3

> poetry --version
Poetry version 1.1.13

> pip list
Package    Version
---------- -------
click      8.1.3
colorama   0.4.5
packaging  21.3
pip        22.1
poetryup   0.8.1
pyparsing  3.0.9
setuptools 62.2.0
tomlkit    0.11.0
typer      0.4.1
wheel      0.37.1

[tool.poetry]
name = "tmp"
version = "0.1.0"
description = ""
authors = ["Your Name<EMAIL_ADDRESS>
[tool.poetry.dependencies]
python = "^3.10"

[tool.poetry.dev-dependencies]
poetryup = "^0.8.1"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

I think it's related to subprocess.
Can you spawn a python shell and try to run the following (remember import subprocess)

subprocess.run(["poetry", "--version"])
subprocess.run("poetry --version", shell=True)

@MousaZeidBaker Yep, seems like that exactly:
> python
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.run(["poetry", "--version"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python310\lib\subprocess.py", line 501, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Program Files\Python310\lib\subprocess.py", line 966, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Program Files\Python310\lib\subprocess.py", line 1435, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
>>> subprocess.run("poetry --version", shell=True)
Poetry version 1.1.13
CompletedProcess(args='poetry --version', returncode=0)

I install Poetry using the official installer. I agree it's odd to need shell=True. I presume the issue has to do with poetry shell creating a new shell instance. That must somehow effect subprocesses ability to see the path to poetry?

@MousaZeidBaker Would you consider conditionally setting shell=True only when run on Windows?
Something like:
shell = platform.system() == "Windows"

Added to:
https://github.com/MousaZeidBaker/poetryup/blob/b7591d95400770aab24fe109b56f3c0cd8fe0343/src/poetryup/core/cmd.py#L27-L31
I'd really like to use poetryup, but need to manage it within a Poetry environment to ensure locking and a consistent experience for developers across machines & operating systems.

Brainstorming, another possible idea would be to make poetryup a Poetry plugin:

https://python-poetry.org/docs/plugins#plugins

This would avoid shelling out to poetry and would probably provide a more native experience for all users?

I tried this on Poetry 1.2.x on Windows and poetryup was able to call poetry without shell=True. I suspect this is due to the new installer for Poetry 1.2.x installing differently than the old get-poetry method.
In any case, this doesn't seem to be an issue with poetryup.

Glad to hear this issue is finally resolved without shell=True. Great detective work, yes probably due to the new installer.
Whenever I get some time over I'll have a look into poetry plugin as it sounds as a good option. Thanks for your contribution.


[WIP] Example with multi-GPU for both feature engineering and training

This is an early draft of a Tensorflow example notebook that combines the existing multi-GPU toy dataset feature engineering example with the recent multi-GPU training examples with Horovod.

Not quite sure where I've gone wrong, but I'm currently seeing errors like this after writing out the training script to disk and starting it with horovodrun:
[1,0]<stderr>:Traceback (most recent call last):
[1,0]<stderr>:  File "trainer.py", line 92, in <module>
[1,0]<stderr>:    tf.feature_column.categorical_column_with_identity(
[1,0]<stderr>:  File "/opt/conda/lib/python3.8/site-packages/tensorflow/python/feature_column/feature_column_v2.py", line 1569, in categorical_column_with_identity
[1,0]<stderr>:    raise ValueError(
[1,0]<stderr>:ValueError: num_buckets 0 < 1, column_name movieId

@bschifferer @rnyak This PR is now in a runnable state with the Tensorflow training container. I've left a few brief notes about what's different here from the existing MovieLens example, but it will probably need a bit more explanation on my part.

I got the error that horovad is not installed in the tensorflow container.
(rapids) root@bc00acc2b333:/workspace/01_NVT/30_MultiGPU/NVTabular/examples/multi-gpu-movielens# horovodrun -np 2 sh hvd_wrapper.sh python trainer.py --dir_in basedir --batch_size 1024
2021-04-06 08:34:10.686704: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
[1,1]<stderr>:Traceback (most recent call last):
[1,1]<stderr>:  File "trainer.py", line 13, in <module>
[1,1]<stderr>:    import horovod.tensorflow as hvd  # noqa: E402
[1,1]<stderr>:ModuleNotFoundError: No module named 'horovod'
[1,0]<stderr>:Traceback (most recent call last):
[1,0]<stderr>:  File "trainer.py", line 13, in <module>
[1,0]<stderr>:    import horovod.tensorflow as hvd  # noqa: E402
[1,0]<stderr>:ModuleNotFoundError: No module named 'horovod'
--------------------------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:

  Process name: [[26566,1],1]
  Exit code:    1

@karlhigley I restructured the notebook to follow the getting-started flow:

Download and Convert
ETL with NVTabular
Training with TensorFlow

I added text for previous notebooks + learnings. I added content to examples/README.md .
ToDo
Can you describe more the new content of the last section "Training with TensorFlow"?
What is "OpenMPI (or Slurm)"?
What is "Horovod"?
How do we use OpenMI/Horovod?
What is Horovod and how does it sync the parameter?
Why do we use seed_fn ?
Does not need to be long paragraphs - just a few sentences and then references to learn more?

@bschifferer

I got the error that horovad is not installed in the tensorflow container.
I need to install pip install horovod[tensorflow]

Ah, forgot to share a step: in order to use the Horovod bindings in the container, you have to export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.8/dist-packages. I'm not sure if we can do that from inside the notebook, so maybe it would be better to pip install horovod in a cell at the top?

We will be fixing the training containers for release, so that horovod is no longer hidden and available on the tf and torch containers.

@bschifferer I added more description of the parts that are specific to this notebook (e.g. training with Horovod.) Give it a look?

@karlhigley few comments from my side:

Add links for OpenMPI and Slurm
getting <stderr>:trainer.py: error: unrecognized arguments: --b_size 1024
still getting errror even if I used --batch_size flag instead of --b_size : !horovodrun -np 2 sh hvd_wrapper.sh python trainer.py --dir_in $BASE_DIR --batch_size 1024

[1,1]<stderr>:  File "trainer.py", line 31, in <module>
[1,1]<stderr>:    BATCH_SIZE = int(args.b_size) or 16384  # Batch Size
[1,1]<stderr>:AttributeError: 'Namespace' object has no attribute 'b_size'
[1,0]<stderr>:Traceback (most recent call last):
[1,0]<stderr>:  File "trainer.py", line 31, in <module>
[1,0]<stderr>:    BATCH_SIZE = int(args.b_size) or 16384  # Batch Size
[1,0]<stderr>:AttributeError: 'Namespace' object has no attribute 'b_size'

This because of this line in the trainer.py:  BATCH_SIZE = int(args.b_size) or 16384  # Batch Size Needs to be updated as args.batch_size.

Read -1, expected 66304, errno = 1

@karlhigley  I searched for it and found: https://github.com/horovod/horovod/issues/503
One option to remove those messages is to filter them out. When you run your training command:

mpirun ... python tensorflow_word2vec.py |& grep -v "Read -1"

it might help?

@rnyak Thanks for the comments! Normally it should print out a training loss once an epoch, so does sound like something is not working properly. What environment/machine are you running the notebook on? (Wondering because the script uses ~100% of the GPU compute capacity on my 3 GPU machine, so it does make the machine work pretty hard.)

@rnyak Thanks for the comments! Normally it should print out a training loss once an epoch, so does sound like something is not working properly. What environment/machine are you running the notebook on? (Wondering because the script uses ~100% of the GPU compute capacity on my 3 GPU machine, so it does make the machine work pretty hard.)

@karlhigley I used merlin-tensorflow-training container on a 4 X 16 GB V100 system. And I install horovod via pip install horovod[tensorflow]


Disable NODE_ENV=production in build --debug

Fix #500. Also removes React warning about unminified React in production.
I’m not sure you want this as the best solution to #500. After all, this makes it so that build --debug is now one step more different from production. At the same time it was super strange that --debug does not show, you know, debug information. Finally, maybe we think that non-minification already makes this build far enough from production, so might as well not set NODE_ENV.
This is a judgement call, and I am not sure about this solution, thus this PR is separate from the issue.

Made a comment in #500. Thoughts?

You are right that this changes the code from the final build, but so does not minifying it. Sure, NODE_ENV!=production can change behavior of ill-authored libraries, but so can minification, albeit less likely. On a scale from being identical to the production build and being very different, today the build --debug is one step away from the production build. Removing NODE_ENV=production would take it one more step away.
It is a trade-off: the build is less like production, but it’s more useful. There already exists a build that is exactly like production: the production build. There should be a clear value proposition for this different build, and library warnings seem like that.

Excellent point. I'm on board now :)

Are there any docs to update with this?

No, I don’t think we need to explain it in the docs so far.


Update CHANGELOG format and parsing

This PR is good. Please address https://github.com/cyberark/conjur-api-go/pull/59#discussion_r380724117 before we proceed.


Using houston within a rails app

This is quite a noob question as I'm still pretty new to rails. I'm wondering where's the right place to do the basic setup for houston? i.e. if I want to send a push notification in a controller, where is the right place to set up the APN code below:
require 'houston'
APN = Houston::Client.development
APN.certificate = File.read("/path/to/apple_push_notification.pem")

Do I do it directly in that controller file? That seems wrong... Do I do it in an initializer file? Is it ok to simply just create an arbitrary file within the initializers directory? Thanks a lot!

Delayed job of some sort, e.g. sidekiq.
You should read Rails best practices, but in general anything that goes off system, for which the user is not expecting an immediate response, goes into a queue of some sort.
In general, Rails best practices dictates that logic be moved from a controller to a model and/or help and/or task/job/runner.

Thanks, @kaneda.

Rails 4.2 brought us Active Job. @davidtlee You might want to look into that, when you’re following the advice of @kaneda.

Got it, thanks @kaneda, @mattt, and @j4zz! :)


⚠ ClamAV has degraded performance

In efeacad, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 74 ms

Resolved: ClamAV performance has improved in 94b4df0 after 14 minutes.


update the default channel to stable for install service protection

set the default channel when installing the manged addon to be stable

/lgtm
/approve


make script executable

@rkpagadala: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/daily-e2e-rbac-no_auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth-default

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@rkpagadala: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/daily-e2e-rbac-no_auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth-default

prow/daily-e2e-rbac-auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-auth-default

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@rkpagadala: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/daily-e2e-rbac-no_auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth-default

prow/daily-e2e-rbac-auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-auth-default

prow/daily-e2e-rbac-no_auth.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@rkpagadala: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/daily-e2e-rbac-no_auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth-default

prow/daily-e2e-rbac-auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-auth-default

prow/daily-e2e-rbac-no_auth.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth

prow/daily-e2e-cluster_wide-auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-cluster_wide-auth-default

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@rkpagadala: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/daily-e2e-rbac-no_auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth-default

prow/daily-e2e-rbac-auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-auth-default

prow/daily-e2e-rbac-no_auth.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-rbac-no_auth

prow/daily-e2e-cluster_wide-auth-default.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-cluster_wide-auth-default

prow/daily-e2e-cluster_wide-auth.sh
b0a3d7406fd3c9c2db0fb32006057894b2b72dbf
link
/test daily-e2e-cluster_wide-auth

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.


AudioKit 4.7 is Swift 5.0 only?

When building the AudioKit 4.7 framework for iOS via PLATFORMS="iOS" ./build_frameworks.sh  I am getting ❌  error: SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0, 4.2. (in target 'AudioKitUI
The Swift Language Version is set in the XCode project files as "Swift 5.0".  If I change that to my Swift 4.2 environment I then get the error:
AKMIDI+Sending.swift sendMessage function: AudioKit/Common/MIDI/AKMIDI+Sending.swift:273:41: error: 'UnsafeMutableRawBufferPointer' is not convertible to 'UnsafeMutablePointer<_>'
The readme as displayed on the GitHub page really ought to say that this 4.7 version is Swift 5.0 beta code.  If this is stated somewhere in the docs I apologize for missing it!

Yes, Swift 5 is the current stable version since Xcode 10.2 came out, and that's what we support now. Because of the changes to the language, AK 4.7. won't compile with earlier versions of Swift any more. This is not a "beta" feature any longer.

Oops, I had the notion that Swift 5 wasn't official yet and my XCode is still at 10.1.  Yet another upgrade to do!
Thanks, megastep!