3.3.1 issue?

I'm getting -
Uncaught AssertionError: embedded: did not recognize object of type "File"browser.js:9 129.exports.parsebrowser.js:4 27.File.parsebrowser.js:6 transformbrowser.js:4 26.transform.runbrowser.js:4 26.execbrowser.js:4 26.runScripts

I also had a user independently verify this - https://github.com/systemjs/builder/issues/60#issuecomment-72364321.
If I clone from master and run a custom build for browser.js the issue goes away though.
Let me know if you have any ideas.

This is likely being thrown by regenerator-6to5. I have an npm linked copy which may be the cause. I'll push out a new build/version to verify.

Pushed out 3.3.2, let me know if the browser.js build within works.

Thanks, that's fixed it.

Great, I'll do #655 ASAP to ensure this never happens again.


[feat]: Byword editing

Provide basic by word editting like in default bash shell:  backspace a word, <C-,> or <C-.> for move back/forward a word

For now, can use Ctrl-W to delete back a word


[Proposal] support join query without the data shuffle

motivation

Most of the open source projects do not support join query as joining data from different tables needs to shuffle data across the cluster . As shuffling is a heavy work for the projects to do so , most of the supporting join feature projects utilize the distributed memory calculating technology to shuffle the data ,has a low reading latency, let the project be more complex and less stable.
To reduce the shuffle wok, Google's Spanner has a idea to let joint data stay together , and the open source project CockroachDB following that idea has a join query support but so far not stable to use.  Another fact that support this proposal is that OLAP often follows the star schema :  one fact table and more dimension tables. so a OLAP join query often has a common join condition field from different tables.  According to the Druid's bitmap inverted index feature ,I designed this join query ,it has the following query features.
query feature

without the heavy data shuffle work
high query response time
low memory requirement
streaming  output of query result
lazy to materialize the join query result
push down join query to scan step
support querying segments from different tables and across different time intervals
support tables from history and realtime nodes

implementation design

First ,for example , I  define three tables :  table 1:  user_shop_detail( user_id,shop_item)  table 2: user(user_id, user_name,user_address) , table 3: user_security(user_id,security_level)
these three tables follow the OLAP star schema .
Second , assume a join query to find the shop item coming from the one who has a high security level :  select a.shop_item from user_shop_detail a join user b  join user_security c on a.user_id=b.user_id  , a.user_id=c.user_id where a.user_id='001' and b.user_name='jack' and c.security_level='high'
The given query example sql will be translated to a new Druid query:
 {
    "queryType": "localJoin",
    "batchSize": 10,
    "context": null,
    "subSelectQueries": [
        {
            "dataSource": {
                "type": "table",
                "name": "user_shop_detail"
            },
            "granularity": {
                "type": "all"
            },
            "dimensions": [
                {
                    "type": "default",
                    "dimension": "shop_item",
                    "outputName": "shop_item"
                }
            ],
            "metrics": null,
            "jointDimension": "user_id",
            "dimFilter": {
                "type": "selector",
                "dimension": "user_id",
                "value": "001",
                "extractionFn": null
            },
            "querySegmentSpec": {
                "type": "LegacySegmentSpec",
                "intervals": [
                    "2011-01-12T00:00:00.000Z/2011-01-14T00:00:00.000Z"
                ]
            }
        },
        {
            "dataSource": {
                "type": "table",
                "name": "user"
            },
            "granularity": {
                "type": "all"
            },
            "metrics": null,
            "jointDimension": "user_id",
            "dimFilter": {
                "type": "selector",
                "dimension": "user_name",
                "value": "jack",
                "extractionFn": null
            },
            "querySegmentSpec": {
                "type": "LegacySegmentSpec",
                "intervals": [
                    "2011-01-12T00:00:00.000Z/2011-01-14T00:00:00.000Z"
                ]
            }
        },
        {
            "dataSource": {
                "type": "table",
                "name": "user_security"
            },
            "granularity": {
                "type": "all"
            },
            "metrics": null,
            "jointDimension": "user_id",
            "dimFilter": {
                "type": "selector",
                "dimension": "user_security",
                "value": "high",
                "extractionFn": null
            },
            "querySegmentSpec": {
                "type": "LegacySegmentSpec",
                "intervals": [
                    "2011-01-12T00:00:00.000Z/2011-01-14T00:00:00.000Z"
                ]
            }
        }
    ]
}

To implement the local join query  ,I defined four metadata tables :

table_group(group_name,joint_table_name, joint_table_field,total_bucket_number )
To the given example ,the table_group will have three items: ('g1','user_shop_detail','user_id',1024) ('g1','user','user_id',1024) ('g1','user_security','user_id',1024)

bucket_segment(bucket_number,segment_id,assignment_version)
The tables from the same TableGroup will have the group name , bucket number. The data from the same table group will be partitioned on joint key according to the total bucket number ,and have a partition rule i.e. bucket_number= hash(joint_field)% total_bucket_number  .  Through this process ,we will have the bucket and DataSegment relationship.

bucket_assignment(bucket_number,machine_host,assignment_verion)
By implement an assignment algorithm, we can let the bucket go to a physical machine. The algorithm will give the bucket_assignment table data.
A  tip : a bucket is a DataSegment group which has equal joint field data

assignment_version(version_number,effect)
We may have different assignment according to the cluster changes ,so we should give an assignment a version number and a effect tag. The assignment with the largest version number and true effect tag will take place to generate a segment assignment.

The implementation can be broken into 4 parts:

rewrite the query plan to push down the join query to the scan
partition the table's data according to the same partition rule
The  history and realtime model will be treated differently.
let DataSegment from the same partition number to stay together at the  same physical machine
By implementing a new  DruidCoordinatorHelper to do the assignment algorithm  , It writes the metadata table bucket_assignment  ,assignment_version
By implementing a new BalanceStrategy  ,It assigns the unload segment to a dedicated machine  through the queried assignment metadata.
implement a new join query called LocalJoin to query the DataSegments of the local machine which conform to the query condition.
Here ,I have implemented a new join query mechanism called BitmapMatrix.

working plan

Now ,I have implemented the 2~4 parts of the history model , the 1st part is WIP . I plan to  take two PRs to complete this proposal , one for history model, another is for realtime model ,to reduce the code review work.  I will give the history model implementation PR as soon as possible.

@weijietong thanks for your nice proposal! I have a couple of questions.

The json spec for join query seems not extensible to support other query types as well. Is the LocalJoin query designed to support only inner equi join? I think this idea can be used for other types like outer joins or partially theta joins as well.
Currently Druid supports limited hash and range partition features. It means, hash partitioning is allowed with only all dimensions and range partitioning is allowed with only a single dimension. Both partitioning schemes are not enough to cover various join cases. What is your plan for this problem?
How do you extend Druid's partitioning feature to realtimes?

@jihoonson

To 1st question , the LocalJoin  query json spec was initially designed to support inner equal join. I agree that it has limited expression ability to express join direction like left , right outer join  though left or right outer join query can also be implemented later by LocalJoin technology , and  this is the aspect that we can discuss upon that.

To 2st question, I have a little change to the hash batch ingestion to let it support one dimension partition. I have no plan to support the range partition ,as I have not thought about that.

To 3st question, We now do realtime ingestion through the push model.To push model, I plan to let the Overlord to generate a total shard number size workers .Each one of the workers will service a dedicated input data with specified bucket number , e.g. worker 1 will service data belongs to bucket 1,worker n will service data belongs to bucket n.  The input data will also have a bucket number calculation bucketNumber=hash(jointField)%totalBucketSize and transfers to the correspond worker .

Then history  and realtime data can both stay together at the same physical machine ,as they share the same bucketNumber <---> machineHost relationship assignment.
To pull model, I have not thought about that yet. Any advice will be appreciated .

Thanks for your reply. For the second question, I'd like to ask you further how you decide the location of segments of different data sources partitioned by the same dimension. I think only the segments of the associated data sources should be co-located together because, otherwise, a skewed data distribution can be caused. I wrote some idea about this issue here.

@jihoonson I have read the proposed idea by @gianm. I think DistributedRule is a good concept to express the data distribution to the users. As mentioned above,to distribute the partitioned data, I defined four relevant metadata tables which is similar to implement the DistributeRule. A bucket is a group of segments which have partitioned by the same dimension key. When ingesting the data,we have the bucket number and the relevant segment relationship. This metadata stores in the bucket_segment metadata table.I define another common distribution interface called IPartition which do the work to distribute the bucket number to a server that also means find the sever to load the relevant segments. I have implemented several consistent hash implications of that interface. Also that interface has the responsibility to do the replication work. I use the double ring with replicator factor to guarantee replicated segments stored at different servers. The distribution result of this interface will be stored in the metadata table bucket_assignment . I reuse the LoadRule to do the real work to load segments according to the distribution result of last step. Another reason to store bucket_assignment is to compare the old,new distribution results to choose the segments to be moved due to the cluster has changed and the users decide to do so.I think this a implementation of the DistributionRule concept . To broadcast table,the bucket equals to the small table and another IPartition implementation to assign this small table to all the servers which service the biggest table. Any advice or objections please.

You mean the locations of segments (including replicas) are decided by IPartition which is based on the consistent hashing, and the actual storing and replicating segments are done by load rules? Sounds good, but I have one more question about that.
Druid is currently using BalancerStrategy to decide which server will hold a segment. IPartition seems to do the same work, so do you have any reason why you added a new interface?
And, this new interface can be integrated well with the existing one? I wonder what happens if BalancerStrategy and IPartition doesn't return the same location for the same replica.
And, I think the work relating to the consistent hashing will be large because it should contain codes handling cluster changes. It would be better to make a separate PR for it.

To be concrete ,IPartition does the real distribution logic work ,which we can have different distribution algorithms like the HRW consistent hash,Jump consistent hash,the traditional ring consistent has ,or just assign to all the corresponding servers like broadcasting. I implementation another BalancerStrategy  called ClusteringBalancerStrategy which use the distribution result (i.e. the saved metadata of bucket_assigment)calculated by the IPartition .  More concretely, there's a new Helper implementation which run periodically to run the IParition method , watch the cluster status, collect the distribution result from the metadata table , pack the distribution result as runtime parameters for the next Helper i.e. the ClusteringBalancerStrategy to use.
As Druid now only use the CostBalancerStrategy by writing the hacker code ,that's a restriction that we maybe need to do a change ,My indirect solution is to let CostBalancerStrategy to nest have a ClusteringBalancerStrategy.
BalancerStrategy has methods to solve the rebalance question , that's where consistent hash was designed to solve. As we ever discussed offline , whether to rebalance the segments as the cluster changes ,the decision belongs to the users through change the assignment_version metadata effective tag. I don't think we need another PR for it.

Ah, I got it. Thanks for your detailed description. It's ok if the size of PR is not large. Please go ahead.


8405 error initializing system node

https://github.com/Shippable/pm/issues/8405
super users cannot initialize a system node. adding a new node and clicking Initialize throws following error

This should be an issue in API.  It's not looking for the system integration.

closing this. added a new issue in api


Credit

Hi Travis
I couldn't find your email anywhere so I put this here as an issue :)
I used part of this package in my framework, I hope it's ok with you:
https://github.com/AliRn76/panther/blob/f54584a98d4b17b4e0ce23c71cec50f89fa1285f/panther/routings.py#L128

Relevant from the license


TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/103062

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/103247

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/103940

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/104526

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/110470

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/111243

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/111624

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/112357

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/112769

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/116102

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/116161

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/117547

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/118408

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/118603

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/121805

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/122123


Fixed typo in README.md

I fixed the typo "informatiom" -> "information", because it bothered me too much.

The readme also mentions issue #32 which is no longer accessible as a known issue.


Code to fix return value for HEAD HttpMethod

This is to fix the issue reported in https://github.com/Azure/autorest.typescript/issues/1037. Originally, it was returning the correct values. But, with PR https://github.com/Azure/azure-sdk-for-js/pull/14366, this was changed to not return the body value.
With this PR, I am bringing it back.
@deyaaeldeen @xirzec Please review and approve.
@ramya-rao-a FYI...

@deyaaeldeen Within Azure Services, in V4x we have not been doing that. In V4x, autorest introduced head-as-boolean flag for the services who would like to continue the behavior. The resources SDK would like to continue the behavior. So, I believe we have to support them. Any thoughts?

I'm a little confused about the behavior here. It seems like the debate is, for a HEAD request, do we bother appending a body property whose value is always undefined to the response instead of not defining the body property, which when accessed would also be undefined?
What difference does it make if the property exists or not?

@xirzec it looks like there are services that send bodies with crucial info in their responses to HEAD requests and @sarangan12 is trying to accommodate that.

@xirzec should we have this at least behind a flag? e.g. allowNonstandardBehavior or something?

@xirzec should we have this at least behind a flag? e.g. allowNonstandardBehavior or something?

Well, here's the thing for me. This is core-client we're talking about, which doesn't model itself as something that returns actual HTTP responses, but instead returns "response objects" that are based on what swagger says the API returns (which may contain data pulled from the body, from headers, etc.)
It seems like in this case, all of our SDKs in different languages made a convention where we set this body: boolean property on the response object for HEAD requests based on the HTTP status of the response (2XX is true, else is false). It actually has nothing to do with the body (since there is no body), it's just a bad name. It could have been called anything (like success) and worked identically.
Instead they called it body for some reasons that are likely lost to the sands of time. If we were designing it from scratch, I'd say rename it to something better. But at this point, is it worth diverging behavior in JS only? I feel less strongly about this, since it is so niche (and again, not baked into our actual REST pipeline, only to ServiceClients that are generated from swagger.)
I'm not opposed to your idea, of having a flag in ServiceClientOptions that enables this behavior, but then we'd also have to add an AutoRest option to have the generate code modify the incoming options to default it to true for SDKs that rely on this.

@xirzec thanks for the detailed clarification! I see your point and I agree now. FWIW, autorest is getting a flag for this anyway here https://github.com/Azure/autorest.typescript/pull/1101.


Implement transactional Table Upload / Update / Delete Rows for Snowflake backend

Snowflake is a first Database we support that has dataDefinitionCausesTransactionCommit() return true, meaning that we cannot make a DDL statement be a part of a bigger transaction.
Our Upload / Update rows mechanisms were relying on using DDL statements in transactions and on transaction roll-back also deleting such tables created within a transaction. In Snowflake that does not work.
We need to implement another strategy for creating / updating tables that can work in such environment.
It probably needs to split the action into 3 phases:

create all needed tables,
run the actual UPDATE transaction,
and if the transaction failed and was rolled-back - delete the tables created in step (1).

This is still less robust than combining the whole operation in a single transaction - but we've got to deal with what we can use. However, because of that - we do not want the new strategy to replace the 'old' fully transactional one. Instead, we want to abstract away the common parts (creating something like DDL_Transaction_Strategy) and provide to the Upload_Table code two possible strategies. If the transactional one is available for a given database it should be preferred, falling back to the one described above. Ideally the main table update logic should be the same and only delegate to the DDL strategy.

Assigning high priority as without it Snowflake update_rows may behave in unexpected ways and leave garbage behind.
If we want to ship proper Snowflake support before this is implemented, we should probably disable update_rows for Snowflake, or at least attach a warning.


Polish docs polishing

I've updated descriptions of Polish, and added a detailed answer to a frequent question we get about skipping WebP.
I've also updated Mirage description, and steered the comparisons towards Polish/Images, since these are the solutions we prefer over Mirage.

@kornelski I left a few suggestions and approved.

@kornelski can I merge?

Yes


Switch lest operands; remove lest-assignment and irrelevant tests

#273

Didn't remove lest assignment from the grammar.


Add DOI

Add DOI
Description
Add DOI to README

Something is screwy with your git history since the .zenodo.json changes shouldn't be in this PR

I think it's because I branched off of the archive branch after merging it.


to resolve a html problem

https://github.com/FaisalUmair/udemy-downloader-gui/blob/f87e8f94c7f40cada7d74ce236864f26e6b8b160/assets/js/app.js#L290
should be
var src = response.asset.data.body;

AND
https://github.com/FaisalUmair/udemy-downloader-gui/blob/f87e8f94c7f40cada7d74ce236864f26e6b8b160/assets/js/app.js#L290
should be
url: `https://${subDomain}.udemy.com/api-2.0/users/me/subscribed-courses/${courseid}/lectures/${v.id}?fields[asset]=stream_urls,download_urls,captions,title,filename,data&fields[lecture]=asset,supplementary_assets,`

You are looking at a old version of Udeler source code. The current version is v1.4.1


Redownload Skill Tree Assets: Progressbar not showing correctly

When using the "Redownload Skill Tree Assets" function the progressbar is only shown for a small part of the whole duration instead of all of it, it just looks as if the app is frozen.

That whole progress window stuff does not run asynchronous at all. It will always freeze because the asset loading blocks the UI thread, which may sometimes get enough time to actually update the progress window.
Replacing our progress window by MahApps' ProgressDialog and doing it properly async is actually already on my todo list.

Okay, great :)
I leave this open in the meantime just for reference.


[Fortran] Getters for meta-infos

This adds getter subroutines for meta-infos to the Fortran interface (fs_get_serializer_metainfo, fs_get_field_metainfo and fs_get_savepoint_metainfo) and the corresponding functions in the FortranWrapper.
It also adds add-subroutines for INTEGER(KIND=C_LONG) to the Fortran interface.
And I have changed the signature
of
serialbox-c/Savepoint::serialboxSavepointGetMetainfo(serialboxSavepoint_t* savepoint)
to
serialbox-c/Savepoint::serialboxSavepointGetMetainfo(const serialboxSavepoint_t* savepoint)
and of
serialboxSerializerGetGlobalMetainfo(serialboxSerializer_t* serializer)
to
serialboxSerializerGetGlobalMetainfo(const serialboxSerializer_t* serializer).
I have created tests for all new functions and subroutines.
This PR is based on the branch from PR  #139, so it contains all these changes too.

Hi there, this is jenkins continuous integration...
Do you want me to verify this patch?

It seems, that my IDE has a problem with tabs and spaces. I will fix this.
The second line for the ...String functions is copied from the Add functions. I was wondering, too. I guess, some line length limit was once the reason for this. I can change this. No problem.

I forgot to say: I have left out the getters for strings in the Fortran interface because I have no idea how to implement it right.

@chovyy Ok, no worries. Can you just put a comment with ! TODO  and the getters that are not implemented?

Done.

Hi, I have changed the (Fortran) tests for the meta-info in that way that the serializer is destroyed and recreated before calling the meta-info getters and it turned out that the meta-infos are not actually written to the file. Does anyone has an explanation for that?

The meta-data is buffered internally and only flushed to disk before you serialize a field. However, the serializer has a method updateMetaData which forces writing the meta-data to disk. You may want to wrap this function in the C interface.

Wouldn't it make sense to call that method in the Serializer's destructor?

Okay, I'm trying to understand it.
The protocol of C++ (and C?) interface is: register field, add meta-info, write field. Correct? So, as long as you follow this protocol, you don't have a problem.
But in the Fortran interface registration is embedded in the write routines. That means, you cannot add meta-data before writing, because then the field doesn't yet exist. But if you add meta-data after writing, the last written field will always come without meta-data. That means, for Fortran we definitely have to make an extra call the update method.
So, do you think, we should call that update method only from the Fortran destroy routine or generally in the Serializer's destructor to be more flexible?

Wouldn't it make sense to call that method in the Serializer's destructor?

updateMetaData can throw an exception which would result in termination of the app, see here. You could, however, add this functionality to the C interface and call it in serialboxSerializerDestroy.

The protocol of the C++ (and C?) interface is: register field, add meta-info, write field. Correct? So, as long as you follow this protocol, you don't have a problem.

Correct.

So, do you think, we should call that update method only from the Fortran destroy routine or generally in the Serializer's destructor to be more flexible?

serialboxSerializerDestroy might be the place to do this.

updateMetaData can throw an exception which would result in termination of the app, see here.
Okay, sounds convincing.

You could, however, add this functionality to the C interface and call it in serialboxSerializerDestroy.
Alright, that means we'll keep the C++ protocol as it is, but will have a final update in the C and Fortran interface.


some question for npm run build

I executed the code on two machines
git clone https://github.com/nuxt/nuxtjs.org.git
cd nuxtjs.org
yarn install
npm run build

I checked this folder .nuxt/dist/, I found that some of the files are the same, some files are different，the same file .nuxt/dist/app.xxx.js , the different file .nuxt/dist/common.xxx.js。
The question is why does the same code differ in the execution of different machines

Do a comparison of the package-lock.json files

It’s not work.  Do you try it?

What does not work?
I meant that you need to look for differences in the package-lock.json files. Do you have something that does not work? This is problem? You did not specify any details. I'm sure the files differ not because of nuxt.


Check avatar can generate thumbs correctly before adding avatar to db

When an avatar is uploaded, maybe django avatar should first try get the avatar to make sure it uploaded correctly and only then write it to the db.

Hey 👋
I think this is related to #153
But I just stepped through the code and it seems like pngs with alpha pass this condition
https://github.com/grantmcconnaughey/django-avatar/blob/0d761fdd88710942217a58c4487e237f12916b53/avatar/models.py#L171-L172
The image mode isn't converted to RGB (maybe for valid reasons) and when we try save the avatar, if you go all the way through, pillow raises the  cannot write mode %s as JPEG error and then this bubbles up as a silent error over here
https://github.com/grantmcconnaughey/django-avatar/blob/0d761fdd88710942217a58c4487e237f12916b53/avatar/models.py#L179-L181
So I guess this can be pretty easily fixed by changing the default thumb storage to PNG. But I think maybe we should consider changing two things:
(1) When PNGs have alpha and the thumb save format is JPG we should convert the image mode to RGB. This would stop the IOError
(2) Change the flow of the package a little. Instead of User uploads file >Save file > Generate Thumbs maybe we should do
User uploads file
Save file
Try generate thumbs
    if thumbs aren't generated
        raise an error on the upload form
   else
      add avatar to db

That way if another error like this happens, the avatar won't be added to the db, the user will see an error and broken links won't be displayed instead of their avatar.
I would be happy to try make a PR that does this, if this makes sense?

This has been fixed in version 6.0.0.


async_setup_platforms

The problem
Detected integration that called async_setup_platforms instead of awaiting async_forward_entry_setups; this will fail in version 2023.3. Please report issue to the custom integration author for nest_protect using this method at custom_components/nest_protect/init.py, line 126: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
What version of this integration (ha-nest-protect) has the issue?
1e62797
What version of Home Assistant Core has the issue?
2023.2.1
Device / Model
Topaz-2.33
Diagnostics information
No response
Home Assistant log
Logs
```
Copy/paste any log here, between the starting and ending backticks (`)
```

Additional information
No response

Thanks! Already fixed in main branch, will be released soon.


Does not work with wiredep

Typographic (specifically the scss version) is not automatically injected by wiredep like your other project, lost.
I suspect this is an issue with the bower.json configuration, but I've not had a chance to look at it in depth. It's a minor annoyance but should probably be fixed!

What do you mean it's not automatically injected by wiredep?

Hey Cory,
Here's the setup I'm using:
I am using the gulp-generator-webapp yeoman generator, which will automatically inject bower dependencies into your project using wiredep.
When running the following command for your grid project, for example, it will automatically import the scss file into main.scss: 'bower install --save lost'.
Doing the same command for typographic does not work, it is installed by bower, but is not detected by wiredep. Usually this is caused by a malformed bower.json (usually a missing main file declaration).
Cheers.

Should be fixed now. Let me know. Thanks for filing an issue. :)


Coverity issues for target-utils/src

:jenkins

Shifting a 32-bit value by 32 bits or more is undefined in C++ so changing <=32 to <32 which will exclude 32 in shifting operation


cleanup(storage): remove Curl* implementations

We no longer need the implementation of storage::internal::CurlHandle, *::CurlRequest and *::CurlRequestBuilder. The classes are only needed as the default template parameters of
storage::oauth2::Credentials*.
The remaining types and functions in storage/internal/curl/* were simple wrappers around types and functions in google/cloud/internal/*. Using them directly reduces duplication.
Fixes #9659

This change is

More false positives recorded for posterity:
These are symbols from libcurl:
Step #3: handle.h
Step #3: curl_easy_escape ( CURL* p1, char const* p2, int p3 )
Step #3: curl_easy_perform ( CURL* p1 )
Step #3: curl_easy_setopt ( CURL* p1, CURLoption p2, ... )

These are in the internal namespace:
Step #3: request.h
Step #3: namespace google::cloud::storage::v2_17::internal
Step #3: CurlRequestOnHeaderData ( char* contents, size_t size, size_t nitems, void*
Step #3: userdata )
Step #3: CurlRequestOnWriteData ( char* ptr, size_t size, size_t nmemb, void* userdata )


Nginx + PHP via single Dockerfile?

Haven't been able to make use of your version of Nginx + PHP via FPM-PHP because my deployment requires a dockerfile, not a docker-compose.
I've been tinkering with how to get the Nginx + PHP working inside a single dockerfile, but having no real luck. I'm usually pretty good at this stuff but not today.
Using the example from docker-compose and fairly common Docker syntax, this is what I have so far.
FROM nginx:1.17-alpine

COPY conf.d/ /etc/nginx/conf.d/
COPY nginx.conf /etc/nginx/nginx.conf

FROM joseluisq/php-fpm

USER root
COPY backend/ /var/www/html
RUN chown -R nobody.nobody /var/www/html

ENV ENV_SUBSTITUTION_ENABLE=true
ENV PHP_MEMORY_LIMIT=512M
ENV PHP_FPM_LISTEN=9090
ENV PHP_SESSION_GC_MAXLIFETIME=7200
ENV NODE_ENV production

USER nobody

EXPOSE 80
CMD ["php-fpm"]

When building, then running I get the following error:
/envsubst.sh: line 14: can't create /usr/local/etc/php-fpm.conf: Permission denied
If I remove "USER nobody", then I can clear this permission denied problem, but now get an Empty Response error from the webserver. I believe the port is 80 for Nginx.
I'm now trying to get "FROM joseluisq/php-fpm:8.1" working instead... but still getting empty responses. Perhaps my /var/www/html is bad location.
Do you know of a better way to accomplish what I am trying to do here?

Just to remark that this image is obviously thought to integrate with Nginx/Apache in a multi-service context without including those web servers intentionally.

Do you know of a better way to accomplish what I am trying to do here?

I never tried both in the same image but here are some options that come to my mind:

Extend whatever joseluisq/php-fpm version you would like and try to build Nginx on your own after. For example, you can guide you from Nginx official repo.
Or Extend whatever joseluisq/php-fpm version you would like and then use the Alpine Nignx package with this Docker image.

Thank you for the quick reply.
I spent all morning tryin to come up with a solution to no avail, so I ended up putting together similar to my php7 repo while looking at numerous projects including yours for inspiration.
I've just now released this at https://github.com/PremoWeb/alpine-nginx-php8.
The reason I want to use your version is because I build a lot of projects that use older versions of PHP for legacy applications and am slowly bringing them to PHP 8. Using your project makes sense for me, but this one issue is a deal breaker for me.
Based on your answer, I'll keep investigating how this could adopted and if so, I'll update this issue. For now, I will close it.
Again, thank you.


ethereum:xxx protocol only works on osx

the custom protocol we have only works on osx right now. needs to support windows/linux via the singleton pattern:
electron docs:
https://electronjs.org/docs/api/app#apprequestsingleinstancelock

fixed in #811


remove_all_devices raises a DBusException

A DBusException can be propagated out of remove_all_devices.  I would expect that the user would never see DBus exceptions as are platform specific...
self._manager.remove_all_devices()
File "/usr/local/lib/python3.6/dist-packages/gatt/gatt_linux.py", line 221, in remove_all_devices
self._adapter.RemoveDevice(path)
File "/usr/lib/python3/dist-packages/dbus/proxies.py", line 70, in call
return self._proxy_method(*args, **keywords)
File "/usr/lib/python3/dist-packages/dbus/proxies.py", line 145, in call
**keywords)
File "/usr/lib/python3/dist-packages/dbus/connection.py", line 651, in call_blocking
message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: Method "RemoveDevice" with signature "s" on interface "org.bluez.Adapter1" doesn't exist

This error can happen when your bluez library is too old.
Which version are you using?

I am using V5.48.  My thoughts on this were that a DBusException should never propagate as far as user code.  Should be caught inside the library.

Exactly, user code should not receive such exceptions - with that thought in mind I wrote this library. I am surprised you're getting this error, that's why I was asking for your bluez version.
I wrote this library when bluez 4.43 was the latest version but I can only hardly imagine that they removed the "RemoveDevice" from the bluez API.

Over the past few weeks, I have received a heap of exceptions due to missing attributes.  Mostly using the Adafruit BluefruitLE library.  That was the reason I switched to this library, which has been 100 time more robust!   RemoveDevice is there normally and works fine, just at that point in time it decided not to be!


Add (scheme complex)

I added the (scheme complex) library.

Hi, thanks for the pull request. I was on holiday and missed the notification earlier.


Buildings

This is an attempt to get the new building UI ship-shape.
This pull request replaces the old Rapid button functionality (which simply toggled the roads layer on and off) with a new dialog.
The dialog has three checkboxes- one for 'turn everything off/on' just like our old rapid button, and one each for 'buildings' and 'roads'.
The Shift+R hotkey still works while the dialog is open (though that took some hackery to get working- see below) and the building layer updates underneath the dialog while it is open as well.

Some guide comments for reviewers: there are four commits. Here's how they break down:
1st commit: The new UI dialog but with no functionality wiring in. Focus on the css and composition of the code/styling. :)
2nd commit: mostly just renaming the 'fb-roads' layer to 'ai-features' layer. This is so new features can be added without the layer lying about what it contains. :)
3rd commit: Functionality wiring for the dialog.
4th commit: getting the hotkey (Shift+R) to interact with the dialog correctly when open, closed, when some checkboxes are off, etc. etc.

We may do updates to this PR based on feedback from our demo, so I think we can hold off the reviews until the next round of updates is done.

Update bump! Need a review on this before we can ship.


bib: detect missing qemu-user early

This commit checks early if cross architecture building support via qemu-user-static (or similar tooling) is missing and errors in a more user friendly way.
[draft as it needs some proper tests still]

Fwiw, I did not include an automatic test but running this on a system without qemu-user installed gives an error much earlier now:
$ sudo pytest   -s -vv  './test/test_build.py::test_image_boots[quay.io/centos-bootc/centos-bootc:stream9,raw,arm64]'
...
podman run --rm --privileged --security-opt label=type:unconfined_t -v /var/lib/containers/storage:/var/lib/containers/storage -v /var/tmp/bib-tests/shared0/50e14c390a97750d/config.json:/config.json:ro -v /var/tmp/bib-tests/shared0/50e14c390a97750d:/output -v /var/tmp/osbuild-test-store:/store bootc-image-builder-test quay.io/centos-bootc/centos-bootc:stream9 --type=qcow2 --type=raw --type=vmdk --target-arch arm64 --local=false
Error: cannot validate the setup: cannot run binary in target arch: cannot run canary binary for "arm64", do you have 'qemu-user-static' installed?
fork/exec /usr/bin/bib-canary-arm64: exec format error
2024/04/24 09:27:42 error: cannot validate the setup: cannot run binary in target arch: cannot run canary binary for "arm64", do you have 'qemu-user-static' installed?
fork/exec /usr/bin/bib-canary-arm64: exec format error

I looked into an integration test but it's tricky:
binfmt_misc is not (yet) namespaced, at least I'm pretty sure not on the kernels we have in the runners which means that it really alters global state and potentially breaks other containers that can run cross platform tests.


MyLocation Click

VERSIONS

Xamarin.Forms.GoogleMaps - master
.net Maui
Android 12.

PLATFORMS

[ x] Android
[] iOS
[ ] UWP

ACTUAL BEHAVIOR
When clicking on the sample basic map clicking on my location I get
Java.Lang.SecurityException: 'my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION'

HOW TO REPRODUCE
run sample app on Android 12.

You should implement "Runtime Permission" for location.

Request app permissions  |  Android Developers

Latest sample apps implements here:
https://github.com/amay077/Xamarin.Forms.GoogleMaps/blob/7012ef21c483967a23c12780eac22de54170df8b/XFGoogleMapSample/XFGoogleMapSample/BasicMapPage.xaml.cs#L32-L41


Collect credentials from the end user when creating a new survey

Type of change

[ ] New sample
[x] New feature
[ ] Bug fix
[x] Documentation

Summary
This PR changes the credential_source from DEVELOPER to END_USER to perform actions – such as creating a new spreadsheet – as the individual invoking the "Create a survey" workflow instead of from the shared developer token.
This removes the need to filter triggers by a list of approved surveyors, which makes this sample a bit more simple!
Todo
Before reviews or merging, the following tasks remain:

[x] Update the demo videos in the README.md

Requirements

[x] I’ve checked my submission against the Samples Checklist to ensure it complies with all standards
[x] I have ensured the changes I am contributing align with existing patterns and have tested and linted my code
[x] I've read and agree to the Code of Conduct

[x] Update the demo videos in the README.md

Quick note: Another change will soon follow that updates the survey/response flow – planning to add an ephemeral message after a response is submitted! Updating the first demo is left for this following PR.


Wrong coordinates for USA

The data set of " https://covidtracking.com/api/states" has wrong coordinates.
reproduce:
go to: https://corona-api-dashboard.netlify.com/
select "all" for source

LOL nice. Thanks for the report, we'll have to track down why that's happening...

Also, your tracker looks AWESOME, but you need to look at the aggregate property and ignore things that are aggregated; i.e. CA, USA will have aggregate: county, so you shouldn't draw it because you're going to draw its counties individually. Same for USA, really.

Also, your tracker looks AWESOME, but you need to look at the aggregate property and ignore things that are aggregated; i.e. CA, USA will have aggregate: county, so you shouldn't draw it because you're going to draw its counties individually. Same for USA, really.

Ah, thx for the hint :)
@ndom91

I might not understand this properly, but this might have nothing to do with us. We are covidatlas and covidtracking is an unrelated project on GitHub.

Hello @martiL, it looks like this issue has been resolved.  Can you let me know?
Also, as hyperknot asked, you mentioned "The data set of " https://covidtracking.com/api/states" has wrong coordinates." - but I believe you meant us, right?  Not covid tracking.
We have a list of consumers, can I add your site to that list?
Cheers, great site!  jz

@jzohrab You can add my site to your list :-) :
https://www.corona-api.org/
https://app.corona-api.org/
Jep, I meant your data set. But the original data source is "https://covidtracking.com/api/states"

I believe this issue is now resolved.  @martiL , LMK if things look good on your side.

@jzohrab LGTM :-)

Cheers, thank you!  Closing.


input data checks and addition of many new functions, test_quaternions updated

Input data check in all functions
Definition of new functions for data check, new interpolations functions, quaternion from matrix, rotation path interpolating quaternions, inverse, exp, ln, power, and more.
test_quaternions were updated accordingly.

I use some of the remarked formatings. Recently I adopted the formatting of
starting lines with ? and : after recognizing that it makes my codes more
readable especially when the expressions are longer. Maybe I get so used to
it that I use it even for shorter expressions. Anyway, as a general rule I
try to keep the lines shorter so the logic is clearer and  easy grasped. I
can adapt myself to the current BOSL2 style although I think the formats d
and e are much harder to read.
Em sáb., 18 de jul. de 2020 às 03:47, Revar Desmera <
<EMAIL_ADDRESS>escreveu:

@revarbat commented on this pull request.
In quaternions.scad
https://github.com/revarbat/BOSL2/pull/205#discussion_r456739365:

// Arguments:
//   ax = Vector of axis of rotation.
//   ang = Number of degrees to rotate around the axis counter-clockwise, when facing the origin.
-function Quat(ax=[0,0,1], ang=0) = _Quat(ax/norm(ax), sin(ang/2), cos(ang/2));
+function Quat(ax=[0,0,1], ang=0) =

assert( is_vector(ax,3) && is_num(0*ang), "Invalid input")
let( n = norm(ax) )
approx(n,0)
? _Quat([0,0,0], sin(ang/2), cos(ang/2))
: _Quat(ax/n, sin(ang/2), cos(ang/2));

Very minor formatting quibble for future reference... In most the library,
the preferred multi-line formatting for ternary operators has the ? at
the end of the test expression, on the same line, and the : is usually at
the end of the truth result expression. The following are common formatting
idioms for ternary ops, but are not enforced:
a = test(x)? short_result_expr1 : short_result_expr2;
b = test(x)? somewhat_longer_result_expr1 :
somewhat_longer_result_expr2;
c = test1(x)? short_result_expr1 :
test2(x)? short_result_expr2 :
test3(x)? short_result_expr3 :
default_result_expr;
d = test(x)? let(
// complicated multi-line calculations here
) result1 : let(
// complicated multi-line calculations here
) result2;
e = test(x)? (
// more complicated subexpressions here, possibly with multiple let() blocks.
result1
) : (
// more complicated subexpressions here, possibly with multiple let() blocks.
result2
);
Having said all that, I'll still accept this submitted code formatting.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/revarbat/BOSL2/pull/205#pullrequestreview-451025148,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEYKSLLQWZQR5HRLSRIGIFLR4EEKRANCNFSM4O6YXF3Q
.

//   a = Number of degrees to rotate around the axis counter-clockwise, when facing the origin.
-function QuatX(a=0) = Quat([1,0,0],a);
+function QuatX(a=0) =

assert( is_num(0*a), "Invalid angle" )

Is the is_num(0*a) instead of the equivalent is_finite(a) for speed?

Not exactly. It was not clear to me that is_finite had been defined in the
library. It is clearer to use it although in some places in this file I
intentionally repeat short expressions defined by other file functions to
avoid extra unnecessary checks.

I will do changes in quaternions.scad agreeing with this discussion. Anything else to add or change?

If you want to implement is_zero() and/or nonzero() in common.scad, or enhance is_vector() to support a nonzero=true arg in vectors.scad, then go for it.  Otherwise I'll end up doing that after merging your completed PR.

If you want to implement is_zero() and/or nonzero() in common.scad, or enhance is_vector() to support a nonzero=true arg in vectors.scad, then go for it. Otherwise I'll end up doing that after merging your completed PR.

@adrianVmariano is right, the recursion in is_zero is expensive for vectors. A nonzero parameter in is_vector would be nice for input data checks. For scalar tests, we still need to use approx. When we already know that the input v is a vector, calling is_vector(v,nonzero=true) will require a negligible extra work. I will update common.scad.
Regarding quaternions.scad, will you change it according to our discussion here? I had started to do it.
The acos expression in Q_angle would be better changed to an atan2 expression:
    is_undef(q2) ? 2 * atan2(n1,_Qreal(q1))
    let( q1 = q1/norm(q1),
         q2 = q2/norm(q2) )
    2 * atan2(norm(q1 - q2), norm(q1 + q2));

which exempts it from calling constrain.

What about a positive=true option to is_vector?   I think this is a test I often need.   Also would it make sense to have dual purpose parameters?  So zero=true requires that all the entries are zero, zero=false requires that all entries are nonzero.  And zero=undef imposes no constraint?

You need to make the quaternions.scad changes, commit and push them, then I can approve and merge.

The atan2()  change is a good idea.  I kind of like @adrianVmariano's zero=true/false/undef idea.  Would positive=false mean <=0, and positive=true mean >0?  Would

The atan2()  change is a good idea.
I kind of like @adrianVmariano's zero=true/false/undef idea.  Would positive=false mean <=0, and positive=true mean >0?  That would imply the need for negative=true/false/undef as well.

Yes, I think that makes sense, that positive=false means all entries <=0 and then we have negative as well, which would avoid the need for the more clumsy nonnegative.
So would the tests for zero use eps but the tests for positive/negative us comparisons to exact zero?
Do we need to add this check to anything other than vectors?   Is there (despite my doubt) utility in writing the slower recursive general checker, check_all(list, poistive=true) that would follow the same syntax?

I usually prefer many specific functions than a few with several options that I have to remember the parameter names and its effects. Remember that we already have the option of specifying (or not) the length of a vector, which is invaluable. A nonzero option would be a nice and useful addition. Anything else should have other functions to check. For instance, a function vector_sign(v) returning a string or scalar for positive, negative, non negative, none, etc.

I think that the issue of having to remember parameter names is not really a valid critique of the proposed approach.  You always have to remember stuff.  It's just a question of what stuff you have to remember.  If you have a dozen functions for checking vector characteristics then you have to remember the names of those functions.  (And that's actually harder to look up in the manual if you can't remember them.)   In the proposal of a vector_sign function you have to remember the name of the function and what the possible return values are to make the comparison.  (That is, instead of is_vector(v,positive=true) it's is_vector(v) && vector_sign(v)=='positive'.  Seems to me the memory burden is higher in this second case, actually.
It seems to me that the real question is making a design choice and then trying to make things generally consistent.   I think that from a design perspective, having a vector_sign function that returns a string is less elegant and less consistent in general with how we have done things.   It's also more difficult to code efficiently, I think.  And actually now that I think about it's actually kind of troublesome to use.  If we have vector_sign and it returns one of ['positive','nonnegative','zero','negative','nonpositive'] then I have a problem because positive is also nonnegative.  So do I return a list of properties, like ['positive','nonnegative']?  Or do I return the strictest one, just 'postitive'?   Then you have to test for postitive and nonnegative to catch all the nonnegative cases, so that doesn't make sense.  So the only way it makes sense it to return a property list.  This is ineffficient because it means I have to compute properties I didn't care about, and then I have to use in_list to check the result.  And in_list('nonnegative',vector_sign(v)) to me seems to be a lot more memory burden to remember than other ideas.  It's also harder to read.
I see the following reasonable paths:  We add this functionality to is_vector as Revar suggested.  We could add similar functionality to other tests as well.   Instead of (or in addition) we write a single point checker, so not vector_sign but check_sign or something that takes a similar set of args, so check_sign(v,positive=true), or we write a collection of checker functions, so is_positive(v), is_negative(v), is_nonnegative(v), etc.

I kind of like the idea of is_vector() having positive= or negative=, but in truth, the deciding issue is if we can still have a relatively fast check with those features.  If not, then the check_sign() idea seems indicated.

Isn't the overhead for adding positive= and negative= simply the time to do two checks for undef?  The condition would be <current is_vector stuff> && (is_undef(positive) || ....) && (is_undef(negative) || ....)

Latest commit is looking good, @RonaldoCMP.  Is this the final code you want to commit?

Actually, what exactly does it mean for a vector to be positive?  That all components are positive?

I think the zero/nonzero/positive/negative/etc checks ideas should be moved to it's own issue at this point.

Latest commit is looking good, @RonaldoCMP. Is this the final code you want to commit?

It is fine for me but I was not able Pull a Request as I did last time.

Your commits were automatically added to this PR, since you added them to the same git branch (master).  Once I merge the PR, you will be able to make another PR from your master branch.  And I'm merging now.


Thrift zero-copy optimization for TElasticFramedTransport

Previously, these methods of TElasticFramedTransport are not override implemented.
TBinaryProtocol will allocate new byte array and copy from frame buffer. After this pr, TBinaryProtocol can wrap the byte buffer with the reference of frame buffer segment, which eliminates the cost of memory allocation and memory copying.

We use benchmark to evaluate this optimization (Insert Tablet with text value type):

Before

After

@OneSizeFitsQuorum PTAL


STU3 issues with /metadata

http://fhirtest.uhn.ca/baseDstu3/metadata seems to have a few issues:

It still delivers "resourceType": "Conformance", but should deliver "CapabilityStatement"
searchParam "_id" is listed twice (with slightly different documentation)
searchParam "_id" is given as type "string", but according to http://hl7.org/fhir/2016Sep/searchparameter-registry.html it should by type "token"

Thanks for reporting! Will check in a fix shortly


Refactor CommittableKafkaWriter to use non-blocking request handling

Replace clusterThreadPool usage by using CompletableFutures to implement non-blocking kafka request handling

Could you please add a detail description of what this PR is about and how it improves singer?

Could you also include a version update?


Add Papertrail to Logging

As a hosted log management solution, please add Papertrail to the Logging section.

+1

Hi @leecalcote please find in 0.9.4 https://github.com/cncf/landscape/blob/master/landscape/CloudNativeLandscape_v0.9.4.jpg


[1.20.1] Accessing certain bones during render break the UV mapping

Easy to reproduce, simply fetching a bone in any render method will break UV mappings and causes all sorts of whacky behavior.

@Override
    public void actuallyRender(PoseStack stack, EnchantingApparatusTile tile, BakedGeoModel model, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
            CoreGeoBone frame = model.getBone("frame_all").orElse(null);
super.....
}

Commenting out that line will fix it back to proper UV mappings.
This happens in render recursively, preRender, actually render, and more.

Note: this has a different behavior on which bone you fetch. It seems like the higher up in the heirarchy, the more breaking? Sometimes if I pick a bone that has children, it just simply doesnt render other parts of the model.

There's definitely more to this than is being shown
getBone literally just does a loop through a list and checks for string matches
There's absolutely nothing involved in it that would change anything at all related to anything, let alone breaking UVs
Show the rest of your code

Oops sorry, got this one mixed up.
For context, in geckolib 3, we used renderRecursively to translate the posestack to the bone to render an itemstack at the location.
In geckolib 4, rendering an itemstack in render recursively will break the mappings/model depending on which bone you pick. In actuallyRender, it just breaks using the itemrenderer at all.
    @Override
    public void actuallyRender(PoseStack stack, EnchantingApparatusTile tile, BakedGeoModel model, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
         double x = tile.getBlockPos().getX();
         double y = tile.getBlockPos().getY();
         double z = tile.getBlockPos().getZ();
         if (tile.renderEntity == null || !ItemStack.matches(tile.renderEntity.getItem(), tile.getStack())) {
             tile.renderEntity = new ItemEntity(tile.getLevel(), x, y, z, tile.getStack());
         }
         stack.pushPose();
         ItemStack itemstack = tile.renderEntity.getItem();
         Minecraft.getInstance().getItemRenderer().renderStatic(itemstack, ItemDisplayContext.GROUND, packedLight, OverlayTexture.NO_OVERLAY, stack, bufferSource, tile.getLevel(), (int) tile.getBlockPos().asLong());
         stack.popPose();
        super.actuallyRender(stack, tile, model, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
    }

What breaks is different on which bone you use in renderRecursively, but you are right, the bone has nothing to do with this particular error - it was removing the render entirely when I marked it as null for testing 🙈

This is an example using render recursively, which worked in geckolib 3. This method is unfortunately the only one that correctly translates items to the exact position of the bone.
public class StarbuncleRenderer extends GeoEntityRenderer<Starbuncle> {

    public StarbuncleRenderer(EntityRendererProvider.Context manager) {
        super(manager, new StarbuncleModel());
    }

    @Override
    public void renderFinal(PoseStack poseStack, Starbuncle animatable, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
        super.renderFinal(poseStack, animatable, model, bufferSource, buffer, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
    }

    @Override
    public void renderRecursively(PoseStack stack, Starbuncle animatable, GeoBone bone, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
        if (bone.getName().equals("item")) {
            stack.pushPose();
            RenderUtils.translateToPivotPoint(stack, bone);
            stack.translate(0, -0.10, 0);
            stack.scale(0.75f, 0.75f, 0.75f);
            ItemStack itemstack = animatable.getHeldStack();
            if (animatable.dynamicBehavior != null) {
                itemstack = animatable.dynamicBehavior.getStackForRender();
            }
            if(!itemstack.isEmpty()) {
                Minecraft.getInstance().getItemRenderer().renderStatic(itemstack, ItemDisplayContext.GROUND, packedLight, OverlayTexture.NO_OVERLAY, stack, bufferSource, animatable.level, (int) animatable.getOnPos().asLong());
            }
            stack.popPose();
        }

        if (animatable.getCosmeticItem().getItem() instanceof ICosmeticItem cosmetic && cosmetic.getBone().equals(bone.getName())) {
            CosmeticRenderUtil.renderCosmetic(bone, stack, bufferSource, animatable, packedLight);
        }
        super.renderRecursively(stack, animatable, bone, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
    }

    @Override
    public ResourceLocation getTextureLocation(Starbuncle entity) {
        return entity.getTexture(entity);
    }

    @Override
    public RenderType getRenderType(Starbuncle animatable, ResourceLocation texture, @org.jetbrains.annotations.Nullable MultiBufferSource bufferSource, float partialTick) {
        return RenderType.entityCutoutNoCull(texture);
    }
}

public class StarbuncleModel extends GeoModel<Starbuncle> {

    @Override
    public void setCustomAnimations(Starbuncle entity, long uniqueID, @Nullable AnimationState customPredicate) {
        super.setCustomAnimations(entity, uniqueID, customPredicate);
        if (entity.partyCarby)
            return;
        if (customPredicate == null)
            return;
        this.getBone("basket").get().setHidden(!entity.isTamed());

        CoreGeoBone head = this.getAnimationProcessor().getBone("head");
        EntityModelData extraData = (EntityModelData) customPredicate.getExtraData().get(DataTickets.ENTITY_MODEL_DATA);
        head.setRotX(extraData.headPitch() * 0.017453292F);
        head.setRotY(extraData.netHeadYaw() * 0.017453292F);
    }

    @Override
    public ResourceLocation getModelResource(Starbuncle carbuncle) {
        return new ResourceLocation(ArsNouveau.MODID, "geo/starbuncle.geo.json");
    }

    @Override
    public ResourceLocation getTextureResource(Starbuncle carbuncle) {
        return carbuncle.getTexture(carbuncle);
    }

    @Override
    public ResourceLocation getAnimationResource(Starbuncle carbuncle) {
        return new ResourceLocation(ArsNouveau.MODID, "animations/starbuncle_animations.json");
    }
}

You're telling the game to render an ItemStack
Which has the game bind the items atlas to the renderbuffer
You're then not rebinding the entity texture to the renderbuffer, so it's then rendering as if it's using your item's texture
You need to re-bind your buffer afterwards if you're changing it

Ah got it, making a new buffer fixes it, rebinding texture does not. Thanks!

My mistake - poor wording ;)


Media from Pandora is no longer paused when switching tabs

After updating to Firefox 93.0, the extension no longer automatically pauses Pandora Radio when viewing media in other tabs.
I have unsuccessfully attempted to remedy this issue by:

restarting Firefox
logging out of Pandora and clearing its cache
creating a new Firefox profile
updating to Firefox Nightly (95.x)

Thanks for the report, I will look into this now.

Unable to verify :(
Permission: https://.pandora.com/ https://.youtube.com/
Firefox Version: 93.0
Test URL: https://www.pandora.com/station/play/97785068763745031
Paused on going to
https://www.youtube.com/watch?v=DLzxrzFCyOs

To confirm both .playbackRate = 0; and .pause(); dont pause it.
And when you do document.getElementsByTagName("audio") its the only audio element on the page?
It maybe that its live and does not support pausing 2.7 also has a tab mute feature in the options page that may also work,
And waste bandwidth.

Neither of them paused the audio.
Running document.getElementsByTagName("audio") by itself returns
← HTMLCollection { 0: audio , length: 1 }

The audio can be paused with other methods, though.
I use the Pandora Media Session extension to enable the use of my keyboard's media keys (because Pandora does not do this natively on Firefox).  It simulates click actions to play/pause audio and skip tracks.
(I made sure this extension was not enabled when testing the functions above.)

It resumes to the same time.
I'm perfectly content with the auto tab mute feature, though.  I don't think we need to make your extension more complicated just to support one site that not everyone uses.  The extension works fine for pretty much any other website I've tried it on.
Thank you for your help.

It should be supported its strange because if the .playbackRate is 0 and stays 0 the audio should never play.
If .currentTime is changing with a playbackRate of 0 and since this after a browser update it may be a bug in firefox.
By the error it seems that the normal .pause() has been overridden.

Im aware the current tab mute feature is broken i will try to fix it.

Per https://github.com/NDevTK/AutoPause/issues/14#issuecomment-942701915 as the tab mute feature is on the webstore and I dont have a access to Pandora... I will close this issue now please reopen if still its wanted.

Currently theirs a feature to mark a tab as background audio resuming I think I might add a mute only option so that live media works correctly.

Sorry for the late response, but I've actually been able to use AutoPause with Pandora for a few weeks ago.  I'm not sure if it was a Firefox update or the latest version of AutoPause that fixed the issue, but the issue isn't there anymore.

No idea what fixed it but glad its working now :)
Closing as unreproducible.


Add Haskeleton

Fixes https://github.com/tfausak/haskeleton/issues/36.

This is outstanding.

Thanks!


The num_subcircuits argument to cutting.cutqc.find_wire_cuts should not be None

The type hint for the argument in the title should not include None. These values should be provided.

Closing all CutQC issues now that it has been removed.


Attachment - Download files

Attachment GET is yet implemented. Add the feature to download media files associated with attachment registries.

Done in #26


Passing route parameters to the server

Hi Guys,
I am currently trying to get Durandal to pass the parameters to the server (ASP.NET MVC), but not having any luck so far. For more info, see:
http://stackoverflow.com/questions/31757317/durandal-not-passing-parameters-to-mvc-controller-action
2 things:

I am hoping someone can help me with this issue - either by providing me with the steps to do this or by adding support for this.
More importantly, I am hoping Aurelia does or will have an elegant solution to this problem, since ultimately I would like to use Aurelia in future. If this is not yet something supported in Aurelia, please do make a note of this situation.

Would it be better if I added number 2 to the Aurelia issues list (possibly with a link back to this issue)?

This issue was solved years ago. For anyone looking for the answer, see: https://stackoverflow.com/questions/31757317/durandal-not-passing-parameters-to-mvc-controller-action


Failed to build: error: ‘uint64_t’ was not declared in this scope

Not really sure the culprit, felt obligated to report the build failure. happy to help sort it out if i can, i'm sure it's just something janky on my end
# mix.exs
  defp deps do
    [
      {:hnswlib, github: "elixir-nx/hnswlib"},
    ]
  end

==> hnswlib
Error happened while installing hnswlib from precompiled binary: "missing checksum.exs file".

Attempting to compile hnswlib from source...
CMake Warning:
  Ignoring empty string ("") provided on the command line.

Not searching for unused variables given on the command line.

-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using PRIV_DIR: /home/jadams/tmp/hnswlib_playground/foo/_build/dev/lib/hnswlib/priv
-- Using ERTS_INCLUDE_DIR: /home/jadams/.asdf/installs/erlang/26.2.2/erts-14.2.2/include
-- CMAKE_TOOLCHAIN_FILE:
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/jadams/tmp/hnswlib_playground/foo/_build/dev/lib/hnswlib/cmake_hnswlib
make[1]: Entering directory '/home/jadams/tmp/hnswlib_playground/foo/_build/dev/lib/hnswlib/cmake_hnswlib'
make[1]: warning: -j1 forced in submake: resetting jobserver mode.
[ 33%] Building CXX object CMakeFiles/hnswlib_nif.dir/c_src/nif_utils.cpp.o
In file included from /home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:5:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp: In function ‘int erlang::nif::make_u64_list_from_c_array(ErlNifEnv*, size_t, T*, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:80:43: error: ‘uint64_t’ was not declared in this scope
   80 |         terms[i] = enif_make_uint64(env, (uint64_t)(data[i]));
      |                                           ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:12:1: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
   11 | #include <vector>
  +++ |+#include <cstdint>
   12 |
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp: In function ‘int erlang::nif::make_u32_list_from_c_array(ErlNifEnv*, size_t, T*, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:118:41: error: ‘uint32_t’ was not declared in this scope
  118 |         terms[i] = enif_make_uint(env, (uint32_t)(data[i]));
      |                                         ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:118:41: note: ‘uint32_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp: At global scope:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:149:35: error: ‘uint32_t’ has not been declared
  149 | ERL_NIF_TERM make(ErlNifEnv *env, uint32_t var);
      |                                   ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:163:44: error: ‘uint8_t’ was not declared in this scope
  163 | int make(ErlNifEnv *env, const std::vector<uint8_t>& array, ERL_NIF_TERM &out);
      |                                            ^~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:163:44: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:163:51: error: template argument 1 is invalid
  163 | int make(ErlNifEnv *env, const std::vector<uint8_t>& array, ERL_NIF_TERM &out);
      |                                                   ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:163:51: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:164:44: error: ‘uint16_t’ was not declared in this scope
  164 | int make(ErlNifEnv *env, const std::vector<uint16_t>& array, ERL_NIF_TERM &out);
      |                                            ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:164:44: note: ‘uint16_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:164:52: error: template argument 1 is invalid
  164 | int make(ErlNifEnv *env, const std::vector<uint16_t>& array, ERL_NIF_TERM &out);
      |                                                    ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:164:52: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:165:44: error: ‘uint32_t’ was not declared in this scope
  165 | int make(ErlNifEnv *env, const std::vector<uint32_t>& array, ERL_NIF_TERM &out);
      |                                            ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:165:44: note: ‘uint32_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:165:52: error: template argument 1 is invalid
  165 | int make(ErlNifEnv *env, const std::vector<uint32_t>& array, ERL_NIF_TERM &out);
      |                                                    ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:165:52: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:271:61: error: ‘uint64_t’ was not declared in this scope
  271 | int get_list(ErlNifEnv *env, ERL_NIF_TERM list, std::vector<uint64_t> &var);
      |                                                             ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:271:61: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:271:69: error: template argument 1 is invalid
  271 | int get_list(ErlNifEnv *env, ERL_NIF_TERM list, std::vector<uint64_t> &var);
      |                                                                     ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.hpp:271:69: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:160:35: error: ‘uint32_t’ has not been declared
  160 | ERL_NIF_TERM make(ErlNifEnv *env, uint32_t var) {
      |                                   ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:160:14: error: redefinition of ‘ERL_NIF_TERM erlang::nif::make(ErlNifEnv*, int)’
  160 | ERL_NIF_TERM make(ErlNifEnv *env, uint32_t var) {
      |              ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:152:14: note: ‘ERL_NIF_TERM erlang::nif::make(ErlNifEnv*, int32_t)’ previously defined here
  152 | ERL_NIF_TERM make(ErlNifEnv *env, int32_t var) {
      |              ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:219:44: error: ‘uint8_t’ was not declared in this scope
  219 | int make(ErlNifEnv *env, const std::vector<uint8_t>& array, ERL_NIF_TERM &out) {
      |                                            ^~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:6:1: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
    5 | #include "nif_utils.hpp"
  +++ |+#include <cstdint>
    6 |
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:219:51: error: template argument 1 is invalid
  219 | int make(ErlNifEnv *env, const std::vector<uint8_t>& array, ERL_NIF_TERM &out) {
      |                                                   ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:219:51: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: In function ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:220:26: error: request for member ‘size’ in ‘array’, which is of non-class type ‘const int’
  220 |     size_t count = array.size();
      |                          ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:221:5: error: ‘uint8_t’ was not declared in this scope
  221 |     uint8_t * data = (uint8_t *)array.data();
      |     ^~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:221:5: note: ‘uint8_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:221:15: error: ‘data’ was not declared in this scope
  221 |     uint8_t * data = (uint8_t *)array.data();
      |               ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:221:32: error: expected primary-expression before ‘)’ token
  221 |     uint8_t * data = (uint8_t *)array.data();
      |                                ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: At global scope:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:225:44: error: ‘uint16_t’ was not declared in this scope
  225 | int make(ErlNifEnv *env, const std::vector<uint16_t>& array, ERL_NIF_TERM &out) {
      |                                            ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:225:44: note: ‘uint16_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:225:52: error: template argument 1 is invalid
  225 | int make(ErlNifEnv *env, const std::vector<uint16_t>& array, ERL_NIF_TERM &out) {
      |                                                    ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:225:52: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:225:5: error: redefinition of ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’
  225 | int make(ErlNifEnv *env, const std::vector<uint16_t>& array, ERL_NIF_TERM &out) {
      |     ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:219:5: note: ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’ previously defined here
  219 | int make(ErlNifEnv *env, const std::vector<uint8_t>& array, ERL_NIF_TERM &out) {
      |     ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: In function ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:226:26: error: request for member ‘size’ in ‘array’, which is of non-class type ‘const int’
  226 |     size_t count = array.size();
      |                          ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:227:5: error: ‘uint16_t’ was not declared in this scope
  227 |     uint16_t * data = (uint16_t *)array.data();
      |     ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:227:5: note: ‘uint16_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:227:16: error: ‘data’ was not declared in this scope
  227 |     uint16_t * data = (uint16_t *)array.data();
      |                ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:227:34: error: expected primary-expression before ‘)’ token
  227 |     uint16_t * data = (uint16_t *)array.data();
      |                                  ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: At global scope:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:231:44: error: ‘uint32_t’ was not declared in this scope
  231 | int make(ErlNifEnv *env, const std::vector<uint32_t>& array, ERL_NIF_TERM &out) {
      |                                            ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:231:44: note: ‘uint32_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:231:52: error: template argument 1 is invalid
  231 | int make(ErlNifEnv *env, const std::vector<uint32_t>& array, ERL_NIF_TERM &out) {
      |                                                    ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:231:52: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:231:5: error: redefinition of ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’
  231 | int make(ErlNifEnv *env, const std::vector<uint32_t>& array, ERL_NIF_TERM &out) {
      |     ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:219:5: note: ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’ previously defined here
  219 | int make(ErlNifEnv *env, const std::vector<uint8_t>& array, ERL_NIF_TERM &out) {
      |     ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: In function ‘int erlang::nif::make(ErlNifEnv*, const int&, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:232:26: error: request for member ‘size’ in ‘array’, which is of non-class type ‘const int’
  232 |     size_t count = array.size();
      |                          ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:233:5: error: ‘uint32_t’ was not declared in this scope
  233 |     uint32_t * data = (uint32_t *)array.data();
      |     ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:233:5: note: ‘uint32_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:233:16: error: ‘data’ was not declared in this scope
  233 |     uint32_t * data = (uint32_t *)array.data();
      |                ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:233:34: error: expected primary-expression before ‘)’ token
  233 |     uint32_t * data = (uint32_t *)array.data();
      |                                  ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: In function ‘int erlang::nif::make(ErlNifEnv*, const std::vector<long long unsigned int>&, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:239:5: error: ‘uint64_t’ was not declared in this scope
  239 |     uint64_t * data = (uint64_t *)array.data();
      |     ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:239:5: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:239:16: error: ‘data’ was not declared in this scope
  239 |     uint64_t * data = (uint64_t *)array.data();
      |                ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:239:34: error: expected primary-expression before ‘)’ token
  239 |     uint64_t * data = (uint64_t *)array.data();
      |                                  ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: In function ‘int erlang::nif::make(ErlNifEnv*, const std::vector<long unsigned int>&, ERL_NIF_TERM&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:270:9: error: ‘uint64_t’ was not declared in this scope
  270 |         uint64_t * data = (uint64_t *)array.data();
      |         ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:270:9: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:270:20: error: ‘data’ was not declared in this scope
  270 |         uint64_t * data = (uint64_t *)array.data();
      |                    ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:270:38: error: expected primary-expression before ‘)’ token
  270 |         uint64_t * data = (uint64_t *)array.data();
      |                                      ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:273:9: error: ‘uint32_t’ was not declared in this scope
  273 |         uint32_t * data = (uint32_t *)array.data();
      |         ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:273:9: note: ‘uint32_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:273:20: error: ‘data’ was not declared in this scope
  273 |         uint32_t * data = (uint32_t *)array.data();
      |                    ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:273:38: error: expected primary-expression before ‘)’ token
  273 |         uint32_t * data = (uint32_t *)array.data();
      |                                      ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: At global scope:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:474:61: error: ‘uint64_t’ was not declared in this scope
  474 | int get_list(ErlNifEnv *env, ERL_NIF_TERM list, std::vector<uint64_t> &var) {
      |                                                             ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:474:61: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:474:69: error: template argument 1 is invalid
  474 | int get_list(ErlNifEnv *env, ERL_NIF_TERM list, std::vector<uint64_t> &var) {
      |                                                                     ^
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:474:69: error: template argument 2 is invalid
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp: In function ‘int erlang::nif::get_list(ErlNifEnv*, ERL_NIF_TERM, int&)’:
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:480:9: error: request for member ‘reserve’ in ‘var’, which is of non-class type ‘int’
  480 |     var.reserve(length);
      |         ^~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:484:9: error: ‘uint64_t’ was not declared in this scope
  484 |         uint64_t elem;
      |         ^~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:484:9: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:485:30: error: ‘elem’ was not declared in this scope
  485 |         if (!get(env, head, &elem)) {
      |                              ^~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:489:13: error: request for member ‘push_back’ in ‘var’, which is of non-class type ‘int’
  489 |         var.push_back(elem);
      |             ^~~~~~~~~
/home/jadams/tmp/hnswlib_playground/foo/deps/hnswlib/c_src/nif_utils.cpp:489:23: error: ‘elem’ was not declared in this scope
  489 |         var.push_back(elem);
      |                       ^~~~
make[3]: *** [CMakeFiles/hnswlib_nif.dir/build.make:76: CMakeFiles/hnswlib_nif.dir/c_src/nif_utils.cpp.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hnswlib_nif.dir/all] Error 2
make[1]: *** [Makefile:136: all] Error 2
make[1]: Leaving directory '/home/jadams/tmp/hnswlib_playground/foo/_build/dev/lib/hnswlib/cmake_hnswlib'
\033[0;31mincomplete build of hnswlib found in '/home/jadams/tmp/hnswlib_playground/foo/_build/dev/lib/hnswlib/cmake_hnswlib', please delete that directory and retry\033[0m
make: *** [Makefile:42: /home/jadams/tmp/hnswlib_playground/foo/_build/dev/lib/hnswlib/priv/hnswlib_nif.so] Error 1
could not compile dependency :hnswlib, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile hnswlib --force", update it with "mix deps.update hnswlib" or clean it with "mix deps.clean hnswlib"
==> foo
** (Mix) Could not compile with "make" (exit status: 2).
You need to have gcc and make installed. If you are using
Ubuntu or any other Debian-based system, install the packages
"build-essential". Also install "erlang-dev" package if not
included in your Erlang/OTP version. If you're on Fedora, run
"dnf group install 'Development Tools'".

From the initial config messages it seems that the C/C++ compilers aren't set properly. Did you ensure gcc/g++ are properly installed and set as the default compilers?

Hi @knewter, I've push a commit that includes the stdint.h header to fix this issue. It should work now, please let me know if it doesn't!

v0.1.5 is shipped!


Unable to paginate queries

It seems like the all_approvals and the all_tokens have an issue with pagination.
Both of them call maybe_addr on the start_after, when in reality we just want to treat start_after as a token id that isn't an address.
The tests pass because api.addr_validate seems to not throw an error with MockApi, and instead will let the token id pass right through. But when deployed on-chain, addr_validate will throw an error, which stops people from being able to paginate.
Proposed solution:
in contracts/cw721-base/src/query.rs, remove all instances of maybe_addr, just use start_after in place of start_addr.
Am I reading this right? @ethanfrey

just saw https://github.com/CosmWasm/cw-plus/pull/491, porting over now

Just to be clear, all_tokens had the bug (fixed by #491).
all_approvals is correct, in that both parameters (owner and start_after) are addresses.

Hey @JakeHartnell - for developers that want to interface with arbitrary NFTs on chain, is there any way to work around this from the client side so both old broken contracts like Galactic Punks & LunaBulls as well as newer ones with this fix can be queried?

Hey @JakeHartnell - for developers that want to interface with arbitrary NFTs on chain, is there any way to work around this from the client side so both old broken contracts like Galactic Punks & LunaBulls as well as newer ones with this fix can be queried?

I believe old contracts need to be migrated, which can only be done by the contract admin, in order to take advantage of new pagination functionality.


build: Add clang-format checking of pull request changes to CI

Check modified lines in a pull request for correct clang-format.
Note that checking is not performed unless there is a pull request.
Heavily leveraged from https://github.com/KhronosGroup/SPIRV-Tools.

Looks great. Testing this out w/ #2287

I think the clang-format check should come before any build steps, so you'll get a quick rejection.

I see now the clang-format is a separate non-blocking job.  I'm fine with it going in as is, but we should refactor for quick rejection on format issues.  Otherwise, PRs have to go through two full build cycles to fix formatting issues.

I think the clang-format check should come before any build steps, so you'll get a quick rejection.

The jobs start in a non-deterministic order, so changing the order in the matrix won't matter.
If the format job starts relatively early, it will finish before the others.
I think a format job failure causes the result icon in the GitHub Checks pane to indicate a failure even before all the jobs finish.
So, you may get a quick indication that way.
I think that the only way to get a quick rejection is to set fast_finish on and set allow_failures for all the jobs but the clang-format job.  I really don't think we want that.

I see now the clang-format is a separate non-blocking job. I'm fine with it going in as is, but we should refactor for quick rejection on format issues. Otherwise, PRs have to go through two full build cycles to fix formatting issues.

This would be super-easy to do.
But if you have a quick rejection for a formatting issue, if there is a compilation error in the PR as well, then the user won't see that on the first push.
The error would show up only after the formatting passes, and that ends up needing at least two build cycles anyway.
Another drawback is that the format checking would be done for each build config, which is redundant.  If there are a lot of formatting diffs, the log could end up with 4 copies of a long diff instead of just one.

But if you have a quick rejection for a formatting issue, if there is a compilation error in the PR as well, then the user won't see that on the first push.
The error would show up only after the formatting passes, and that ends up needing at least two build cycles anyway.

Yes, but the first pass only takes ~44 seconds, the second takes 5+ minutes. :)
Granted, this is all absolutely dwarfed by Appveyor taking almost an hour, but I envision a future when that problem is fixed too.
If we duplicate the format check to each job, including the Appveyor jobs, there is a smidgen of redundant work, but it would be worth it.
Again, this can be done in the future, doesn't need to hold up this PR.


build: Tell cmake to set 'rpath' intelligently

Before this commit, when QPDF's products were installed in an unorthodox location, it was possible for one of the executable products not to be able to find the necessary library product (i.e., the necessary libqpdf); that is, an executable didn't inform the dynamic linker where to look. For example:
$ ldd /path/to/installed/files/bin/qpdf
        linux-gate.so.1 (0xb7ee6000)
        libqpdf.so.29 => not found
        [...]

Now, because of this commit, an executable's rpath setting (or equivalent) is set upon installation, thereby providing the required search directory:
$ ldd /path/to/installed/files/bin/qpdf
        linux-gate.so.1 (0xb7ee6000)
        libqpdf.so.29 => /path/to/installed/files/lib/libqpdf.so.29 (0xb7bc3000)
        [...]

There is some intelligence behind whether rpath is set at all:

If CMAKE_INSTALL_RPATH is set, then it is used; this allows the user to set a single, overriding value, and it allows the AppImage build script to continue working in exactly the same way that it has been doing so far.

Otherwise, the base-case rpath is determined by the following:"${CMAKE_INSTALL_FULL_LIBDIR}"
If that path is a standard location, then the base-case rpath is the empty string (meaning, in the base case, no rpath will be set); otherwise, the base-case rpath is set to that path.

The base-case rpath is used to set various targets' INSTALL_RPATH property. This is done explicitly, so as to avoid the setting of an rpath unnecessarily on some target; for instance, as of this commit, only some of the executable targets have this property set, but the libqpdf target does not. In the long run, having such fine-grained control will likely be the best policy.

In addition, cmake has been instructed to add to each target's rpath any directories that it thinks might contain potential unorthodox dependencies from outside the project; most of the time, there will be no such dependencies, and so nothing will be added. However, this is a simple way to account for unforeseen needs.

Of course, this will only help on a system that supports an rpath feature known to cmake; for example, Windows has no such feature, and so all of this will presumably be ignored when building under that system.

qpdf's handling of rpath has been problematic in various ways. I think you're on a good path here, but it's important to ensure that rpath is not set for distributions that install in temporary locations for packages. I think this is fine because they typically use DESTDIR. I will probably want to add somthing under pkg-test to ensure that the desired rpath behavior is present and then hope this doesn't cause a regression on any of the older rpath-related issues.


[2.5.9] Reduce size of v3.Catalog objects

Backport of:

https://github.com/rancher/rancher/issues/32938
https://github.com/rancher/rancher/issues/33156

Can be validated on 2.5.9-rc3

Catalogs work fine on 2.5.9-rc3


Fix for build issue due to Viper API change

This patch fixes the build error due to the Viper API changing from ReadConfigNoNil to MergeConfig.

I'm closing this PR because I realize now it's invalid due to the testing changes. I'll open another PR integrating Gofig instead.