text:
Non-static method Mpociot\Teamwork\Teamwork::inviteToTeam() should not be called statically, assuming $this from incompatible context

When i try to call this method, there is this error that pops out and says that i can't use it.
is there a way to fix ?

It seems like you're not using the "inviteToTeam" method on the facade.
Could you try this again without the whole namespace and just use the Teamwork facade instead?

yes how silly of me, i was referencing the actual class rather than the facade.
and another bit of an issue come out, i was trying to get the actual number of pending invitations related to the USER but i'm surprised it was on a seperate object.

What do you mean by separate object?
The pending invitations are related to the email address, because there is no other indication available.

normally the invitation are related to the user so logically i should be doing
$user->pendingInvitations(); and it should return a collection of objectives such as who's the sender and the receipient.

Oh you're right. I haven't thought about that.
I only thought about having pending invitations to users, that aren't yet registered.
I'll add this feature in the next version :+1:

do u have a lock on the next version or is it gonna be for a little while ?
Something else to keep in mind, u need to keep track of both the sender and the receipient in the database and u're not doing that, u should make that getting the pending invitations are show to the recepient properly not to the sender.
U should see this repo, will help you out greatly.
https://github.com/DraperStudio/Laravel-Friendable

I'm trying to stick with the current API - so there's at least no version 2 on the horizon. So I'm going to stick to http://semver.org
So the next version will be 1.2.0, as this feature isn't changing existing behaviour

And the invitations are in fact keeping track of both the sender and the recipient.
The sender is referenced via the user_id and the recipient is referenced via the email, because there is no other way to recognize a receiver just right now.
What might be possible is that you could throw in a user (or "Auth") object to the inviteToTeam method as well, and it will extract the user_id and email from it.

@minedun6 the invites relation for a user already exists.
To list all pending invites of a specific user model use the invites relation like:
Auth::user()->invites();

repo: mpociot/teamwork


text:
EU flag for EEA countries?

I do not know what the intended purpose of the country_eu flag is. If it's actually meant as a flag to determine whether the user is in the EU or not, then please close and ignore this issue. If, however, it is meant to determine whether the user is likely governed by EU laws – in particular, I would guess, the GDPR – then you may want to consider including all of the EEA.
As a particular example, Norway returns "country_eu": false, but is, as an EEA country, subject to the e.g. the GDPR.

I think the database provider has this flag so online stores can use it for VAT calculations or something. It is not something that echoip has control over.
The "country_eu": false you have seen for Norway is derived from the is_in_european_union flag that Maxmind ship with their database. It is not intended to discern EEA countries.
Ref:

https://dev.maxmind.com/release-note/united-kingdom-will-no-longer-be-flagged-is_in_european_union/
https://dev.maxmind.com/release-note/eu-country-outputs-added-to-to-geoip2-country-city-enterprise-dbs-and-precision-service/
https://dev.maxmind.com/geoip/geoip2/whats-new-in-geoip2/

source: gharchive/issue

authors: gspr mfld-pub

repo: mpolden/echoip

license_type: permissive

license_source: github-api


text:
Add a token limit flat to the command.

Add token limit flag and file limit, so output can be split by tokens
Update docs to support
Add requirements file.

This gives a solution for #35, #37. Perhaps #26

Tested with a huge repo using the following params and output:
-t 62000000 -m 20

Writing to file output_1.txt
Written 61963289 tokens to file.
Writing to file output_2.txt
Written 61914604 tokens to file.
Writing to file output_3.txt
Written 23705417 tokens to file.
Writing to file output_4.txt
Written 1191179680 tokens to file.
Writing to file output_5.txt
Repository contents written to 5 file(s).

output_4.txt is 1191179680 tokens which is greater than the specified 62000000 tokens.

If a source file is larger than the given output token limit, there are only a few options.

Ignore the token limit, and output the complete file (This is the current method chosen. That's why you might be seeing a file going above the token limit)
Split input file to multiple output files
Ignore that file

source: gharchive/pull-request

authors: davidvasandani shanecp

repo: mpoon/gpt-repository-loader

license: MIT


text:
More efficient file watcher

In your blog, you mentioned your method of watching the csv file for changes: https://github.com/mr-karan/nomad-vector-logger/blob/csv/examples/deployment.nomad?ref=karan-sharma#L124-L151
This might be doubling down on a hacky approach, but maybe consider entr? (github repo). It would reduce your script down to:
#!/usr/bin/env bash
entr -n pkill -f -SIGHUP vector <<<$1

Nevermind, I hadn't finished reading the post and didn't realize you've already moved on from that approach 😅

Thanks @qubidt TIL about entr. Quite a cool hack :)

authors: mr-karan qubidt

repo: mr-karan/nomad-vector-logger


text:
Improve citations / referencing to match Haaga-Helia referencing guidelines

EN guidelines: https://libguides.haaga-helia.fi/referencing/citations-and-list-of-references
FI guidelines: https://libguides.haaga-helia.fi/lahdeviittaamisen-tueksi/tekstiviitteet-ja-lahdeluettelo

Make CSL (Citation Style Language) configurations according to the official Haaga-Helia citation guideline.
Add test cases for citations

https://github.com/mrautio/hh-templates/issues/8

repo: mrautio/hh-templates

license: Unlicense


text:
Access VPN - OpenVPN?

As of now, the platform is capable of starting and stopping the machines but there is no easy access to boxes. OpenVPN integration is the first thing which comes to my mind but I had no prior experience with it so if anybody has a better solution to this problem - you are more than welcome.
This is a big issue as it requires not only a research on the subject, PoC but also an actual implementation and integration.

Interesting project you got here, why did you stop developing it?

authors: afonsovitorio mrblacyk

repo: mrblacyk/Boxer


text:
Error: invalid cmd_out returned.

Not sure why I'm getting this, I'm passing an object with both cmd_in & cmd_out values to the handleRequest method but keep getting 'Error: invalid cmd_out returned.' printed out on the screen.

Hi Kieran. Don't have time to look into it properly right now but this might be related to the 1.1.0 update where I made some changes to the format of the response and probably didn't document it properly.
Checkout this class for some working PHP code. The $out variable should be the structure you're looking for. If you're still having problems, post your object here and i'll take a look at it.

Did you ever get to the bottom of this?

As far as I can tell this is working as intended. You will get this error if cmd_out is not a string. Maybe you're returning an integer or something instead? I'm closing this for now but if you think there is a legit bug then let me know.

authors: kierancrown mrchimp

repo: mrchimp/cmd

license: mit

license_source: bigquery


text:
Open Graph scraping of Minified HTML

Looks like there may be a Facebook Open Graph scraper parsing issue with minified HTML; likely a regression https://developers.facebook.com/bugs/2025528171065799/

I can verify that Facebook has fixed this bug.

repo: mrclay/minify


text:
🛑 Asgard is down

In 40e67d2, Asgard (https://asgard.$DOMAIN) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Asgard is back up in 3c0f20b after 14 minutes.

repo: mrdavidkovacs/status


text:
Every time i change in the template i have to run ng serve (don't detect source code file changes)

i download angular 2 full version template, and when i am trying to change in it every time i have to run the ng start to get the impact, it is not like our old angular 2 examples and project i did. should any extensions or plugins should be installed

i found the error, i was running the code form windows parallels VM running on Mac OS, copy the code to the VM drive itself make everything working fine.


text:
Update springConfigLocations test

Fix Concourse CI build failure
Update springConfigLocations test add log4j2-spring.properties

oh, thanks. I have literally added it before seeing this PR.
thank you.

authors: ielatif mrifni

repo: mrifni/spring-boot


text:
Update spelling in README

2 instances of "requried" => "required"

@imjared thankyou


text:
Update PacketDecoder.java

FIX for: Polling clients sporatically get prematurely disconnected #264
The issue is piggy-backed messages are getting dropped on polling, The code I removed was simply taking the 1st message and dropping the rest.
Part of that rest could've been an Pong or Ping (as well as other data), and thus causes the dropping of the polling client connection.

oh, thanks! I have been waiting it!

Hi,
@lpage30
When I run  the demo netty-socketio-demo on Polling after I upgrade the netty-socketio version from 1.7.7 to 1.7.12.
I found if I send a English string like 'abc', it works good on Polling
But if I send a chinese word like '你好', it works good on Websocket, bu for polling there will be a exception:
[nioEventLoopGroup-3-8] ERROR com.corundumstudio.socketio.handler.InPacketHandler - Error during data processing. Client sessionId: 7610ac17-00dc-4d4e-848a-7da0bac5e3f1, data: :42["chatevent",{"userName":"user452","message":"你好"}]
java.lang.IllegalStateException
at com.corundumstudio.socketio.protocol.UTF8CharsScanner.getActualLength(UTF8CharsScanner.java:108)
at com.corundumstudio.socketio.protocol.PacketDecoder.decodePackets(PacketDecoder.java:137)
at com.corundumstudio.socketio.handler.InPacketHandler.channelRead0(InPacketHandler.java:65)
at com.corundumstudio.socketio.handler.InPacketHandler.channelRead0(InPacketHandler.java:36)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358)
And I have checked the code, I foud this change looks like the reason, can you help me to fonfirm it,
If I rollback this change,  it worked okay to support Chinese,  but I do not know if  I rollback this change if there will be a new trouble?

Were you definitely working before WITH POLLING?
nature of change was small: https://github.com/mrniko/netty-socketio/commit/52139a5d1f95b4723c853c80d9152d64051038ab#diff-c39cd8103fe1a5b9e96341e3dca5a0da
only other thought is some encoding issue. The line below the change extracts the string out as
CharsetUtil.ISO_8859_1 and then writes it as UTF-8.  What encoding (if any) have you tried for your string?

Yes, I am very sure. just change 1.7.7 to 1.7.12 in pom of mrniko's demo (https://github.com/mrniko/netty-socketio-demo), then Chinese message does not work. after I rollback your change, it works good, You can try send "你好"。

Yes, your change is very small, I have checked before your change, the part of content always be cut before ":", right?  after that, only english can be decoded, I guess your change is a great change, but the decode method depends on  the code you killed.

UTF8 is my encoding,  if I rollback your change without any othrer change,  it works good!

Yes, if I rollback your change, it works, but I belive if I rollback your changed code, it means another problem I think.
Could you help me to have a look please?  thank you very much!

没有遇到过这种问题，我直接用的就是最新的release

Few things to try:

I am wondering about the new line 70:
it does a getBytes(UTF8) when everywhere else there is a getBytes(CharsetUtil.ISO_8859_1).
This could be a surgical change and test for you to try first.

I am wondering what if you remove the new line at 68:
packet = new String(packet.getBytes(CharsetUtil.ISO_8859_1), CharsetUtil.UTF_8);
The code already decodes the string as ISO 8859 which supports simplified chinese, and before (when the line was getting split) this line was ensuring the encoding for the new  substring.
It is the only thing I can currently think of (besides changing charset).

Actually the more I look at that #1 I mentioned with getBytes(UTF8) the more I think that is the issue.
its the ONLY getBytes that uses UTF8, everywhere else we use ISO 8859.....

authors: devpage lpage30 mrniko xiukongtiao

repo: mrniko/netty-socketio


text:
feat: Set fps for Frame Processor on Android

What
Actually set the target FPS on the ImageAnalysis usecase.
Inspired by @wuguishifu's comment in https://github.com/mrousavy/react-native-vision-camera/issues/2838

Changes

Tested on

Related issues

This is awesome, thanks for taking the time to get this working!!

authors: mrousavy wuguishifu

repo: mrousavy/react-native-vision-camera


text:
Please do it in another langages

A lot of people still don't know to read properly in 2023, and this addon can help them. I can help to do the voice in FR if you need.

Are you familiar with elevenlabs?

I discovered this with your project. But I imagine that you have your voices (like the orcs etc). Should we talk about it in private ? like Discord or something?

Just want to add that this will be really useful for people with dysgraphia as my son, it will help him to take some pleasure on this game and avoid big energy loss ! I agree with Kerweek as we are on another language, If needed i can help you with French and/or Italian. Thanks again for this great job.

@mrthinger i found the fr npc voice at wowhead and i have an account in 11lab i added fr orc-male voice to my account, i can generate the audio but the text from mango db is still in english
I'm trying to follow the lead through your code to make it on my own but i'm sure it will take like 5mn for you to add the language_id in your sql script ^^ (the fr is fe/male_text_loc3 in locales_broadcast_text if you wonder)

Ps: i don't have a lot of free time but i'll be happy to help with other language as well (And also to help for the retail version if you want)

@mrthinger i found the fr npc voice at wowhead and i have an account in 11lab i added fr orc-male voice to my account, i can generate the audio but the text from mango db is still in english
I'm trying to follow the lead through your code to make it on my own but i'm sure it will take like 5mn for you to add the language_id in your sql script ^^ (the fr is fe/male_text_loc3 in locales_broadcast_text if you wonder)
EDIT: Sooo even if the text is good the accent is not. For everyone who is wondering why this is only in english : I spent an entire day trying to make it but i found there is no satisfying alternatives to eleven labs and eleven labs is exclusively working with english voices at the moment
Seems like the only way to make it happen is to developp an equivalent of eleven labs for fr voices or to wait for someone else to do it, maybe one day elevenlabs themself would make it happen

Elevenlabs is working on a multi-lingual model.

The Multilingual model has been released on April 26th !

Any progress on this?  I'm looking to learn French, and I thought it'd be a great excuse to play some WoW.

I have got familiar with ElevenLabs and trained a few voices in frFR already. I'm curious to know if you have a process to quickly export quest texts and create the mp3 files with scripts (with the help of WoW API & ElevenLabs API) ?
@mrthinger Since you have already stored all NPCs IDs in the english version, do you have an idea of the folder structure to support other languages? Maybe we could work on a Settings UI to allow players to pick between languages?

authors: Kerweek Mysticalfx74 Newfriendfromwinter RobinFrcd elbekri jbusodev mrthinger

repo: mrthinger/wow-voiceover


text:
Lower SDK bound

Thanks for the great library!
I was wondering whether we could have a lower SDK bound here. Maybe 2.x?

I can see records are widely used in the package, so it should be at least 3.0. But if we can use tuple to support 2.x then it would be great.

Thanks for the great library!
I was wondering whether we could have a lower SDK bound here. Maybe 2.x?

thanks, I will check

I can see records are widely used in the package, so it should be at least 3.0. But if we can use tuple to support 2.x then it would be great.

I updated the Dart SDK version to 2.17. Additionally, I used inheritance for enums, which takes too much time for versions lower than 2.17, which I can't do now.

I can see records are widely used in the package, so it should be at least 3.0. But if we can use tuple to support 2.x then it would be great.

I worked on it, I think I can downgrade the SDK version to 2.12, but I am not familiar with Dart versions. Which version do you think is more suitable?

Which version do you think is more suitable?

Personally think 2.15 is enough for most of users, which is what we're using for the most popular network request library.

Which version do you think is more suitable?

Personally think 2.15 is enough for most of users, which is what we're using for the most popular network request library.

The new version was published with Dart SDK 2.15


text:
🛑 Google Calendar is down

In c4adc5a, Google Calendar (https://calendar.google.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Google Calendar is back up in ddd8a7f.

repo: mrvinceo/ocaUptime


text:
Upgrade Dioxus to 0.5

Upgraded Dioxus from 0.4 to 0.5
Replaced Fermi crate with Dioxus Signals
Upgraded all dependent crates to their latest stable versions
Updated examples and website code to reflect the changes made in the dependent crate upgrades
Updated README.md

Dioxus Upgrade Issue#4

have you ever trying tot build example? I think its not work.
In old version we eed include some features in to dioxus-toast feature, something like: dioxus-web, dioxus-desktop. But I don't know why did you deleted it. maybe api was changed? can you tell me

Hey, Thank you for your reply.
Yes, I have tried the examples, they work.
Dioxus 0.5 has introduced a new cross platform API to launch the application.
The below is mentioned in this Dioxus 0.5 blog

Dioxus 0.5 introduces a new cross platform API to launch your app. This makes it easy to target multiple platforms with the same application. Instead of pulling in a separate renderer package, you can now enable a feature on the Dioxus crate and call the launch function from the prelude:

The CLI is now smart enough to automatically pass in the appropriate build features depending on the platform you’re targeting.

Let me know any changes. Thank you.

Can you give me your command for the example execute, I want try it. if no problem I will merge it.
Thank you

Hello, I was able to build the examples without including 'dioxus/desktop' and 'dioxus/web' by the below commands:
dx build --example hello --platform desktop
dx build --example web --platform web -- --no-default-features
But there was an issue in executing the examples.
I have added 'dioxus/desktop' and 'dioxus/web' in the features to resolve this.
The commands are:
dx serve --example hello --platform desktop
dx serve --example web --platform web -- --no-default-features
Looking forward to hearing from you!

I'm sorry to bother you again. I think Signal should use SignalGlobal, because I hope ToastManager can still be operated in other components and files. This is also the reason why I chose to use Fermi before, and I want to know what you think about it. Thanks.

Hello @mrxiaozhuox
I have tried with GlobalSignal for using in the app element like this:
static TOAST: GlobalSignal<ToastManager> = Signal::global(|| ToastManager::default());
But I get an error in using GlobalSignal in ToastFrameProps:
#[derive(Props, Clone, PartialEq)]
pub struct ToastFrameProps {
    manager: GlobalSignal<ToastManager>,
}

The below error occurs even after adding Clone and PartialEq in ToastManager and other structs:

the trait bound dioxus::prelude::GlobalSignal<ToastManager>: Clone is not satisfied
the trait Clone is not implemented for `dioxus::prelude::GlobalSignal

That is why I used Signal in ToastFrameProps. The use_context and use_context_provider can be used to pass Signal to the downstream components in a simpler way.
Example of use_context:
fn app() -> Element {
    use_context_provider(|| Signal::new(ToastManager::default()));
    let mut toast: Signal<ToastManager> = use_context();
    rsx! {
        ToastFrame { manager: toast }
        ChildComponent{}
    }
}

fn ChildComponent() -> Element {
    let mut toast: Signal<ToastManager> = use_context();
    rsx! {
        ToastFrame { manager: toast }
    }
}

repo: mrxiaozhuox/dioxus-toast


text:
Node 20 Compile Issues

Hello, I am trying to upgrade a project that uses mmmagic to node 20.
The following compile issues occur:
➜ yarn
yarn install v1.22.19
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
[1/3] ⠐ sharp
[2/3] ⠐ mmmagic
error /home/jack/project/node_modules/mmmagic: Command failed.
Exit code: 1
Command: node-gyp rebuild
Arguments:
Directory: /home/jack/project/node_modules/mmmagic
Output:
gyp info it worked if it ends with ok
gyp info using node-gyp@9.3.1
gyp info using node@20.1.0 | linux | x64
gyp info find Python using Python version 3.10.6 found at "/usr/bin/python3"
gyp http GET https://nodejs.org/download/release/v20.1.0/node-v20.1.0-headers.tar.gz
gyp http 200 https://nodejs.org/download/release/v20.1.0/node-v20.1.0-headers.tar.gz
gyp http GET https://nodejs.org/download/release/v20.1.0/SHASUMS256.txt
gyp http 200 https://nodejs.org/download/release/v20.1.0/SHASUMS256.txt
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/jack/.nave/installed/20.1.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/jack/project/node_modules/mmmagic/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/jack/.nave/installed/20.1.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/jack/.cache/node-gyp/20.1.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/jack/.cache/node-gyp/20.1.0',
gyp info spawn args   '-Dnode_gyp_dir=/home/jack/.nave/installed/20.1.0/lib/node_modules/npm/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/jack/.cache/node-gyp/20.1.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/jack/project/node_modules/mmmagic',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/jack/project/node_modules/mmmagic/build'
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/apprentice.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/apptype.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/ascmagic.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/cdf.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/cdf_time.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/compress.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/der.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/encoding.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/fsmagic.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/funcs.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/is_tar.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/magic.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/print.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/readcdf.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/readelf.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/softmagic.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/fmtcheck.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/strlcat.o
  CC(target) Release/obj.target/libmagic/deps/libmagic/src/strlcpy.o
rm -f Release/obj.target/deps/libmagic/magic.a Release/obj.target/deps/libmagic/magic.a.ar-file-list; mkdir -p `dirname Release/obj.target/deps/libmagic/magic.a`
ar crs Release/obj.target/deps/libmagic/magic.a @Release/obj.target/deps/libmagic/magic.a.ar-file-list
  COPY Release/magic.a
  CXX(target) Release/obj.target/magic/src/binding.o
In file included from ../../nan/nan.h:176,
                 from ../src/binding.cc:3:
../../nan/nan_callbacks.h:55:23: error: ‘AccessorSignature’ is not a member of ‘v8’
   55 | typedef v8::Local<v8::AccessorSignature> Sig;
      |                       ^~~~~~~~~~~~~~~~~
../../nan/nan_callbacks.h:55:40: error: template argument 1 is invalid
   55 | typedef v8::Local<v8::AccessorSignature> Sig;
      |                                        ^
In file included from ../src/binding.cc:3:
../../nan/nan.h: In function ‘bool Nan::IdleNotification(int)’:
../../nan/nan.h:682:63: warning: ‘bool v8::Isolate::IdleNotificationDeadline(double)’ is deprecated: Use MemoryPressureNotification() to influence the GC schedule. [-Wdeprecated-declarations]
  682 |     return v8::Isolate::GetCurrent()->IdleNotificationDeadline(
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  683 |         idle_time_in_ms * 0.001);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/jack/.cache/node-gyp/20.1.0/include/node/v8-initialization.h:13,
                 from /home/jack/.cache/node-gyp/20.1.0/include/node/v8.h:34,
                 from /home/jack/.cache/node-gyp/20.1.0/include/node/node.h:73,
                 from ../src/binding.cc:1:
/home/jack/.cache/node-gyp/20.1.0/include/node/v8-isolate.h:1293:8: note: declared here
 1293 |   bool IdleNotificationDeadline(double deadline_in_seconds);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../src/binding.cc:3:
../../nan/nan.h: In function ‘void Nan::SetAccessor(v8::Local<v8::ObjectTemplate>, v8::Local<v8::String>, Nan::GetterCallback, Nan::SetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, Nan::imp::Sig)’:
../../nan/nan.h:2542:19: error: no matching function for call to ‘v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>&, void (*&)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&), void (*&)(v8::Local<v8::Name>, v8::Local<v8::Value>, const
 v8::PropertyCallbackInfo<void>&), v8::Local<v8::Object>&, v8::AccessControl&, v8::PropertyAttribute&, Nan::imp::Sig&)’
 2542 |   tpl->SetAccessor(
      |   ~~~~~~~~~~~~~~~~^
 2543 |       name
      |       ~~~~
 2544 |     , getter_
      |     ~~~~~~~~~
 2545 |     , setter_
      |     ~~~~~~~~~
 2546 |     , obj
      |     ~~~~~
 2547 |     , settings
      |     ~~~~~~~~~~
 2548 |     , attribute
      |     ~~~~~~~~~~~
 2549 |     , signature);
      |     ~~~~~~~~~~~~
In file included from /home/jack/.cache/node-gyp/20.1.0/include/node/v8-function.h:15,
                 from /home/jack/.cache/node-gyp/20.1.0/include/node/v8.h:33,
                 from /home/jack/.cache/node-gyp/20.1.0/include/node/node.h:73,
                 from ../src/binding.cc:1:
/home/jack/.cache/node-gyp/20.1.0/include/node/v8-template.h:809:8: note: candidate: ‘void v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>, v8::AccessorGetterCallback, v8::AccessorSetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyA
ttribute, v8::SideEffectType, v8::SideEffectType)’
  809 |   void SetAccessor(
      |        ^~~~~~~~~~~
/home/jack/.cache/node-gyp/20.1.0/include/node/v8-template.h:814:22: note:   no known conversion for argument 7 from ‘Nan::imp::Sig’ {aka ‘int’} to ‘v8::SideEffectType’
  814 |       SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
      |       ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/jack/.cache/node-gyp/20.1.0/include/node/v8-template.h:816:8: note: candidate: ‘void v8::ObjectTemplate::SetAccessor(v8::Local<v8::Name>, v8::AccessorNameGetterCallback, v8::AccessorNameSetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::Pro
pertyAttribute, v8::SideEffectType, v8::SideEffectType)’
  816 |   void SetAccessor(
      |        ^~~~~~~~~~~
/home/jack/.cache/node-gyp/20.1.0/include/node/v8-template.h:821:22: note:   no known conversion for argument 7 from ‘Nan::imp::Sig’ {aka ‘int’} to ‘v8::SideEffectType’
  821 |       SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
      |       ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/binding.cc: In static member function ‘static void Magic::DetectFile(const Nan::FunctionCallbackInfo<v8::Value>&)’:
../src/binding.cc:184:34: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
  184 |                                  (uv_after_work_cb)Magic::DetectAfter);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/binding.cc: In static member function ‘static void Magic::Detect(const Nan::FunctionCallbackInfo<v8::Value>&)’:
../src/binding.cc:217:34: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
  217 |                                  (uv_after_work_cb)Magic::DetectAfter);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../src/binding.cc:1:
../src/binding.cc: At global scope:
/home/jack/.cache/node-gyp/20.1.0/include/node/node.h:1153:7: warning: cast between incompatible function types from ‘void (*)(v8::Local<v8::Object>)’ to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wca
st-function-type]
 1153 |       (node::addon_register_func) (regfunc),                          \
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/jack/.cache/node-gyp/20.1.0/include/node/node.h:1187:3: note: in expansion of macro ‘NODE_MODULE_X’
 1187 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
      |   ^~~~~~~~~~~~~
../src/binding.cc:415:3: note: in expansion of macro ‘NODE_MODULE’
  415 |   NODE_MODULE(magic, init);
      |   ^~~~~~~~~~~
make: *** [magic.target.mk:124: Release/obj.target/magic/src/binding.o] Error 1
make: Leaving directory '/home/jack/project/node_modules/mmmagic/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/jack/.nave/installed/20.1.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:203:23)
gyp ERR! stack     at ChildProcess.emit (node:events:511:28)
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:293:12)
gyp ERR! System Linux 5.15.0-71-generic
gyp ERR! command "/home/jack/.nave/installed/20.1.0/bin/node" "/home/jack/.nave/installed/20.1.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/jack/project/node_modules/mmmagic
gyp ERR! node -v v20.1.0
gyp ERR! node-gyp -v v9.3.1

true
update nan to 2.17 solve the issue

Apologies, I ran into this issue, but it's not clear what you mean by update non to 2.17?  Where would I do this?

actually in package.json we add an override node-gyp version :
"resolutions": {
    "node-gyp": "9.4.0"
  },

but since then we move forward to @picturae/mmmagic to fix an other issue too.

so I was able to install @picturae/mmmagic without issue.. the weird thing is that it looks like exactly the same code base as the default mmmagic in this repo.

In @picturae/mmmagic node-20 branch has to be selected: https://github.com/picturae/mmmagic/commit/eb0091adae967e55bc57b865f72479ae43290696

I've just updated the @picturae/mmmagic package to support node 22 as well. It's now all in the master branch, but I've left the node-20 branch for now. An updated scoped version (@picturae/mmmagic) has also been published to npm.org (v0.5.4)

@dthornley Thank you. @picturae/mmmagic solve our issues with installation on node 20 (mac)

authors: ZachMilne amit777 dthornley garaboncias jack828 jonmaim

repo: mscdex/mmmagic


text:
🛑 Do53 Roost IPv4 UDP is down

In 8fe41ee, Do53 Roost IPv4 UDP (http://107.189.10.142:9202) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Do53 Roost IPv4 UDP is back up in ed096ca after 19 minutes.

repo: mschirrmeister/upptime-loopx


text:
Immediate send methods

In order to ensure statsd before server crashes, we can take advantage of socket.send of udp socket. The callback function is called when the messages was sent. I made such changes:
Add a callback function field in _writeToSocket in EphemeralSocket.js
Add two function to increment immediately in statsd-client.js
Thanks.

Erroneous pull-request, or?

authors: andycmu msiebuhr

repo: msiebuhr/node-statsd-client

license: isc


text:
1148 clean files

repo maintenance

Codecov Report

Merging #327 (2aa808e) into dev (092887f) will decrease coverage by 0.28%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##              dev     #327      +/-   ##
==========================================
- Coverage   78.58%   78.30%   -0.29%
==========================================
  Files          42       43       +1
  Lines        2783     2793      +10
==========================================
  Hits         2187     2187
- Misses        596      606      +10

Impacted Files
Coverage Δ

pyluna-pathology/setup.py
0.00% <0.00%> (ø)

Continue to review full report at Codecov.

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

authors: armaank codecov-commenter

repo: msk-mind/luna


text:
Fully Distributed Version for Apache Spark

Todo

[ ] distributed build, should transform to Annoy compatible binary.
[ ] distributed query, for all-pair similarity (OLAP)
[ ] persistence with like HBase for query server (OLTP)
[ ] CRUD for prebuilt index

It's feasible. stay tuned. https://github.com/mskimm/ann4s/projects/1


text:
problem with resample function

Was working on our getting started tutorial.   Was adding resampling to the workflow in the tutorial and discovered we definitely have bug in that function somewhere.   This loop is showing the problem:
...
resampler=ScipyResampler(20.0)
decimator=ScipyDecimator(20.0)
...
for doc in cursor:
    d = db.read_data(doc,normalize=['source'])
    print("dt in=",d.dt)
    d = normalize(d,station_matcher)
    print("dt out=",d.dt)
    d = detrend(d,type="constant")
    d = resample(d,decimator,resampler)
    d = set_Ptime(d,model=ttmodel)
    # We don't need to test if d is dead here because ator
    # is a mspass function that handles that automatically
    d = ator(d,d["Ptime"])
    d = WindowData(d,stime,etime)

Run on 4 inputs it gives this output:
dt in= 0.025
dt out= 0.025
dt in= 0.025
dt out= 0.025
dt in= 0.025
dt out= 0.025
dt in= 0.025
dt out= 0.025

Meaning resample did nothing.  Note the constructors for the decimator and resampler instances set the target sample rate to 20 sps and the above if 1/0.025 = 40 sps.  The dt out lines should have had 0.05.
I do not understand how our tests could have missed this, but something is wrong.   I suspect the soft test we used for slippery clocks may be too generous.

In the code above, you have
    print("dt in=",d.dt)
    d = normalize(d,station_matcher)
    print("dt out=",d.dt)

which is printing the dt right before and after the normalize call instead of the resample call. Is that the problem here? Other than that, I don't see any difference in your usage compared to the test there: https://github.com/mspass-team/mspass/blob/44aa03372470bd3f8a18eb6636698c247de1c0e2/python/tests/algorithms/test_resample.py#L122-L128
Not sure what else can go wrong...

Well that is embarrassing.   Classic thing where you get blinded to the obvious.   I'm going to close this with a red face.

authors: pavlis wangyinz

repo: mspass-team/mspass


text:
smallcaps.py RecurrsionError

I'm getting a strange RecursionError when running your smallcaps.py filter.
pandocfilters (1.4.2)
panzer (1.4.1)
pandoc (2.2.1)
Compiled with pandoc-types 1.17.5.1, texmath 0.11.0.1, skylighting 0.7.3
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 124, in walk
ERROR:     !    x[k] = walk(x[k], action, format, meta)
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 118, in walk
ERROR:     !    array.append(walk(res, action, format, meta))
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 124, in walk
ERROR:     !    x[k] = walk(x[k], action, format, meta)
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 118, in walk
ERROR:     !    array.append(walk(res, action, format, meta))
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 124, in walk
ERROR:     !    x[k] = walk(x[k], action, format, meta)
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 118, in walk
ERROR:     !    array.append(walk(res, action, format, meta))
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 124, in walk
ERROR:     !    x[k] = walk(x[k], action, format, meta)
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 118, in walk
ERROR:     !    array.append(walk(res, action, format, meta))
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 124, in walk
ERROR:     !    x[k] = walk(x[k], action, format, meta)
ERROR:     !  File "/home/thomas/.local/lib/python3.6/site-packages/pandocfilters.py", line 111, in walk
ERROR:     !    item['c'] if 'c' in item else None, format, meta)
ERROR:     !  File "/home/thomas/.panzer/filter/smallcaps/smallcaps.py", line 52, in smallcaps
ERROR:     !    if clean(value) in get_list(meta):
ERROR:     !  File "/home/thomas/.panzer/filter/smallcaps/smallcaps.py", line 41, in clean
ERROR:     !    word_index = range(0, len(word))
ERROR:     !RecursionError: maximum recursion depth exceeded while calling a Python object
ERROR:   failed to receive json object from filter---skipping filter

turns out I was running the filter twice.

repo: msprev/panzer


text:
docs: Add alternatives for Linux setup using capabilities

Hi,
First, thank you for developing samply! :handshake:
I think the setup on Linux can be adapted so that one can use capabilities instead of removing all checks by modifying kernel.perf_event_paranoid.
Also, there was a typo, and according to this piece of documentation in the source of the kernel, kernel.perf_event_paranoid must be set to -1 so that all users can inspect events.
What do you think?

perf_event_paranoid = 1 works fine for normal profiling, where interrupts are generated every X cycle. For access to other PMUs you might need perf_event_paranoid = 0. I think even 3 is fine if you don't need kernel callchains, but right now that configuration requires tweaking samply source directly.
There's a known issue where mmap will fail due to mlock limit (#25), which could be mitigated by perf_event_paranoid = -1, but I don't think there's any issues with "all users inspecting events", provided the process is running under the same UID.

I think even 3 is fine if you don't need kernel callchains

Yep, perf_event_paranoid = -1 allows inspecting kernel events. Should I make it more precise?

It's about kernel callchains, which is just the kernel part of callstack when sampling occurs. This is available at paranoid = 1. At <=0 you can additionally access raw tracepoint but that's not used by samply right now.
I think the description doesn't need to be too precise, the main purpose is to guide users to set up their system so that samply won't fail on perf_event_open. Up to you, though.
One feedback I have would be that assigning CAP_SYS_ADMIN is more dangerous than lowering perf_event_paranoid, as the former is essentially setuid/sudo on the executable. Can we keep the suggested options to only CAP_PERFMON and perf_event_paranoid?

Thanks @jjerphan for the contribution and @ishitatsuyuki for the feedback. I don't have a lot of knowledge in this area so I'll just trust the two of you and merge this. If people disagree with this advice, they can file issues.

authors: ishitatsuyuki jjerphan mstange

repo: mstange/samply


text:
37a7fd6cc8ddc9eb303a2e66e27f9d3c21de7cfb breaks detection of voxelgarden used by moretrees

The above mentioned commit just overrides the detected gameid with minetest when a mod named default exists.
Voxelgarden is not based on MTG, but compatible on a technical level, having a default mod and providing most of MTG's apis.
The reason moretrees wants to detect Voxelgarden is that it has different (higher level) gameplay mechanics, affecting out of the box experience of moretrees (see https://github.com/mt-mods/moretrees/pull/38 and https://github.com/mt-mods/moretrees/pull/40 for details).
OTOH it is probably useful for xcompat to detect Voxelgarden as a minetest game derivative because of its low level compatibility usually not requiring mods to do anything special.
I propose to enhance xcompat to provide the actual game id (if provided by new enough minetest) in addition to the detected compatibility game id.

i think its better for moretrees to just check itself, and only support that feature for minetest (whatever version added game detection).

type(minetest.get_game_info) == "function" and minetest.get_game_info().id~="voxelgarden" or true to replace https://github.com/mt-mods/moretrees/blob/master/settings.lua#L53 assuming the logic passes, didnt check one line fix and also makes a lot more sense than the pr (in my opinion) which makes a mess of things

repo: mt-mods/xcompat


text:
🛑 https://minfo.ps is down

In ebba1af, https://minfo.ps (https://minfo.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://minfo.ps is back up in 5e5170e.

repo: mtitservice/site


text:
🛑 https://minfo.ps is down

In 93507c5, https://minfo.ps (https://minfo.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://minfo.ps is back up in 182251e.


text:
🛑 https://reports.mtit.pna.ps is down

In babf46a, https://reports.mtit.pna.ps (https://reports.mtit.pna.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://reports.mtit.pna.ps is back up in e3af100.


text:
🛑 https://treport.mtit.pna.ps is down

In fb3dd48, https://treport.mtit.pna.ps (https://treport.mtit.pna.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://treport.mtit.pna.ps is back up in 7c95dc5.


text:
🛑 https://911.ps is down

In f079798, https://911.ps (https://911.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://911.ps is back up in 4b2a4d1.


text:
🛑 https://reports.mtit.pna.ps is down

In 8b168b7, https://reports.mtit.pna.ps (https://reports.mtit.pna.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://reports.mtit.pna.ps is back up in 1489e14.


text:
🛑 https://palpost.ps is down

In 12dca8d, https://palpost.ps (https://palpost.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://palpost.ps is back up in 44722cd.


text:
🛑 https://911.ps is down

In f9f29b8, https://911.ps (https://911.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://911.ps is back up in dc0262b.


text:
🛑 https://www.perc.ps is down

In 2e8fecb, https://www.perc.ps (https://www.perc.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://www.perc.ps is back up in 53b88a7.


text:
🛑 https://treport.mtit.pna.ps is down

In ceea10c, https://treport.mtit.pna.ps (https://treport.mtit.pna.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://treport.mtit.pna.ps is back up in 519fcdc.


text:
🛑 https://archive.minfo.ps is down

In fbf894f, https://archive.minfo.ps (https://archive.minfo.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://archive.minfo.ps is back up in 1e92d9d.


text:
🛑 https://db.hcys.ps is down

In 270d529, https://db.hcys.ps (https://db.hcys.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://db.hcys.ps is back up in 6f2865d.


text:
🛑 https://minfo.ps is down

In a5903e1, https://minfo.ps (https://minfo.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://minfo.ps is back up in 99fc479.


text:
🛑 https://detulkarm.edu.ps is down

In 7f90874, https://detulkarm.edu.ps (https://detulkarm.edu.ps) was down:

HTTP code: 0
Response time: 0 ms

Resolved: https://detulkarm.edu.ps is back up in 65ca817.


text:
Identify games in a GOG Linux root by their gameinfo (Brigador: Up-Armored Edition -> Brigador UpArmored Edition)

Related to #86 but probably needing a "different" approach.
GOG Linux native stores games in a folder structure like this:
$ find Brigador\ UpArmored\ Edition -maxdepth 1 -type d
Brigador UpArmored Edition
Brigador UpArmored Edition/game
Brigador UpArmored Edition/support
Brigador UpArmored Edition/docs

game contains the actual game installation where one can find goggame-NUMBER.hashdb, support and docs have some files helping GOG integrate into the Linux desktop.  Note that for installed DLC there will be additional goggame-DLCNUMBER.hashdb files.
The base folder (e.g. Brigador UpArmored Edition) always has a file named gameinfo which includes the actual game name.  Here is the gameinfo for Brigador:
Brigador: Up-Armored Edition
v1.65
56925
en-US
1356485086
1356485086
55584005483167404

So for games storing their configuration and/or saves within the  folder, I propose to look for gameinfo, take the first line and match that against the game name found in the ludusavi.manifest.

So it is a different approach, since as far as I understand ludusavi, it takes the manifest file, constructs a list of path candidates per game and checks that against the file system and registry entries (for Windows).  Correct?
For games like in this issue ludusavi would need to traverse a  and check for gameinfo in each subfolder.  This will be "fast" since the gameinfo is always in the /<"base"> folder.

That sounds like a good idea. This could be integrated as part of the InstallDirRanking logic.
For Brigador: Up specifically, I would have expected it to already be able to find the folder. It does a fuzzy match between the game name and folder names, and it looks like the two are close enough to register. Is it not coming up at all?
On Windows, there seem to be goggame-*.info files (where * is a series of numbers) in JSON format containing a name field:
{
    "clientId": "50227812873380374",
    "gameId": "1237807960",
    "language": "English",
    "languages": [
        "en-US"
    ],
    "name": "Dead Cells",
    "playTasks": [
        ...
    ]
}

Brigador: I am new to rust, so I might actually miss something here.  But after some debugging printouts, I cannot detect ludusavi to check for anything else than Brigador: Up-Armored Edition.  But again, I am new to rust.
goggame-.info: on Linux these files are present, too. They reside in the  Dead Cells/game/ folder. Since I also have all DLCs for Dead Cells installed, each has it's own goggame-.info file.

You can try debugging it like this:
diff --git a/src/prelude.rs b/src/prelude.rs
index 0dfe398..291e4b8 100644
--- a/src/prelude.rs
+++ b/src/prelude.rs
@@ -595,11 +595,15 @@ impl InstallDirRanking {
                         if let Some(score) = score {
                             if let Some((previous, _)) = best {
                                 if score > previous {
+                                    println!("subdir '{actual_dir}' -- score {score} beats previous {previous}");
                                     best = Some((score, actual_dir));
                                 }
                             } else {
+                                println!("subdir '{actual_dir}' -- new score {score}");
                                 best = Some((score, actual_dir));
                             }
+                        } else {
+                            println!("subdir '{actual_dir}' -- irrelevant");
                         }
                         if score == Some(i64::MAX) {
                             break 'dirs;
@@ -611,6 +615,7 @@ impl InstallDirRanking {
             .collect();

         for (score, name, subdir) in scores {
+            println!("game '{name}' -- selecting subdir '{subdir}' with score {score}");
             self.0
                 .insert((root.clone(), name.to_owned()), (score, subdir.to_owned()));
         }

I don't have the game, so I just made an empty Brigador Up-Armored Edition folder in steamapps. Oddly, :
$ cargo run -- backup --preview 'Brigador: Up-Armored Edition'
subdir '1000 Amps' -- irrelevant
subdir 'A Plague Tale Innocence' -- irrelevant
subdir 'ABZU' -- irrelevant
[...]
[...]
subdir 'Vanquish' -- irrelevant
subdir 'Virgo vs The Zodiac' -- irrelevant
subdir 'Wings Of Vi' -- irrelevant
subdir 'YOU and ME and HER - A Love Story' -- irrelevant
game 'Brigador: Up-Armored Edition' -- selecting subdir 'Brigador UpArmored Edition' with score 537

You can also modify the fuzzy match unit test like this to check specific cases:
diff --git a/src/prelude.rs b/src/prelude.rs
index 0dfe398..7218272 100644
--- a/src/prelude.rs
+++ b/src/prelude.rs
@@ -1158,6 +1158,7 @@ mod tests {
             ("A Fun Game!", "A Fun Game", Some(219)),
             ("A Funner Game", "A Fun Game", Some(209)),
             ("A Fun Game 2", "A Fun Game", Some(219)),
+            ("Brigador: Up-Armored Edition", "Brigador UpArmored Edition", Some(537)),
         ] {
             assert_eq!(
                 output,

Some(_) means that it's at least a partial match, while None means it's irrelevant.

I tried debugging it like this:
diff --git a/src/prelude.rs b/src/prelude.rs
index 0dfe398..441d42e 100644
--- a/src/prelude.rs
+++ b/src/prelude.rs
@@ -589,17 +589,22 @@ impl InstallDirRanking {

                 let mut best: Option<(i64, &String)> = None;
                 'dirs: for expected_dir in expected_install_dirs {
+                    println!("looking for install dir {expected_dir}");
                     let ideal = matcher.fuzzy_match(expected_dir, expected_dir);
                     for actual_dir in &actual_dirs {
                         let score = fuzzy_match(&matcher, expected_dir, actual_dir, &ideal);
                         if let Some(score) = score {
                             if let Some((previous, _)) = best {
                                 if score > previous {
+                                    println!("  subdir '{actual_dir}' -- score {score} beats previous {previous}");
                                     best = Some((score, actual_dir));
                                 }
                             } else {
+                                println!("  subdir '{actual_dir}' -- new score {score}");
                                 best = Some((score, actual_dir));
                             }
+                        } else {
+                            println!("  subdir '{actual_dir}' -- irrelevant");
                         }
                         if score == Some(i64::MAX) {
                             break 'dirs;
@@ -611,6 +616,7 @@ impl InstallDirRanking {
             .collect();

         for (score, name, subdir) in scores {
+            println!("game '{name}' -- selecting subdir '{subdir}' with score {score}");
             self.0
                 .insert((root.clone(), name.to_owned()), (score, subdir.to_owned()));
         }

I don't have the game, so I just made an empty Brigador UpArmored Edition folder in steamapps:
$ cargo run -- backup --preview 'Brigador: Up-Armored Edition'
looking for install dir Brigador
  [...]
  subdir 'Brigador UpArmored Edition' -- irrelevant
  [...]
looking for install dir Brigador: Up-Armored Edition
  [...]
  subdir 'Brigador UpArmored Edition' -- new score 537
  [...]
game 'Brigador: Up-Armored Edition' -- selecting subdir 'Brigador UpArmored Edition' with score 537

You can also modify the fuzzy match unit test like this to check specific cases (Some(_) means that it's at least a partial match, while None means it's irrelevant):
diff --git a/src/prelude.rs b/src/prelude.rs
index 0dfe398..7218272 100644
--- a/src/prelude.rs
+++ b/src/prelude.rs
@@ -1158,6 +1158,7 @@ mod tests {
             ("A Fun Game!", "A Fun Game", Some(219)),
             ("A Funner Game", "A Fun Game", Some(209)),
             ("A Fun Game 2", "A Fun Game", Some(219)),
+            ("Brigador: Up-Armored Edition", "Brigador UpArmored Edition", Some(537)),
         ] {
             assert_eq!(
                 output,

One issue with looking for gameinfo/goggame files is that they go away if you uninstall a game (even if you choose to keep save files). So we can do it as an additional check, but we'd still need to be able to fall back to the current approach when those files are absent.

After some more real life and reading Rust tutorials:
I agree that checking goggame-* files is an extra step to detect game folders and thus possible save games.
Using the log statements from your patch above, the Brigador edition is recognized and --preview correctly finds the files to back up.  But running ludusavi itself fails to do so ....
$ cargo run -- backup --preview 'Brigador: Up-Armored Edition'
[...]
looking for install dir Brigador: Up-Armored Edition
[...]
subdir 'Brigador UpArmored Edition' -- new score 537
[...]
game 'Brigador: Up-Armored Edition' -- selecting subdir 'Brigador UpArmored Edition' with score 537
[...]
Checking root /home/MYUSER/Games
Checking file Brigador UpArmored Edition -> <base>/profile.json
Checking file Brigador UpArmored Edition -> <base>/game/profile.json
Checking file Brigador UpArmored Edition -> <base>/game/settings.json
Checking file Brigador UpArmored Edition -> <base>/settings.json
Checking file Brigador UpArmored Edition -> <base>/game/imgui.ini
[...]
Brigador: Up-Armored Edition [3.46 KiB]:
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/imgui.ini
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/profile.json
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/settings.json

Overall:
  Games: 1
  Size: 3.46 KiB
  Location: /home/MYUSER/Games/00-savegames/0-ludusavi-backup

ludusavi output:
$ cargo run
[...]
looking for install dir Brigador: Up-Armored Edition
[...]
  subdir 'Brigador UpArmored Edition' -- new score 537
[...]
game 'Brigador: Up-Armored Edition' -- selecting subdir 'Brigador UpArmored Edition' with score 537
Checking root /home/MYUSER/Games
Checking file NO_INSTALL_DIR -> <base>/game/settings.json
Checking file candidate /home/MYUSER/Games/<skip>/game/game/settings.json
Checking file candidate /home/MYUSER/Games/<skip>/game/settings.json
Checking file NO_INSTALL_DIR -> <base>/profile.json
Checking file candidate /home/MYUSER/Games/<skip>/profile.json
Checking file candidate /home/MYUSER/Games/<skip>/game/profile.json
Checking file NO_INSTALL_DIR -> <base>/game/imgui.ini
Checking file candidate /home/MYUSER/Games/<skip>/game/imgui.ini
Checking file candidate /home/MYUSER/Games/<skip>/game/game/imgui.ini
Checking file NO_INSTALL_DIR -> <base>/settings.json
Checking file candidate /home/MYUSER/Games/<skip>/settings.json
Checking file candidate /home/MYUSER/Games/<skip>/game/settings.json
Checking file NO_INSTALL_DIR -> <base>/game/profile.json
Checking file candidate /home/MYUSER/Games/<skip>/game/game/profile.json
Checking file candidate /home/MYUSER/Games/<skip>/game/profile.json

I used these debug outputs:
diff --git a/src/prelude.rs b/src/prelude.rs
index b47ea45..22abdaf 100644
--- a/src/prelude.rs
+++ b/src/prelude.rs
@@ -601,20 +601,37 @@ impl InstallDirRanking {
                     .unwrap_or_default();
                 let default_install_dir = name.to_string();
                 let expected_install_dirs = &[manifest_install_dirs, vec![&default_install_dir]].concat();
-
+                // SL TODO add goggames-*.info based install dirs into expected_install_dirs
+                let brigador = name == "Brigador: Up-Armored Edition";
+                if root.store == Store::Gog && brigador {
+                    println!("expected_install_dirs for {}: {:#?}", name, expected_install_dirs);
+                }
                 let mut best: Option<(i64, &String)> = None;
                 'dirs: for expected_dir in expected_install_dirs {
+                    if brigador {
+                        println!("looking for install dir {expected_dir}");
+                    }
                     let ideal = matcher.fuzzy_match(expected_dir, expected_dir);
                     for actual_dir in &actual_dirs {
                         let score = fuzzy_match(&matcher, expected_dir, actual_dir, &ideal);
                         if let Some(score) = score {
                             if let Some((previous, _)) = best {
                                 if score > previous {
+                                    if brigador {
+                                        println!("  subdir '{actual_dir}' -- score {score} beats previous {previous}");
+                                    }
                                     best = Some((score, actual_dir));
                                 }
                             } else {
+                                if brigador {
+                                    println!("  subdir '{actual_dir}' -- new score {score}");
+                                }
                                 best = Some((score, actual_dir));
                             }
+                        } else {
+                            if brigador {
+                                println!("  subdir '{actual_dir}' -- irrelevant");
+                            }
                         }
                         if score == Some(i64::MAX) {
                             break 'dirs;
@@ -626,6 +643,9 @@ impl InstallDirRanking {
             .collect();

         for (score, name, subdir) in scores {
+            if name == "Brigador: Up-Armored Edition" {
+                println!("game '{name}' -- selecting subdir '{subdir}' with score {score}");
+            }
             self.0
                 .insert((root.clone(), name.to_owned()), (score, subdir.to_owned()));
         }

So it works from the CLI, but not the GUI? That's very strange since the ranking flow should be the same for both. I've added some logging in master; could you please try it and upload the log file here?

Run: RUST_LOG=ludusavi=trace cargo run
Preview only Brigador (click on its name or use the three-dot menu next to it)
Find the log file in the same folder as the config file (Linux: $XDG_CONFIG_HOME/ludusavi or ~/.config/ludusavi)

Nope, in the UI Brigador does not show up at all, no 'trace' at all in the logfile.  From the command line everything works fine and I can find a backup in the backup folder:
Preview:
$ RUST_LOG=ludusavi=trace cargo run -- backup --preview 'Brigador: Up-Armored Edition'
    Finished dev [optimized + debuginfo] target(s) in 0.20s
     Running `target/debug/ludusavi backup --preview 'Brigador: Up-Armored Edition'`
Brigador: Up-Armored Edition [3.46 KiB]:
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/imgui.ini
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/profile.json
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/settings.json

Overall:
  Games: 1
  Size: 3.46 KiB
  Location: /home/MYUSER/Games/00-savegames/0-ludusavi-backup

Backup
$ RUST_LOG=ludusavi=trace cargo run -- backup --merge 'Brigador: Up-Armored Edition'
    Finished dev [optimized + debuginfo] target(s) in 0.20s
     Running `target/debug/ludusavi backup --merge 'Brigador: Up-Armored Edition'`Brigador: Up-Armored Edition [3.46 KiB]:
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/imgui.ini
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/profile.json
  - /home/MYUSER/Games/Brigador UpArmored Edition/game/settings.json

Overall:
  Games: 1
  Size: 3.46 KiB
  Location: /home/MYUSER/Games/00-savegames/0-ludusavi-backup

@sluedecke Could you please upload the full log file, not just the CLI output? I'd like to look for any red flags. If you could provide one log file from a GUI-based backup and one from a CLI-based backup, that would be even better, so I can look at how they're different.

Nope, in the UI Brigador does not show up at all, no 'trace' at all in the logfile

Just to be clear, are you saying there are no trace-level logs at all when running the GUI? Did you launch the GUI with RUST_LOG=ludusavi=trace cargo run?

I did run it with RUST_LOG set and yes it generates trace logs.  But within these the string Brigador... cannot be found.
This is the trace for
RUST_LOG=ludusavi=trace cargo run -- backup --preview 'Brigador: Up-Armored Edition':
ludusavi_rCURRENT.log
The traces for RUST_LOG=ludusavi=trace cargo run are > 40 MB:
log.zip

The traces for RUST_LOG=ludusavi=trace cargo run are > 40 MB:

Yeah, doing a full scan for all games is very verbose 😅 Could you please use the three dots next to Brigador to just back up that one game? The GUI logs are so long that it actually rolled over and missed the install dir ranking part.

I would love to, but Brigador does not show up in the UI at all :(
So I dug around a bit and with more log messages I see that in prelude::scan_game_for_backup where you loop over roots_to_check and retrieve the install_dir, CLI and UI do not agree on the install_dir.
I use roughly this patch (tag SLX helps me find my messages in the trace):
diff --git a/src/prelude.rs b/src/prelude.rs
index f532a36..fbd835c 100644
--- a/src/prelude.rs
+++ b/src/prelude.rs
@@ -18,6 +18,8 @@ const APP_DIR_NAME: &str = "ludusavi";
 const PORTABLE_FLAG_FILE_NAME: &str = "ludusavi.portable";
 const MIGRATION_FLAG_FILE_NAME: &str = ".flag_migrated_legacy_config";

+pub const TRACE_GAME: &str = "Brigador: Up-Armored Edition";
+
 pub type AnyError = Box<dyn std::error::Error>;

 #[derive(Clone, Debug, PartialEq, Eq, thiserror::Error)]
@@ -545,7 +547,7 @@ pub fn parse_paths(
         .collect()
 }

-#[derive(Clone, Default)]
+#[derive(Clone, Default, Debug)]
 pub struct InstallDirRanking(std::collections::HashMap<(RootsConfig, String), (i64, String)>);

 impl InstallDirRanking {
@@ -662,7 +664,9 @@ pub fn scan_game_for_backup(
     #[allow(unused_variables)] ignored_registry: &ToggledRegistry,
 ) -> ScanInfo {
     log::trace!("[{name}] beginning scan for backup");
-
+    if name == TRACE_GAME {
+        log::trace!("[{name}] SLX ranking: {ranking:#?}");
+    }
     let mut found_files = std::collections::HashSet::new();
     #[allow(unused_mut)]
     let mut found_registry_keys = std::collections::HashSet::new();
@@ -707,6 +711,14 @@ pub fn scan_game_for_backup(

         if let Some(files) = &game.files {
             let install_dir = ranking.get(&root, name);
+            if name == TRACE_GAME {
+                // SLX Brigador: for UI install_dir is None, but should be something
+                log::trace!(
+                    "[{name}] SLX checking root: {root:#?}, install_dir: {:#?}",
+                    &install_dir
+                );
+                log::trace!("[{name}] SLX ranking is: {ranking:#?}");
+            }

             for raw_path in files.keys() {
                 log::trace!("[{name}] parsing candidates from: {}", raw_path);

CLI tells me:
TRACE [ludusavi::prelude] [Brigador: Up-Armored Edition] SLX checking root: RootsConfig {
    path: StrictPath {
        raw: "/home/MYUSER/Games",
        basis: None,
    },
    store: Gog,
}, install_dir: Some(
    "Brigador UpArmored Edition",
)

UI tells me:
TRACE [ludusavi::prelude] [Brigador: Up-Armored Edition] SLX checking root: RootsConfig {
    path: StrictPath {
        raw: "/home/MYUSER/Games",
        basis: None,
    },
    store: Gog,
}, install_dir: None

Since I output the ranking in the logs above, I checked those too.  They agree on the install_dir, this is what the CLI logs:
TRACE [ludusavi::prelude] [Brigador: Up-Armored Edition] SLX ranking is: InstallDirRanking(
    {
        (
            RootsConfig {
                path: StrictPath {
                    raw: "/home/MYUSER/Games",
                    basis: None,
                },
                store: Gog,
            },
            "Brigador: Up-Armored Edition",
        ): (
            537,
            "Brigador UpArmored Edition",
        ),
    },
)

UI has rankings for many more games and one for Brigador which is similar to the one found in the client.

Heureka, I think I found it!  Just sec to confirm it...

InstallDirRanking::get fetches a candidate and then does for other in self.0.values().  Once it finds an other with higher confidence, it returns none.  Thats where it breaks.
Using the CLI, I filter for Brigador so there is no other and it returns Some correct value.
Using the UI there are many others, in my case it was "World of Goo" so it returns None.

A question: in prelude::InstallDirRanking::scan_root you have these final lines:
        for (score, name, subdir) in scores {
            self.0
                .insert((root.clone(), name.to_owned()), (score, subdir.to_owned()));
        }

But self.0 is a HashMap pointing to a single pair of (i64, String) and not a list.  So in the end it only stores the last candidate from scores, right?

Thank you! That's a great find, and a big oversight on my part 😅 It's supposed to loop through to find a higher score for the same folder, but it's just looking for any higher score. It only happens to work for perfect matches since that short-circuits the rest of the logic. I'll fix this as soon as I can and put out a new release.

Any time again, ludusavi finally lets me save my saves easily which I did manually for years - so thank you for that.  Also thanks for your patience, it took a while to do the testing.

Thank you for the fast fix, it works for me!

Though the title speaks about identifying games by their gameinfo, a bug has been found and fixed.  Can this issue then be closed?

There could still be value in adding the gameinfo lookup, since the folder-based approach may not work in all cases, but those cases should also hopefully be rare now. Of course, even if we started checking gameinfo, then you get into cases where the name may not match the manifest anyway. If you're not seeing any other cases where Ludusavi fails to find the install directory, then yeah, we can leave out the gameinfo functionality until we know we need it.

authors: mtkennerly sluedecke

repo: mtkennerly/ludusavi


text:
Enrollment Error: 0x80070001

Hey, I get an enrollment error with this package: 0x80070001

Microsoft Entra hybrid joined (User-Driven)
Intune Connector for Active Directory
Domain Join Configuration Profile

I am also getting this same error. were you able to resolve it?

Has anyone found a fix for this? Currently running into this issue and Intune support believes it's related to the install command..

I am getting this error as well. No idea what is going on. The script is failing to run because it doesn't even create the log folder location. I can run the script as SYSTEM via cmd/PowerShell. I haven't been able to get it to successfully rename the device, but at least it runs. :)

I figured it out. The version of the IntuneWinAppUtil that Niehaus is including with his script is over a year old. I downloaded the latest version from GitHub, used that to package the script, and it ran successfully (still failed to rename the device, but that's a different issue).
https://github.com/microsoft/Microsoft-Win32-Content-Prep-Tool

repo: mtniehaus/RenameComputer


text:
Add in all unicode chars as an option

It'd be helpful to have at least the greek alphabet available for when I have to write math syntax. Currently I use the built-in cmd-ctrl-space but that doesn't work in some editors who map those keys to other things. Do you plan on extending the functionality ever or will this remain just for emojis?

Sorry, I think this tool will remain for just emojis. 😨

authors: cdipaolo muan

repo: muan/mojibar


text:
Add exception to prevent invalid configuration

manifest and css path(s) cannot/should not be both defined.
Addresses #45

Doesn't solve the issue - just tried with this specific commit : ( - but still getting this:
Error: ENOENT: no such file or directory, open '/assets/application-fe612b1419b5a8d61dfc3dbc0fe5e5e58683baab1701e8e5870e475209314419.css'
Failed to get CSS for route /
  with options={"url"=>"http://localhost:3000/", "css"=>"/assets/application-fe612b1419b5a8d61dfc3dbc0fe5e5e58683baab1701e8e5870e475209314419.css", "width"=>1300, "height"=>900, "timeout"=>30000, "forceInclude"=>[], "strict"=>false, "maxEmbeddedBase64Length"=>1000, "userAgent"=>"Penthouse Critical Path CSS Generator", "renderWaitTime"=>100, "blockJSRequests"=>true, "customPageHeaders"=>{"Accept-Encoding"=>"identity"}}

Doesn't solve the issue - just tried with this specific commit : ( - but still getting this:
Error: ENOENT: no such file or directory, open '/assets/application-fe612b1419b5a8d61dfc3dbc0fe5e5e58683baab1701e8e5870e475209314419.css'
Failed to get CSS for route /
  with options={"url"=>"http://localhost:3000/", "css"=>"/assets/application-fe612b1419b5a8d61dfc3dbc0fe5e5e58683baab1701e8e5870e475209314419.css", "width"=>1300, "height"=>900, "timeout"=>30000, "forceInclude"=>[], "strict"=>false, "maxEmbeddedBase64Length"=>1000, "userAgent"=>"Penthouse Critical Path CSS Generator", "renderWaitTime"=>100, "blockJSRequests"=>true, "customPageHeaders"=>{"Accept-Encoding"=>"identity"}}

Same here. This is merged to 4.0.1, right?

authors: keferboeck kevinhq michael-misshore

repo: mudbugmedia/critical-path-css-rails


text:
stablediffusion_assets folder is incorrect now

LocalAI version:
v2.0.0
10:23PM INF LocalAI version: v2.0.0 (238fec244ae6c9a66bc7fafd76c7e14671110a6f)
Environment, CPU architecture, OS, and Version:
Linux localai-64b4946689-mcxkk 5.4.0-166-generic #183-Ubuntu SMP Mon Oct 2 11:28:33 UTC 2023 x86_64 GNU/Linux
CPU info:
model name      : Intel(R) Core(TM) i7-6700T CPU @ 2.80GHz
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d arch_capabilities
CPU:    AVX    found OK
CPU:    AVX2   found OK
CPU: no AVX512 found

Describe the bug
Applying the Stable diffusion model puts assets into a /models/stablediffusion_assets folder. When calling the image generation endpoint, it complains that it cannot find the folder /models/stablediffusion. Renaming /models/stabledifussion_assets to /models/stablediffusion fixes the problem.
To Reproduce
curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{
  "url": "github:go-skynet/model-gallery/stablediffusion.yaml"
}'
curl $LOCALAI/v1/images/generations -H "Content-Type: application/json" -d '{
  "prompt": "floating hair, portrait, ((loli)), ((one girl)), cute face, hidden hands, asymmetrical bangs, beautiful detailed eyes, eye shadow, hair ornament, ribbons, bowties, buttons, pleated skirt, (((masterpiece))), ((best quality)), colorful|((part of the head)), ((((mutated hands and fingers)))), deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, Octane renderer, lowres, bad anatomy, bad hands, text",
  "size": "256x256"
}'

{"error":{"code":500,"message":"could not load model: rpc error: code = Unknown desc = stat /models/stablediffusion: no such file or directory","type":""}}

Rename the folder from /models/stabledifussion_assets to /models/stablediffusion
{"created":1703062940,"id":"e317a84e-9107-4888-8d84-9e4057bc307c","data":[{"embedding":null,"index":0,"url":"https://my.domain/generated-images/b641229542902.png"}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}}
Expected behavior
Stablediffusion should work out of the box without issue
Logs
8:57AM DBG Checking "stablediffusion_assets/AutoencoderKL-256-256-fp16-opt.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/AutoencoderKL-256-256-fp16-opt.param"
8:57AM DBG File "stablediffusion_assets/AutoencoderKL-256-256-fp16-opt.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/AutoencoderKL-512-512-fp16-opt.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/AutoencoderKL-512-512-fp16-opt.param"
8:57AM DBG File "stablediffusion_assets/AutoencoderKL-512-512-fp16-opt.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/AutoencoderKL-base-fp16.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/AutoencoderKL-base-fp16.param"
8:57AM DBG File "stablediffusion_assets/AutoencoderKL-base-fp16.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/AutoencoderKL-encoder-512-512-fp16.bin" exists and matches SHA
8:57AM DBG Downloading "https://github.com/lenaxia/stablediffusion-bins/releases/download/2023.05.24/AutoencoderKL-encoder-512-512-fp16.bin"
8:57AM DBG File "stablediffusion_assets/AutoencoderKL-encoder-512-512-fp16.bin" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/AutoencoderKL-fp16.bin" exists and matches SHA
8:57AM DBG Downloading "https://github.com/lenaxia/stablediffusion-bins/releases/download/2023.05.24/AutoencoderKL-fp16.bin"
8:57AM DBG File "stablediffusion_assets/AutoencoderKL-fp16.bin" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/FrozenCLIPEmbedder-fp16.bin" exists and matches SHA
8:57AM DBG Downloading "https://github.com/lenaxia/stablediffusion-bins/releases/download/2023.05.24/FrozenCLIPEmbedder-fp16.bin"
8:57AM DBG Downloading stablediffusion_assets/FrozenCLIPEmbedder-fp16.bin: 42.0 MiB/235.1 MiB (17.85%) ETA: 23.00922357s
8:57AM DBG File "stablediffusion_assets/FrozenCLIPEmbedder-fp16.bin" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/FrozenCLIPEmbedder-fp16.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/FrozenCLIPEmbedder-fp16.param"
8:57AM DBG File "stablediffusion_assets/FrozenCLIPEmbedder-fp16.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/log_sigmas.bin" exists and matches SHA
8:57AM DBG Downloading "https://github.com/EdVince/Stable-Diffusion-NCNN/raw/main/x86/linux/assets/log_sigmas.bin"
8:57AM DBG File "stablediffusion_assets/log_sigmas.bin" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/UNetModel-256-256-MHA-fp16-opt.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/UNetModel-256-256-MHA-fp16-opt.param"
8:57AM DBG File "stablediffusion_assets/UNetModel-256-256-MHA-fp16-opt.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/UNetModel-512-512-MHA-fp16-opt.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/UNetModel-512-512-MHA-fp16-opt.param"
8:57AM DBG File "stablediffusion_assets/UNetModel-512-512-MHA-fp16-opt.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/UNetModel-base-MHA-fp16.param" exists and matches SHA
8:57AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/UNetModel-base-MHA-fp16.param"
8:57AM DBG File "stablediffusion_assets/UNetModel-base-MHA-fp16.param" downloaded and verified
8:57AM DBG Checking "stablediffusion_assets/UNetModel-MHA-fp16.bin" exists and matches SHA
8:57AM DBG Downloading "https://github.com/lenaxia/stablediffusion-bins/releases/download/2023.05.24/UNetModel-MHA-fp16.bin"
8:57AM DBG Downloading stablediffusion_assets/UNetModel-MHA-fp16.bin: 32.0 KiB/1.6 GiB (0.00%) ETA: 150h8m36.195270094s
[10.42.6.178]:34834 200 - GET /models/jobs/cc919bb3-9f15-11ee-89c5-f2a7fa7191d1
8:57AM DBG Downloading stablediffusion_assets/UNetModel-MHA-fp16.bin: 336.3 MiB/1.6 GiB (20.50%) ETA: 59.317263659s
[10.42.6.178]:34834 200 - GET /models/jobs/cc919bb3-9f15-11ee-89c5-f2a7fa7191d1
8:57AM DBG Downloading stablediffusion_assets/UNetModel-MHA-fp16.bin: 669.2 MiB/1.6 GiB (40.79%) ETA: 29.461567137s
8:57AM DBG Downloading stablediffusion_assets/UNetModel-MHA-fp16.bin: 1005.6 MiB/1.6 GiB (61.30%) ETA: 15.972068837s
8:57AM DBG Downloading stablediffusion_assets/UNetModel-MHA-fp16.bin: 1.3 GiB/1.6 GiB (81.95%) ETA: 6.673803602s
[10.42.6.178]:34834 200 - GET /models/jobs/cc919bb3-9f15-11ee-89c5-f2a7fa7191d1
8:58AM DBG File "stablediffusion_assets/UNetModel-MHA-fp16.bin" downloaded and verified
8:58AM DBG Checking "stablediffusion_assets/vocab.txt" exists and matches SHA
8:58AM DBG Downloading "https://raw.githubusercontent.com/EdVince/Stable-Diffusion-NCNN/main/x86/linux/assets/vocab.txt"
8:58AM DBG File "stablediffusion_assets/vocab.txt" downloaded and verified
8:58AM DBG Written config file /models/stablediffusion.yaml

Before rename:
8:55AM DBG Request received:
8:55AM DBG Loading model: stablediffusion
8:55AM DBG Parameter Config: &{PredictionOptions:{Model:stablediffusion Language: N:0 TopP:0.7 TopK:80 Temperature:0.9 Maxtokens:512 Echo:false Batch:0 F16:false IgnoreEOS:false RepeatPenalty:0 Keep:0 MirostatETA:0 MirostatTAU:0 Mirostat:0 FrequencyPenalty:0 TFZ:0 TypicalP:0 Seed:0 NegativePrompt: RopeFreqBase:0 RopeFreqScale:0 NegativePromptScale:0 UseFastTokenizer:false ClipSkip:0 Tokenizer:} Name: F16:false Threads:4 Debug:true Roles:map[] Embeddings:false Backend: TemplateConfig:{Chat: ChatMessage: Completion: Edit: Functions:} PromptStrings:[floating hair, portrait, ((loli)), ((one girl)), cute face, hidden hands, asymmetrical bangs, beautiful detailed eyes, eye shadow, hair ornament, ribbons, bowties, buttons, pleated skirt, (((masterpiece))), ((best quality)), colorful|((part of the head)), ((((mutated hands and fingers)))), deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, Octane renderer, lowres, bad anatomy, bad hands, text] InputStrings:[] InputToken:[] functionCallString: functionCallNameString: FunctionsConfig:{DisableNoAction:false NoActionFunctionName: NoActionDescriptionName:} FeatureFlag:map[] LLMConfig:{SystemPrompt: TensorSplit: MainGPU: RMSNormEps:0 NGQA:0 PromptCachePath: PromptCacheAll:false PromptCacheRO:false MirostatETA:0 MirostatTAU:0 Mirostat:0 NGPULayers:0 MMap:false MMlock:false LowVRAM:false Grammar: StopWords:[] Cutstrings:[] TrimSpace:[] ContextSize:0 NUMA:false LoraAdapter: LoraBase: LoraScale:0 NoMulMatQ:false DraftModel: NDraft:0 Quantization: MMProj: RopeScaling: YarnExtFactor:0 YarnAttnFactor:0 YarnBetaFast:0 YarnBetaSlow:0} AutoGPTQ:{ModelBaseName: Device: Triton:false UseFastTokenizer:false} Diffusers:{PipelineType: SchedulerType: CUDA:false EnableParameters: CFGScale:0 IMG2IMG:false ClipSkip:0 ClipModel: ClipSubFolder:} Step:0 GRPC:{Attempts:0 AttemptsSleepTime:0} VallE:{AudioPath:}}
8:55AM DBG Loading model stablediffusion from stablediffusion
8:55AM DBG Loading model in memory from file: /models/stablediffusion
8:55AM DBG Loading Model stablediffusion with gRPC (file: /models/stablediffusion) (backend: stablediffusion): {backendString:stablediffusion model:stablediffusion threads:4 assetDir:/tmp/localai/backend_data context:{emptyCtx:{}} gRPCOptions:0xc0000f23c0 externalBackends:map[autogptq:/build/backend/python/autogptq/run.sh bark:/build/backend/python/bark/run.sh diffusers:/build/backend/python/diffusers/run.sh exllama:/build/backend/python/exllama/run.sh huggingface-embeddings:/build/backend/python/sentencetransformers/run.sh petals:/build/backend/python/petals/run.sh sentencetransformers:/build/backend/python/sentencetransformers/run.sh transformers:/build/backend/python/transformers/run.sh vall-e-x:/build/backend/python/vall-e-x/run.sh vllm:/build/backend/python/vllm/run.sh] grpcAttempts:20 grpcAttemptsDelay:2 singleActiveBackend:false parallelRequests:false}
8:55AM DBG Loading GRPC Process: /tmp/localai/backend_data/backend-assets/grpc/stablediffusion
8:55AM DBG GRPC Service for stablediffusion will be running at: '127.0.0.1:40703'
8:55AM DBG GRPC Service state dir: /tmp/go-processmanager4225378111
8:55AM DBG GRPC Service Started
rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:40703: connect: connection refused"
8:55AM DBG GRPC(stablediffusion-127.0.0.1:40703): stderr 2023/12/20 08:55:36 gRPC Server listening at 127.0.0.1:40703
8:55AM DBG GRPC Service Ready
8:55AM DBG GRPC: Loading model with options: {state:{NoUnkeyedLiterals:{} DoNotCompare:[] DoNotCopy:[] atomicMessageInfo:<nil>} sizeCache:0 unknownFields:[] Model:stablediffusion ContextSize:0 Seed:0 NBatch:0 F16Memory:false MLock:false MMap:false VocabOnly:false LowVRAM:false Embeddings:false NUMA:false NGPULayers:0 MainGPU: TensorSplit: Threads:0 LibrarySearchPath: RopeFreqBase:0 RopeFreqScale:0 RMSNormEps:0 NGQA:0 ModelFile:/models/stablediffusion Device: UseTriton:false ModelBaseName: UseFastTokenizer:false PipelineType: SchedulerType: CUDA:false CFGScale:0 IMG2IMG:false CLIPModel: CLIPSubfolder: CLIPSkip:0 Tokenizer: LoraBase: LoraAdapter: LoraScale:0 NoMulMatQ:false DraftModel: AudioPath: Quantization: MMProj: RopeScaling: YarnExtFactor:0 YarnAttnFactor:0 YarnBetaFast:0 YarnBetaSlow:0}
[10.42.6.178]:46474 500 - POST /v1/images/generations

After rename:
9:01AM DBG Request received:
9:01AM DBG Loading model: stablediffusion
9:01AM DBG Parameter Config: &{PredictionOptions:{Model:stablediffusion Language: N:0 TopP:0.7 TopK:80 Temperature:0.9 Maxtokens:512 Echo:false Batch:0 F16:false IgnoreEOS:false RepeatPenalty:0 Keep:0 MirostatETA:0 MirostatTAU:0 Mirostat:0 FrequencyPenalty:0 TFZ:0 TypicalP:0 Seed:0 NegativePrompt: RopeFreqBase:0 RopeFreqScale:0 NegativePromptScale:0 UseFastTokenizer:false ClipSkip:0 Tokenizer:} Name: F16:false Threads:4 Debug:true Roles:map[] Embeddings:false Backend: TemplateConfig:{Chat: ChatMessage: Completion: Edit: Functions:} PromptStrings:[floating hair, portrait, ((loli)), ((one girl)), cute face, hidden hands, asymmetrical bangs, beautiful detailed eyes, eye shadow, hair ornament, ribbons, bowties, buttons, pleated skirt, (((masterpiece))), ((best quality)), colorful|((part of the head)), ((((mutated hands and fingers)))), deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, Octane renderer, lowres, bad anatomy, bad hands, text] InputStrings:[] InputToken:[] functionCallString: functionCallNameString: FunctionsConfig:{DisableNoAction:false NoActionFunctionName: NoActionDescriptionName:} FeatureFlag:map[] LLMConfig:{SystemPrompt: TensorSplit: MainGPU: RMSNormEps:0 NGQA:0 PromptCachePath: PromptCacheAll:false PromptCacheRO:false MirostatETA:0 MirostatTAU:0 Mirostat:0 NGPULayers:0 MMap:false MMlock:false LowVRAM:false Grammar: StopWords:[] Cutstrings:[] TrimSpace:[] ContextSize:0 NUMA:false LoraAdapter: LoraBase: LoraScale:0 NoMulMatQ:false DraftModel: NDraft:0 Quantization: MMProj: RopeScaling: YarnExtFactor:0 YarnAttnFactor:0 YarnBetaFast:0 YarnBetaSlow:0} AutoGPTQ:{ModelBaseName: Device: Triton:false UseFastTokenizer:false} Diffusers:{PipelineType: SchedulerType: CUDA:false EnableParameters: CFGScale:0 IMG2IMG:false ClipSkip:0 ClipModel: ClipSubFolder:} Step:0 GRPC:{Attempts:0 AttemptsSleepTime:0} VallE:{AudioPath:}}
9:01AM DBG Loading model stablediffusion from stablediffusion
9:01AM DBG Loading model in memory from file: /models/stablediffusion
9:01AM DBG Loading Model stablediffusion with gRPC (file: /models/stablediffusion) (backend: stablediffusion): {backendString:stablediffusion model:stablediffusion threads:4 assetDir:/tmp/localai/backend_data context:{emptyCtx:{}} gRPCOptions:0xc0000f23c0 externalBackends:map[autogptq:/build/backend/python/autogptq/run.sh bark:/build/backend/python/bark/run.sh diffusers:/build/backend/python/diffusers/run.sh exllama:/build/backend/python/exllama/run.sh huggingface-embeddings:/build/backend/python/sentencetransformers/run.sh petals:/build/backend/python/petals/run.sh sentencetransformers:/build/backend/python/sentencetransformers/run.sh transformers:/build/backend/python/transformers/run.sh vall-e-x:/build/backend/python/vall-e-x/run.sh vllm:/build/backend/python/vllm/run.sh] grpcAttempts:20 grpcAttemptsDelay:2 singleActiveBackend:false parallelRequests:false}
9:01AM DBG Loading GRPC Process: /tmp/localai/backend_data/backend-assets/grpc/stablediffusion
9:01AM DBG GRPC Service for stablediffusion will be running at: '127.0.0.1:43607'
9:01AM DBG GRPC Service state dir: /tmp/go-processmanager3332363991
9:01AM DBG GRPC Service Started
rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:43607: connect: connection refused"
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stderr 2023/12/20 09:01:07 gRPC Server listening at 127.0.0.1:43607
9:01AM DBG GRPC Service Ready
9:01AM DBG GRPC: Loading model with options: {state:{NoUnkeyedLiterals:{} DoNotCompare:[] DoNotCopy:[] atomicMessageInfo:<nil>} sizeCache:0 unknownFields:[] Model:stablediffusion ContextSize:0 Seed:0 NBatch:0 F16Memory:false MLock:false MMap:false VocabOnly:false LowVRAM:false Embeddings:false NUMA:false NGPULayers:0 MainGPU: TensorSplit: Threads:0 LibrarySearchPath: RopeFreqBase:0 RopeFreqScale:0 RMSNormEps:0 NGQA:0 ModelFile:/models/stablediffusion Device: UseTriton:false ModelBaseName: UseFastTokenizer:false PipelineType: SchedulerType: CUDA:false CFGScale:0 IMG2IMG:false CLIPModel: CLIPSubfolder: CLIPSkip:0 Tokenizer: LoraBase: LoraAdapter: LoraScale:0 NoMulMatQ:false DraftModel: AudioPath: Quantization: MMProj: RopeScaling: YarnExtFactor:0 YarnAttnFactor:0 YarnBetaFast:0 YarnBetaSlow:0}
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[start stable diffusion]--------------------
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[init]--------------------
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stderr parse magic failed
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stderr network graph not ready
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout  3.51G / 3.62G
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[prompt]------------------ 3.51G / 3.62G
9:01AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[diffusion]---------------
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 1/15     3848.28ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 2/15     3356.25ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 3/15     2966.58ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 4/15     2729.85ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 5/15     3109.36ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 6/15     2769.07ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 7/15     2807.56ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 8/15     2932.28ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step: 9/15     2986.92ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step:10/15     3903.58ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step:11/15     3364.42ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step:12/15     3124.31ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step:13/15     2989.45ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step:14/15     2767.70ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout step:15/15     3298.15ms
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[diffusion]--------------- 3.74G / 3.74G
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[decode]------------------ 4.13G / 4.13G
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[save]--------------------
9:02AM DBG GRPC(stablediffusion-127.0.0.1:43607): stdout ----------------[close]-------------------
[10.42.6.178]:50192 200 - POST /v1/images/generations
9:02AM DBG Response: {"created":1703062940,"id":"e317a84e-9107-4888-8d84-9e4057bc307c","data":[{"embedding":null,"index":0,"url":"https://ai.thekao.cloud/generated-images/b641229542902.png"}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}}
[10.42.6.178]:50192 304 - GET /generated-images/b641229542902.png

Additional context
This seems to be where it is defining which folder to pull from, by just appending the model name to /models. So we shouldn't be using _assets
https://github.com/mudler/LocalAI/blob/7741a6e75d08cc78f44e3595a2cb15954718e959/pkg/model/loader.go#L129

https://github.com/go-skynet/model-gallery/blob/f8a9f5e7e2d42e59346de411677208b21b760ad1/stablediffusion.yaml#L13

Had a similar problem but did a refresh setup (clearing storage folders and downloading the models) and works fine now.
So probably a version mismatch between backends and models or duplications.

this is fixed now, alternatively the models can be installed directly from the webui. Reopen if necesasary!

authors: lenaxia mudler sbe-arg

repo: mudler/LocalAI


text:
Request Accrescent as a Store

Is your feature request related to a problem? Please describe.
F-droid remains the sole option for pre-built binaries.
Describe the solution you'd like
Publish on Accrescent as a secure delivery method for A12 devices and above. No need to upload your signing key.
Describe alternatives you've considered
None which do not require the dev signing key
Additional context
APK built as a split and support for unattended updates.

For now I'll keep F-Droid as only option. I'd rather add a new repo that will act as F-Droid repo with my singing keys for my apps.

You can download the apk from GitHub now: https://github.com/mueller-ma/Coffee/releases

authors: beaglesnuf mueller-ma

repo: mueller-ma/Coffee


text:
02_shap.interp.ipynb error?

Hi, I tried running this notebook and got an error at this line:
exp = ShapInterpretation(learn)
exp.decision_plot(class_id=0, row_idx=10)

TypeError                                 Traceback (most recent call last)
<ipython-input-12-907d69fd87c2> in <module>
----> 1 exp.decision_plot(class_id=0, row_idx=10)

<ipython-input-8-27630e1fb799> in decision_plot(self, class_id, row_idx, **kwargs)
     16     def decision_plot(self, class_id=0, row_idx=-1, **kwargs):
     17         "Visualize model decision using cumulative `SHAP` values."
---> 18         shap_vals, exp_val = _get_values(self, class_id)
     19         n_rows = shap_vals.shape[0]
     20         if row_idx == -1:

<ipython-input-10-91e394550211> in _get_values(interp, class_id)
      5     exp_vals = interp.explainer.expected_value
      6     if interp.is_multi_output:
----> 7         (class_name, class_idx) = _get_class_info(interp, class_id)
      8         print(f"Classification model detected, displaying score for the class {class_name}.")
      9         print("(use `class_id` to specify another class)")

<ipython-input-9-96fbf3aee7cf> in _get_class_info(interp, class_id)
      2 def _get_class_info(interp:ShapInterpretation, class_id):
      3     "Returns class name associated with index, or vice-versa"
----> 4     if isinstance(class_id, int): class_idx, class_name = class_id, interp.class_names[class_id]
      5     else: class_idx, class_name = interp.class_names.o2i[class_id], class_id
      6     return (class_name, class_idx)

TypeError: 'NoneType' object is not subscriptable

I can't seem to reproduce this. What environment are you in?

I'm using Jupyter Notebook on Gradient. Here are the versions of the libraries I'm using:
import shap, fastai2, fastcore, fastinference
fastai2.__version__, fastcore.__version__, fastinference.__version__, shap.__version__
('0.0.18', '0.1.18', '0.0.13', '0.35.0')

Thanks! I'll try to do that in gradient today and get back with you, for now I can guarantee it works in Colaboratory (this is where I did my testing real quick)

Thank you!

I don't have a gradient account so I'm not sure how to test that actually, but running in my local jupyter environment also doesn't show any issues. The versions are all the same.

Hi, I still saw the error on my side. But after I traced the error to ShapInterpretation(), I changed self.class_names = learn.dl.vocab if hasattr(learn.dl, 'vocab') else None into self.class_names = learn.dls.vocab if hasattr(learn.dls, 'vocab') else None  everything seems to work?
#export
class ShapInterpretation():
    "Base interpereter to use the `SHAP` interpretation library"
    def __init__(self, learn:TabularLearner, test_data=None, link='identity', l1_reg='auto', n_samples=128, **kwargs):
        "Initialize `ShapInterpretation` with a Learner, test_data, link, `n_samples`, `l1_reg`, and optional **kwargs"
        self.model = learn.model
        self.dls = learn.dls
        self.class_names = learn.dl.vocab if hasattr(learn.dl, 'vocab') else None # only defined for classification problems
        self.train_data = pd.merge(learn.dls.cats, learn.dls.conts, left_index=True, right_index=True)
        self.test_data = _prepare_data(learn, test_data, n_samples)
        pred_func = partial(_predict, learn)
        self.explainer = shap.SamplingExplainer(pred_func, self.train_data, **kwargs)
        self.shap_vals = self.explainer.shap_values(self.test_data, l1_reg=l1_reg)
        self.is_multi_output = isinstance(self.shap_vals, list)

That fix looks alright to me, would you like to put a PR in? :)

repo: muellerzr/fastinference


text:
Button documentation, missing 95% use case

The Button documentation never show how we interact with a button
Documentation is very detailed, but for 5% of the usage of a button, the 95% other part is not documented.

[*] This is a v1.x issue (v0.x is no longer maintained).
[ ] I have searched the issues of this repository and believe that this is not a duplicate.

Expected Behavior

Current Behavior

Steps to Reproduce (for bugs)

Context

Your Environment

Tech
Version

Material-UI
v1.?.?

React

browser

etc

https://github.com/mui-org/material-ui/issues/7923
I totally agrea.
I try to implement a button with a onClick handler, from 3 hours, and code never go to the handler.!!!!!!!!!!!!!
material-ui is too much verbose.

Find my problem: no interaction possible wit react-leaflet popup

Does it work with a native button element?

Your issue has been closed because it does not conform to our issue requirements.
Please provide a full reproduction test case. This would help a lot 👷 .
A live example would be perfect. This codesandbox.io template may be a good starting point. Thank you!

authors: JacquesBonet oliviertassinari

repo: mui-org/material-ui