blackbox doesnt handle spaces or () in directory names properly

It looks like blackbox doesnt like it when the directory name has spaces or ( in it. The initial command to add the file works but after that everything gets wonky.
blackbox_register_new_file cookbooks/test_base/attributes/secure.rb
========== PLAINFILE cookbooks/test_base/attributes/secure.rb
========== ENCRYPTED cookbooks/test_base/attributes/secure.rb.gpg
========== Importing keychain: START
gpg: Total number processed: 1
gpg:              unchanged: 1
========== Importing keychain: DONE
========== Encrypting: cookbooks/test_base/attributes/secure.rb
========== Encrypting: DONE
========== Adding file to list.
========== CREATED: cookbooks/test_base/attributes/secure.rb.gpg
========== UPDATING REPO:
NOTE: "already tracked!" messages are safe to ignore.
[postfix-config ce2d5b9] registered in blackbox: cookbooks/test_base/attributes/secure.rb
 2 files changed, 1 insertion(+)
 create mode 100644 cookbooks/test_base/attributes/secure.rb.gpg
========== UPDATING VCS: DONE
Local repo updated.  Please push when ready.
    git push

What is in gitignore:
.idea
.envrc

# Cookbook ignores
.vagrant
Berksfile.lock
*~
*#
.#*
\#*#
.*.sw[a-z]
*.un~

# Bundler
Gemfile.lock
bin/*
.bundle/*

.kitchen/
.kitchen.local.yml
/keyrings/live/pubring.gpg~
/keyrings/live/pubring.kbx~
/keyrings/live/secring.gpg
/Users/test/Dropbox (test)/base-ami/cookbooks/test_base/attributes/secure.rb

What is in blackbox-files.txt
/Users/test/Dropbox (test)/base-ami/cookbooks/test_base/attributes/secure.rb

What happens when you run a command:
blackbox_update_all_files
WARNING: You probably want to run gpg-agent as
you will be asked for your passphrase many times.
Example: $ eval $(gpg-agent --daemon)
Press CTRL-C now to stop. ENTER to continue:
========== blackbox administrators are:
<EMAIL_ADDRESS>jenkins-master
========== Importing keychain: START
gpg: Total number processed: 2
gpg:              unchanged: 2
========== Importing keychain: DONE
========== ENCRYPTED FILES TO BE RE-ENCRYPTED:
    cookbooks/test_base/attributes/secure.rb.gpg
========== FILES IN THE WAY:
All OK.
========== RE-ENCRYPTING FILES:
========== PROCESSING "cookbooks/test_base/attributes/secure.rb"
ERROR: cookbooks/test_base/attributes/secure.rb not found in /Users/test/Dropbox (test)/base-ami/keyrings/live/blackbox-files.txt
PWD=/Users/test/Dropbox/base-ami
Exiting...

Let me know if you need more information

I'm surprised that blackbox-files.txt includes the entire path (/Users/test/Dropbox (test)/base-ami/cookbooks/test_base/attributes/secure.rb) instead of just cookbooks/test_base/attributes/secure.rb
What command was used to register the file?

blackbox_register_new_file cookbooks/test_base/attributes/secure.rb

If you fix blackbox-files.txt manually, does everything else work?

@tlimoncelli unfortunately not, I get something like this:
blackbox_update_all_files
WARNING: You probably want to run gpg-agent as
you will be asked for your passphrase many times.
Example: $ eval $(gpg-agent --daemon)
Press CTRL-C now to stop. ENTER to continue:
========== blackbox administrators are:
<EMAIL_ADDRESS>jenkins-master
========== Importing keychain: START
gpg: Total number processed: 2
gpg:              unchanged: 2
========== Importing keychain: DONE
========== ENCRYPTED FILES TO BE RE-ENCRYPTED:
    cookbooks/test_base/attributes/secure.rb.gpg
========== FILES IN THE WAY:
All OK.

========== RE-ENCRYPTING FILES:
========== PROCESSING "cookbooks/test_base/attributes/secure.rb"
ERROR: cookbooks/test_base/attributes/secure.rb not found in /Users/test/Dropbox (test)/base-ami/keyrings/live/blackbox-files.txt

I can't reproduce this problem.  It should be in either vcs_relative_path(), get_unencrypted_filename() or get_encrypted_filename() but this test script doesn't demonstrate the problem:
#!/usr/bin/env bash

#
# _blackbox_common_test.sh -- Unit tests of functions from _blackbox_common.sh
#

set -e
. "${0%/*}/_blackbox_common.sh"
. /Users/tlimoncelli/gitwork/blackbox/tools/test_functions.sh

PHASE 'Test vcs_relative_path: TestA'
export REPOBASE='/Users/tlimoncelli/Applications (Parallels)/{fd2148c8-9fdd-11d5-bb16-d31daf3a6879} Applications.localized'
FILE='Microsoft  Windows Fax and Scan.app/Contents'
result=$(vcs_relative_path Contents)
echo result=XXX${result}XXX
if [[ $FILE != $result ]] ; then
  echo FAIL
fi

unencrypted_file=$(get_unencrypted_filename "${result}.gpg")
echo un=XXX${unencrypted_file}XXX
encrypted_file=$(get_encrypted_filename "${result}")
echo en=XXX${encrypted_file}XXX

echo '========== DONE.'

Can you reproduce the issue?

@TomOnTime I couldnt get your script to work. I tried running it in the directory where I have blackbox and it just returned me to to the command line. I replaced your directories with my own. I am sure I am doing something wrong there.
I created a new repo from scratch with similar settings as my test case above and have the same errors. It does appear that I am able to run blackbox_edit_start and blackbox_edit_end no problem but blackbox_update_all_files has problems and of course the files have the whole path in blackbox-files.txt and .gitignore.
Some more details on my setup:
Mac OS X 10.10
The actual directory I am in is also a symlink to the real directory:
lrwxr-xr-x    1 test  staff         18 Sep 17  2015 Dropbox -> Dropbox (test)
drwx------@ 124 test  staff       4216 May 17 10:52 Dropbox (test)

I'm on Mac OS X 10.11.5, but I doubt that's going to cause any differences.  What happens when you run the script as: bash -x /path/to/script.sh

@TomOnTime
+ set -e
+ . _blackbox_common.sh
++ exec /usr/local/Cellar/blackbox/1.20160122/libexec/_blackbox_common.sh

Check the lines that look like this and make sure they start with ". " (dot space):
set -e
. "${0%/*}/_blackbox_common.sh"
. /Users/tlimoncelli/gitwork/blackbox/tools/test_functions.sh

set -e
. "${0%/*}/_blackbox_common.sh"
. /Users/test/work/blackbox/tools/test_functions.sh

PHASE 'Test vcs_relative_path: TestA'
export REPOBASE='/Users/test/work/test (test)/test'
FILE='foo.txt'
result=$(vcs_relative_path Contents)
echo result=XXX${result}XXX
if [[ $FILE != $result ]] ; then
  echo FAIL
fi

unencrypted_file=$(get_unencrypted_filename "${result}.gpg")
echo un=XXX${unencrypted_file}XXX
encrypted_file=$(get_encrypted_filename "${result}")
echo en=XXX${encrypted_file}XXX

echo '========== DONE.'

Now returns:
+ set -e
+ . blackboxtest.sh/_blackbox_common.sh
blackboxtest.sh: line 2: blackboxtest.sh/_blackbox_common.sh: Not a directory

Try changing . "${0%/*}/_blackbox_common.sh" to . /the/path/to/_blackbox_common.sh (i.e. the actual path to the file).

@TomOnTime  then we are back here:
+ set -e
+ . _blackbox_common.sh
++ exec /usr/local/Cellar/blackbox/1.20160122/libexec/_blackbox_common.sh

The code has been improved a lot in this area.  "make test" should handle this case now.  Please take a look and let me know.


Update README re: changed host configuration usage.

HostConfigs are now longer passed to the startContainer method but wrapped by a  ContainerConfig. The PR reflects updating the documentation.
Additionally, the container configuration object as renamed from config to containerConfig to ease readability and be consistent with the other prefixed configuration types (authConfig, hostConfig).
Fixes #200.

@timoreimann Thanks so much for this.


Desing Knot.x final modules structure

This ticket is to discuss Knot.x project modules structure.
Thought to discuss:

Create knotx-eventbus (thing of better name) module with all eventbus communication models, then divide api (e.g. handlebars and other interfaces that users may want to implement on their own in the future) and models.
Should there be a separate repository for knotx-examples so that only the core is in current application repository.

Proposition of new structure for Knot.x project:
New repository knotx-examples will contain everything that is currently in knotx-example module:

knotx-mocks - all mocked pages and examples
knotx-example-monolith - one-jar launcher for examples
knotx-adapters-services - module that will contain examples of adapter-services

Current repository (https://github.com/Cognifide/knotx) should contain only Knot.x core and documentation. Structure of this repo modules should be:

documentation,
icons -> assets or misc,
knotx-api - handlebars and other interfaces that users may want to implement on their own in the future,
knotx-eventbus / knotx-communication - module with all eventbus communication models,
knotx-launcher - as current,
knotx-repository - as current, but it will contain many repository implementations in the future (see #61)
knotx-server - as current,
knotx-standalone - as current,
knotx-templating-engine - as current.

I kind of liked the approach of having the knotx-example in the same repository as the code (as per analogy to documentation being versioned along with the code). This way you can make sure that the knotx-example is kept up to date with current development and is not abandoned.

Instead of removing examples module completely, I would rather change them to sth like integration tests. The approach could be changed from
having a demo easy to setup and show to someone
to
having simple and easy tests for separated features of knot.x

I'd like to propose two modules instead of current knotx-example:

knotx-it - Containing integration tests for various aspects of Knot.X
knotx-example - Saples of how to configure and extend Knot.X that could serve as a demo.

Currently there are two submodules for knotx-example but the code could be in one module.
Have you got any remarks on this guys?

I like the idea of separating integration tests and examples.

This will be addressed in Knot.x 1.3 and future releases.
Knot.x will be more modular and core will contain only the real Knot.x core elements like a Server, Repository, Splitter and Assembler.


Can a Model be a child and a parent at the same time?

I realize this might not the best database design, but I wonder if your package could doing something with this?
I have a database with the following simplified tables:

questions

type

answers

question_id

subtype

and relationships
Question::hasOne(Answer)
Answer::belongsTo(Question)
I.e. questions can have several types, and each specific type of question has a subtype via the subtype field on Answer. The subtypes are only unique within a question type.
I was trying to setup a hierarchy of sti classes like:
class Question extends Model {
    use HasChildren;

    protected $childTypes = [
        1 => MultipleChoiceQuestion::class,
        2 => NumberQuestion::class,
        ...
    ];
}

class NumberQuestion extends Question
{
    use HasParent;

    public function answer()
    {
        return $this->hasOne(NumberAnswer::class);
    }
}

class Answer extends Model {
    use HasChildren;
}

class NumberAnswer extends Answer {
    use HasParent;
    user HasChildren;

    protected $childColumn = 'subtype';
    protected $childTypes = [
        1 => NumberVariant1::class,
        2 => NumberVariant2::class,
        ...
    ];
}

class NumberVariant1 extends NumberAnswer
{
    use HasParent;
}

However, this fails, since both HasParent and HasChildren contain conflicting getClassNameForRelationships methods. Is there a way to do this, or something similar without changing the database layout?

I found a way to make it work, put explicit column names in Answer and remove the HasChildren, HasParent relation between Answer and AnswerNumber did the trick.


I cannot login in my account

Hello!
I cannot  login, write incorrect username/password, but I can login by browser.
Best regards

Same here using latest version
Hope this can be fixed.
Thanks

same here

same here

same here

Hi There,
We have identified the issue with the current login system, We are working on an update which will be out soon.
In the meantime, you can try installing version 1.5.2 which is working for a few users though we haven't confirmed it yet.
A quick FAQ regarding the issue:
Q: Why aren't we able to log in?
A: The API that we are consuming in our current application is not working anymore, We are trying to make the necessary changes to bring it up to the working state and we will push the update as soon as we fix the issue.
Q:  Is there any alternative way where I can download videos in the meantime?
A: You can try Download 1.5.2, It works for a few users.
Q: What if you guys didn't intercept the new API system of Udemy, is the project gonna die?
A: NO! certainly not,  We can assure you the project will continue to work the way it used to, we may have to include some extra steps in the login process like a browser login etc, you may even have to download a chrome extension.
If you have any more questions, please feel free to ask.
P.S I am working with Faisal on all upcoming versions of udler.
Kudos and sorry for inconvenience.

Hi!
I have the same  with 1.5.2 version on linux. I hope that 1.6.2 version will be fixed soon.
Best regards

has stopped running version 1.5.2 does anyone else have an alternative?

For me guys this worked 👍
https://github.com/FaisalUmair/udemy-downloader-gui/releases/tag/v1.5.0
Download this older version of them its working fine !

I have released a new version v1.6.3 which includes a workaround for the login problem. The new version brings Udeler Authenticator (A chrome extension for easily authenticating a Udemy account with Udeler).
How to use Udeler Authenticator?

Install the extension from here

After installing/enabling the extension, open udeler desktop app, you will see a new anonymous icon on the login page. Click the icon and it will start to listen for any login requests from your chrome web browser.

Open Udemy website on your chrome web browser and simply login to your account. Udeler app will detect the login and will let you in. If you are already logged in to Udemy, you can simply visit the website and it will still detect your account.

Use this method to download courses from Udeler for now. Meanwhile I will work on a proper fix for login.

I have released a new version v1.7.0 which should allow you to login easily using the Udemy website itself.
The new version will support all kind of accounts, be it business, google or facebook. Download, test and provide feedback.


resolve redirect and CORS issue

In the config for deislabs.io I've added a redirect to where this site is running on Netlify.
docs.deislabs.io/krustlet ->> krustlet-docs.netlify.app

The redirect works, but is blocking CSS and JS from loading, it needs additional work to get the site rendering properly.

Closing this issue, redirect is setup now so that the docs site renders correctly at https://docs.deislabs.io/krustlet


ignore passenger from high entropy check

🐑

Can you do this through the config, rather than adding it to the plugin?


Website requires propietary software

In it's infinite irony, this website seems to constantly prompt me to install flash. (ie: visit http://choosealicense.com/licenses/mit/, and a "plugin missing" bar will appear on firefox).

Still an issue 20 months later. Hovering the mouse over the button puts some an object tag in front of it (flash, I think, though I've no way to be sure), making the browser cover the button in a dark gray overlay and the button unclickable:

Stuff like this is most likely to drive people away from choosealicense.com, rather than motivate them to pick a licence and share their software.


Investigate the difficulty of running Target mode clients concurretly

Initially it's fine if our proxy nodes (Bastian nodes?) run the Infra Client one at a time using the configs in the /etc/chef/client.d directory. Eventually we need to determine the difficulty of running these at the same time so we don't take longer than 30 minutes when running a large number of nodes. This is a placeholder issue for engineering to do feasibility tests on different mechanisms for running in parallel.

We aren't multithreaded and have piles of global state, so this has to be a forked-process-per-controlled-node.
We probably don't want to go back to using the old chef-client daemon interval runs only forking off on the server, so we probably want to write a standalone app that is a bit of a minmal job scheduler for target mode parallel runs.  Maybe systemd could be leveraged to do this a bit if that could take some kind of matrix?  But it probably looks like an external thing.
Going the other direction and making chef-client itself multithreaded would be difficult due to accumulation of 12+ years of design decisions which are now public APIs and difficult to unwind (Chef::Config, Chef.whatever, etc)

Works for me


Initial idea for a table stream field block using handsontable.js.

Hi,
This is an initial implementation of a StreamField table block using handsontable.js.
Let me know if there is anything else missing or gone totally astray.
Missing is documentation as to the available table configuration options.
If you like this initial approach I'll document it more clearly and completely.
No tests have been written yet.

Hi @Proper-Job, thanks for this! It works very well in testing.
As opposed to implementing this in core, we'd propose refactoring this as a pip installable module. See this markdown module as a good example.
Could you implement in a similar way?
Cheers,
Chris

Hi @chrxr - I think the suggestion was for this to become a 'contrib' module within the Wagtail codebase (e.g. wagtail.contrib.table_block) rather than making it a completely separate pip-installable package.

Hi @Proper-Job, we've discussed this in the team, and we'd like to go down the contrib route as suggested by @gasman above. Could you please update this PR. Thanks!

Just came back from my holiday :)
Yes, I will refactor it into the the contrib module.
Thanks and greetings
Moritz

I'm having a bit of a problem to integrate the git wagtail installation with PyCharm.

I squashed all of my commits.  Is that alright to have all the logic in init.py, or do you want it in modules?

__init__.py is fine by me. Will give it a full review once the 1.2 release is out of the way - thanks!

Hi @Proper-Job - this is looking good! Just a few small (I hope) issues:

It's possible to insert arbitrary HTML tags into cell text and have them interpreted as HTML. This needs to be changed so that any < > characters are displayed as-is in the output (i.e. the safe filters in templates/table_block/blocks/table.html should be removed, and the Handsontable behaviour changed so that it doesn't convert the tags, as in the examples at http://handsontable.com/examples.html).
The table width in the editor is too wide - it pushes the 'delete' button in the block header off the edge of the window.
Can we incorporate the JS from RichTextBlock so that the block height is automatically adjusted to fit the table height?

Once these are sorted, and we have tests and docs, I think we'll be ready to merge this. Thanks!

Great addition!
One thing I noticed with this field is that it doesn't support tables with a vertical column too.
This could be done really simply by adding a 'First column header' checkbox and tweaking the template so it outputs  for the first item in each row.  Let me know if you'd like me to make a pull request for this.

Sorry guys, for some reason I wasn't notified of your comments, for some reason that keeps happening to me.  Let me review your comments and get back to you.

@gasman It is possible to change HTML renderer to a simple text renderer for the table.  All you would need for that is to pass the renderer at construction time like so:
table = TableBlock(table_options={'renderer':'text})

I could default it to text if you like.  Should I do that?
I will check out the width problem.
I will try and incorporate the width js, too.
What kind of tests do you want to see for this?
Where do you want the docs to go?

@seddonym Yes please do that.

Hmm, I've to create a pull request, but I don't think Github supports multiple forking - I already have a fork of Wagtail in my account, so I can't fork from yours.  I've manually forked it, but I'm not able to create a pull request back into your repo.
Probably easiest is if you merge my commits yourself from here:
https://github.com/seddonym/wagtail-tableblock/tree/streamfield-table
If you can think of another way to do it, let me know!

@seddonym Thank you for that!
I merged your commits into this branch.

Excellent, thanks!

@seddonym I was wondering if you had the capacity to help out in any way to get this feature landed in master.
Does any one of the tasks that gasman assigned jump out at you?
I'm spread pretty thin atm but I'd really like to see this feature land asap.

Hi @Proper-Job, I had a quick look but nothing jumps out as a something I can do quickly without spending a bit of time getting my head around the code.  I'm afraid I'm also a bit too busy at the moment - sorry!

@seddonym thanks for having a look!
I'll try to get it done asap.
Greetings

Has there been any progress more recently on this effort? A table block would be awesome!

@akhayyat I think the earliest I can address the issues gasman pointed out is in May.  I'd be glad to accept any help though, because I'd really like to see this land.

@akhayyat I think the earliest I can address the issues gasman pointed out is in May.  I'd be glad to accept any help though, because I'd really like to see this land.

Hi everyone! I'm working with @Proper-Job on trying to fix the issues outlined by @gasman. Looking at the first issue, it's easy to remove the safe filter to address the security concern, however, might it be okay to use a custom renderer as in this example: https://docs.handsontable.com/pro/1.3.3/demo-custom-renderers.html? This would at least allow for the ability to use bold, italics, and anchors when needed. What do you think?

Hi @bbusenius,
I'm against allowing HTML in table cells, even in a limited form. The whole rationale for StreamField is that it captures something that's as close as possible to pure data, without specifying any particular presentation of that data - that's the job of the template. For example, it would be entirely possible for a template to take the data that's been entered into a TableBlock, and render it as a bar chart.
(Admittedly, TableBlock might not be the best tool for that job - ideally you'd want something that enforces the correct data types, rather than allowing any arbitrary string value in any cell. But nevertheless, it should still be possible to use TableBlock in that way.)
Once you start allowing HTML tags in table content, you're effectively saying "every cell value shall be treated as a fragment of HTML". (You might think I'm exaggerating there - you can still store non-HTML data in there if you want, right? Well, no - as soon as you allow for the possibility of a cell being handled as HTML, you need a way to distinguish between cells that are HTML content, and ones that just happen to be strings containing literal < and > characters. And the only non-ambiguous way to do that is to make everything HTML.) At that point, TableBlock isn't a way of capturing pure data any more - it's just a layout tool for HTML fragments, and that's a misuse of StreamField.

Ah, I see. That definitely makes sense and I can definitely see your reasoning. What would you recommend then for cases where you need to layout tabular data with rich text? We have lots of tables like this: https://www.lib.uchicago.edu/e/using/access/researchers.html and our authors have the need to inject such tables into random pages. I appreciate your input!

@bbusenius I wish I had a good answer for that! Even disregarding the constraints that Wagtail is working under (both the technical ones of being a browser-based interface, and the 'ideological' ones of separating data and presentation), coming up with a suitable UI for authoring table-based content like this would be a very hard problem indeed. Handsontable's HTML capabilities wouldn't really solve this acceptably either: Wagtail's internal representation of rich text data is not simple HTML, but a pseudo-HTML format allowing us to make symbolic references like another Wagtail page, and we'd surely want our rich-text-in-tables functionality to support that feature (otherwise, it's not really much of a step up from giving the author a big text box to enter raw
 HTML into). Essentially, we'd be looking at a way to embed RichTextBlock in a 2D grid layout, in much the same way that ListBlock allows you to repeat RichTextBlocks in one dimension...
(In a sense, you can do that in Wagtail right now, by defining a ListBlock of ListBlocks of RichTextBlocks. But the editing interface for that will look absolutely horrible, so let's not go there :-) )
Considering the example from https://docs.handsontable.com/pro/1.3.3/demo-custom-renderers.html for a moment - even though that's a more complex setup, with embedded images as well as rich text, it's actually clearer to see what the recommended Wagtail-ish approach is. The table represents a list of books, so it should be modelled as one:
class BookBlock(StructBlock):
    title = CharBlock()
    link = URLBlock()
    description = RichTextBlock()
    comments = RichTextBlock()
    cover_image = ChooserBlock()

...

body = StreamField([
    ...
    ('book_table', ListBlock(BookBlock()),
    ...
])

Tenuously, you could do something similar with your table:
class LibraryPrivilegeBlock(StructBlock):
    affiliation = CharBlock()
    who_is_eligible = CharBlock()
    kind_of_privileges = RichTextBlock()
    action_needed = RichTextBlock()

but in both cases, this relies on these models being 'baked in' to the site's business logic - there's no scope for content authors to define this sort of thing in an ad-hoc way.

(Hypothetically, I could imagine us having some kind of TypedTableBlock where an author could choose the block types for each column, in much the same way that they're presented with a selection of block types when populating the StreamField itself - so effectively they're doing the data modelling within the page editor itself. This is probably as close as we could get to a solution that ticks all the boxes while sticking to Wagtail's pure-data philosophy - but I suspect it wouldn't be particularly friendly to a content author who doesn't care about data modelling and wants to create "just a table"...)
I guess this can be summed up as follows: Creating a good UI for editing rich, table-based content is extremely hard, to the extent that I suspect that no CMS anywhere has solved it. For that reason, Wagtail's strategy is to side-step it wherever possible:

Is it a presentational table? If so, it's the responsibility of the template designer, not the content author
Is it an exercise in data modelling? If so, it's the responsibility of a Python developer, not the content author

Unfortunately, if it really doesn't fit into either of those categories - i.e. it's "just a table" - then there may be no alternative but to tackle the extremely hard problem head-on, which probably won't happen any time soon (and is certainly out of scope for this ticket).

Hi @gasman! Thanks for the thoughtful response and thanks for all the detail! Everything you said makes perfect sense. We'll certainly have to come up with a solution internally, even if it's a kludge, however, we can table that discussion. I agree it's out of scope for this ticket.
Of the outstanding blockers you listed above, I believe I've solved the first two with simple tweaks to the code. I'll have to clear the work with @Proper-Job but I think we're close. The third thing you mentioned:

Can we incorporate the JS from RichTextBlock so that the block height is automatically adjusted to fit the table height?

is proving a little more involved. I've never worked on wagtail directly before, so, it's just a matter of learning the code. I'll let you know if I have any specific questions.
Thanks for your feedback and support!

@Proper-Job and I have worked through the issues outlined by @gasman including unit tests. What's remaining is documentation. Can anyone tell me what's needed on the documentation front?

This is what we have for documentation at the moment. It's written in a hybrid rst format to make it easier to read on the web. We thought it would be a good idea to take comments before rolling it into the code base. If this is acceptable, we'll create a new table_block.rst in  /wagtail/docs/reference/contrib/ and link it in docs/reference/contrib/index.rst. Please let us know if we're missing anything or if we should provide additional documentation files. This is just a rough draft. We'll go over it a few times before we commit.

Thanks, @bbusenius and @Proper-Job! I've made some minor tweaks in the Google doc but it's looking good so far. Perhaps you could add a screenshot demonstrating how table_block looks in the editor?

Thanks @tomdyson. A screenshot showing table_block in the editor is a great idea! We'll add one.

One thing that's missing that would be nice, is a sensible default icon. I don't see anything usable in the wagtail style guide but font awesome has this. What do you guys think?

@gasman @tomdyson:  All the issues outlined above have been addressed by @bbusenius and the PR was updated.
There is no default icon for the table block, yet.  What do you think of @bbusenius suggestion above?
Would you like us to integrate a default icon?
If not, could you please review the changes?

Thanks! Will review shortly. The suggested icon looks good to me... (It seems we don't have any documentation for adding new icons to our font, but I believe it's done through https://icomoon.io/.)

@gasman Just to double check.  Would you like a new icon to be part of this PR? Or is that something you would like to address internally as there are no icon contributing guidelines?

I've been doing some preliminary research on the icons and my first impression is that this might best be handled by an internal wagtail design person. Using icomoon looks straightforward but how to integrate a new icon into a preexisting icon set is escaping me. From what I can tell, it looks like a set of icons would be generated locally and then uploaded to the project. I imagine the wagtail design team has a streamlined process for this. Please correct me if I am wrong.

OK, no worries - we'll handle it internally. (We've got another icon coming imminently in #2417, so we'd probably end up having to resolve the merge conflict anyhow :-) )

Merged in 9338fc2ac4ae984437aae6e37a506ad0f4507322 + parents (without the icon - will handle that separately). Thanks all!

I needed to use this on Wagail 1.4, so I made a simple subtree split of the directory in master, restructured it, and released it as a pip installable package: wagtail-table-block.
https://github.com/alexgleason/wagtail_table_block
It says clearly in the readme to NOT use it if you can help it. But the database representation should be the same regardless of where it's coming from, so upgrading to Wagtail 1.5 should allow you to just delete the plugin and import from wagtail.contrib.
Just in case anyone else needs this.

Question: this uses from wagtail.contrib.table_block.fields import TableBlock
Do we need that .fields? Can it just be from wagtail.contrib.table_block import TableBlock?

@alexgleason Looks like this was moved out of __init__ in 2d818afe62b273cd7fdf378018d7ea657c605fc0, in order to avoid problems on startup. I don't think the module naming is a big deal really.

There's an  an issue with some of the logic being in init.py in Django 1.9. It throws an AppRegistryNotReady exception. The easiest way we could find to fix it was to move the code into a module.

We chose to name the module fields.py because in the future the might be a TableField in addition to the TableBlock.  In the absence of TableField it might be prudent to name the module blocks.py.  I don't really mind either way.


What does the word Regressions mean here? I guess it is a ranking problem.

I'm new here.
Thank you very much!

https://en.wikipedia.org/wiki/Regression_testing


EqualToXmlPattern#getExpected need to catch prettyPrint exceptions

Version 2.8.0
Running as a WireMockServer inside JUnit TestRule.
When I encounter a near miss and the Diff.java prints the exception message it fails on the pattern.getExpected() call.
On line 111 in Diff.Java it correctly handles the exception for unknown configuration property "indent-number".
Then on line 114 the pattern.getExpected() invokes EqualToXmlPattern#getExpected which does not catch the thrown unchecked Exception (IllegalArgumentException).
So it should return like Diff#formatIfJsonOrXml instead IMHO.

2.8.0 is ancient history. Maybe upgrade to the latest version?

Same code is still there on master branch. (https://github.com/tomakehurst/wiremock/blob/master/src/main/java/com/github/tomakehurst/wiremock/matching/EqualToXmlPattern.java)

So, is it just the code you object to, or have you found a practical case where this is a problem?

I'm quite happy to hear about actual issues, but as you can see there's a large and growing backlog and this is only manageable if I prioritise the problems likely to affect people for real. I'm happy to accept that you may have found a real issue in this case, but there are people who turn up just to do drive-by critiques of code they don't like, which I just don't have the luxury of entertaining.
Please could you share a test case the triggers the problem?

Ok, fair enough.
I may have overreacted a bit.
Unfortunately I don't have a shareable test case at hand. We run the tests as part of the MuleSoft platform so I don't know how easily shared that is. I will make an effort in exporting it.

Thanks, that would be much appreciated.

The stacktrace from the error
 java.lang.IllegalArgumentException: Unknown configuration property indent-number
at net.sf.saxon.Configuration.setConfigurationProperty(Configuration.java:4433)
at net.sf.saxon.s9api.Processor.setConfigurationProperty(Processor.java:348)
at net.sf.saxon.jaxp.SaxonTransformerFactory.setAttribute(SaxonTransformerFactory.java:305)
at com.github.tomakehurst.wiremock.common.Xml.prettyPrint(Xml.java:45)
at com.github.tomakehurst.wiremock.matching.EqualToXmlPattern.getExpected(EqualToXmlPattern.java:88)
at com.github.tomakehurst.wiremock.verification.Diff.toString(Diff.java:114)
at com.github.tomakehurst.wiremock.client.VerificationException.<init>(VerificationException.java:64)
at com.github.tomakehurst.wiremock.client.VerificationException.forUnmatchedRequestPattern(VerificationException.java:39)
at com.github.tomakehurst.wiremock.client.WireMock.verificationExceptionForNearMisses(WireMock.java:523)
at com.github.tomakehurst.wiremock.client.WireMock.verifyThat(WireMock.java:513)
at com.github.tomakehurst.wiremock.client.WireMock.verifyThat(WireMock.java:492)
at com.github.tomakehurst.wiremock.WireMockServer.verify(WireMockServer.java:237) `

OK, this looks like an XML dependency problem. Your stacktrace contains the (older) Saxon implementation of TransformerFactory whereas WireMock requires the javax.xml.transform version.
I'll add a workaround that avoids trying to set indent-number unless we get the Java impl class back.


April 22 - Nan not found

With the latest update to nan running into nan module not found.
14:48:29 > node-gyp rebuild
14:48:29
14:48:29
14:48:29 module.js:340
14:48:29     throw err;
14:48:29           ^
14:48:29 Error: Cannot find module 'nan'
14:48:29     at Function.Module._resolveFilename (module.js:338:15)
14:48:29     at Function.Module._load (module.js:280:25)
14:48:29     at Module.require (module.js:364:17)
14:48:29     at require (module.js:380:17)
14:48:29     at [eval]:1:1
14:48:29     at Object.<anonymous> ([eval]-wrapper:6:22)
14:48:29     at Module._compile (module.js:456:26)
14:48:29     at evalScript (node.js:565:25)
14:48:29     at startup (node.js:80:7)
14:48:29     at node.js:935:3
14:48:29 gyp: Call to 'node -e "require('nan')"' returned exit status 8. while trying to load binding.gyp
``

Looks like another instance of include_dirs.js getting lost by npm publish: #262
$ curl -s https://registry.npmjs.org/nan/-/nan-1.8.1.tgz | tar ztvf -| grep include_dirs.js
$

Yup. I'll republish in an hour. Don't know why this keeps happening. Could there be a bug in npm?
On April 23, 2015 10:08:40 PM EEST, Jason<EMAIL_ADDRESS>wrote:

Looks like another instance of include_dirs.js getting lost by npm
publish: #262
$ curl -s https://registry.npmjs.org/nan/-/nan-1.8.1.tgz | tar ztvf -|
grep include_dirs.js
$

Reply to this email directly or view it on GitHub:
https://github.com/iojs/nan/issues/320#issuecomment-95688108

Looks like it could be this one? https://github.com/npm/npm/issues/5082

Republished as 1.8.2.
~/dev/nan$ curl -s https://registry.npmjs.org/nan/-/nan-1.8.2.tgz | tar ztvf -| grep include_dirs.js
-rw-rw-r-- 1000/1000        55 2014-11-06 20:43 package/include_dirs.js

:dragon_face: :+1:

@bengl Thanks, that seems like the right bug.


Runtime Unit Creation

This allows for the construction of new units at runtime from FactorUnits, which is very useful when trying to do general computations over quantities.

This PR introduces a fundamental change of the library contract, and I am not (yet) convinced it is necessary.
Until now, the library instantiates the model in the static initializer. Instantiation is deferred to the InitializerImpl class, which has to be on the classpath. This mechanism allows you to populate the model with whatever units you need. This would allow to use a smaller model if needed, or to use additional units. However, we have not allowed runtime manipulation for a long time so as to defend against introducing errors that are hard to spot. Up until recently, the complete model used final members to ensure this, but I've had to loosen this constraint to allow for runtime manipulation for the case of creating units with the intent of contributing them to QUDT. (See e.g. qudtlib-tools/src/main/java/io/github/qudtlib/QudtEntityAtRuntimeAdder.java)
What's the use case you want to tackle with these changes? Do you want to enable users to create new units? Or do you need a set of units for a certain domain and you could add them during class initialization?

The use case I have is that I have a software package that enables doing general math over quantities. This is used in engineering applications. I have code that is very good at finding exact or analogous matches among predefined units over operations like multiplication and exponentiation. However, the users often need to write equations that produce results (especially intermediate results) that do not have associated named quantities or units in QUDT vocabulary.
For example, let's suppose some system that maintains a concentration (g/L) proportional to power consumption (/W). Then I have some kind of optimization I want to do that relies on the second derivative of this function with respect to power. I am now looking for (g/L/W3). That unit is perfectly well-defined unit and one that I might conceivably need. I have all the information I need to construct it. But it doesn't (and shouldn't) exist in QUDT vocabulary. I just need it at this moment.
Depending on whether this in an intermediate or final result, I may or may not want to serialize the quantity back to RDF. If I do, it should be in my RDF namespace, which is why the Quantity constructor takes the baseIri argument.
Right now, it is impossible for me to generate this unit at runtime with QUDT lib. And that's a significant problem for me.

Thanks for the explanation. I understand your requirement and I think it should be supprted by qudtlib.

One thing I have recently stumbled across is the requirement for fractional exponents . I forget which unit but it had an exponent of 1/2. Is that something you need as well?

I think this is almost inevitable. I don’t know of any specific equations currently requested that would use them, but I’m certain it would come up before long.
Get Outlook for iOShttps://aka.ms/o0ukef

From: Florian Kleedorfer @.>
Sent: Friday, December 22, 2023 4:37:58 AM
To: qudtlib/qudtlib-java @.>
Cc: Josh Feingold @.>; Mention @.>
Subject: Re: [qudtlib/qudtlib-java] Runtime Unit Creation (PR #74)
One thing I have recently stumbled across is the requirement for fractional exponents . I forget which unit but it had an exponent of 1/2. Is that something you need as well?
—
Reply to this email directly, view it on GitHubhttps://github.com/qudtlib/qudtlib-java/pull/74#issuecomment-1867460851, or unsubscribehttps://github.com/notifications/unsubscribe-auth/A4EKAK2ASPEKWWJO3IFFJVDYKVIHNAVCNFSM6AAAAABA5OWXESVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNRXGQ3DAOBVGE.
You are receiving this because you were mentioned.Message ID: @.***>

To be clear, regarding fractional unit exponents, I certainly would not consider fractional exponents to be a prerequisite for dynamic units. I do think they are worthwhile though.

That's how I understood your point, but thanks for clarifying.
Sorry this takes a bit of time, I am traveling and have lots of family events. I may not be able to merge and release before early January.


Option to use alerts for low water levels.

Was suggested that this could also be used to check the water level in a drinking water cistern.  Would be handy to get alerts when the water level gets too low and send a text to the water supplier to come and fill it up.

Devel branch has functioning code to alert on low water levels.

Uploaded version v0.8.0 which adds this functionality.
In raspisump.conf set critical_water_level to your level at which you want an alert.
Add 'alert_when = low' to the [pit] section in the conf file.
See the sample conf file in /home/pi/raspi-sump/sample_config/


[ gtk:x86-windows-static] build failure

Host Environment

OS: Windows 10 19041.450
Compiler: Visual Studio 2017 Latest

To Reproduce
Steps to reproduce the behavior:
./vcpkg install gtk:x86-windows-static
Failure logs
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet x86-windows-static...
Starting package 1/16: glib:x86-windows-static
Building package glib[core]:x86-windows-static...
Could not locate cached archive: C:\Users\User\AppData\Local\vcpkg/archives\48\48b19ae47fe5a7257f9fcb1cebd423ee37a7c127.
zip
-- Using community triplet x86-windows-static. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: F:\SDK\vcpkg\triplets\community\x86-windows-static.cmake
-- Note: glib only supports dynamic library linkage. Building dynamic library.
CMake Error at scripts/cmake/vcpkg_check_linkage.cmake:42 (message):
  Refusing to build unexpected dynamic library against the static CRT.  If
  this is desired, please configure your triplet to directly request this
  configuration.
Call Stack (most recent call first):
  ports/glib/portfile.cmake:6 (vcpkg_check_linkage)
  scripts/ports.cmake:79 (include)

Additional context
I think this is just a small cmake problem.
Please help me as soon as possble.
Thank you.

Now I found that gtkmm has the same trouble.

Community triplets are not guaranteed to work with all ports
gtkmm fails because it has a dependency of gtk, so it will have all the same prerequisite dependencies (and most likely more) as gtk.
glib is the failing because it can only be compiled dynamically and you have specified a static compile.
Try building with either x86-windows (dynamic), x64-windows (dynamic) otherwise you will need to create your own customized triplet file with the appropriate allowing a dynamic library to compile against static CRT. See issue #6343 on how you can modify a triplet/portfile to allow you to accomplish this.

The related issue: #3409

@ScSofts Does this issue occur? Is Jack's comments is a workaround for you?

@ScSofts Does this issue occur? Is Jack's comments is a workaround for you?

Yell. I'm now trying to modify the cmake script by myself.I often meet with compile problems,and every time I can solve it by that.

Thanks for your reply. If your problem solved, please close this issue. You are very welcome to share your solution to solve this problem.

Looks the problems solved, so close this issue.


Bad exception received from inter.getInterface() proxy

When you use bsh.Interpreter.getInterface(xxx), the
proxy you receive will have distinct behaviour depending
if the method that is called has a "throws" clause or not
and if the method is not implemented by the script.
Imagine that you have this interface:
public interface IBla
{
public void simple();
public void comlex() throws Exception();
}
and you create an Interpreter for an *empty* script (not
implementing any of the above methods).
If you then do:
IBla proxy = (IBla)interpreter.getInterface (IBla.class);
Then:
proxy.simple()
will throw an UndeclaredThrowableException
While:
proxy.complex()
will throw an bsh.EvalError which is a CHECKED
exception.
Consequently, in the second case, your code is not
required *at compile time* to check for an exception
while a *checked* exception will be thrown at *runtime*.
Reported by: slaboure
Original Ticket: "beanshell/bugs/102":https://sourceforge.net/p/beanshell/bugs/102

I am not sure if this is an bug or not, possibly it is working as expected.
When calling through the proxy for the first undefined method the interpreter throws an EvalError for an undefined method.  Since no throws clause is specified on the interface the proxy wraps this exception in an UndeclaredThrowableException.  This seems correct as per the contract.
When calling through the proxy for the second undefined method the interpreter again throws an EvalError for an undefined method (which despite the name is a subclass of Exception).  Since the interface has a throws clause that specifies Exception, this can be passed through without wrapping.
I'm not sure what else is to be expected.  I don't think it is appropriate for the proxy handler to get in the way and do something like throwing a NoSuchMethod exception, since the invoke method could be the implementer and the EvalError could be real.
Attached is the original test case from SourceForge (slightly modified).
ProxyTest.zip

@opeongo Would it be beneficial to add the test case but make it to pass as expected?

@opeongo  I agree with your assessment. Works as expected.

Closed: Works as expected


dpkg packaging template

added templates for debian packaging.
explicitly putting them into ./contrib/debian instead of ./debian/ to keep it separate from actual (dist specific) packaging.
my dist packaging branches just move that to ./debian/ and do minimal dist-specific adaptions.

Merged!


vdom.text wrapper

How is the idomWrapper working for the text function
function wrapIdomFunc (func, tnameFuncHandler = noop) {
  return function wrap (...args) {
    args[0] = resolveTagName(args[0]);

It seems that the resolve call would mess with the text to render.

It just wraps it so that it can be buffered in case it's being called within a function helper. I'm hoping we can remove a lot of this stuff in #1038.

But the args[0] = resolveTagName(args[0]); line makes no sense for text

It's a noop as resolveTagName() just returns what's passed in. Possibly better ways to do that, but it's going to get a rewrite soon anyways. Let me know if you have anymore questions about it. I'm going to close this now, but reopen if I haven't answered your question.


Description became unclear due to rename Ignition --> Gazebo

The original text was:

Ignition Gazebo supports any kind of Ignition GUI plugin
(ignition::gui::Plugin). Gazebo GUI plugins are a special type of Ignition
GUI plugin which also have access to entity and component updates coming from
the server.

The current text is nonsense:

Gazebo GUI plugins are a special type of Gazebo GUI plugin

I propose to change to:

Gazebo supports any kind of GUI plugin (gz-gui library: gz::gui::Plugin). However, GuiSystem plugins (gz-sim library: gz::sim::GuiSystem) are a special type of GUI plugin, which also have access to entity and component updates coming from the server.

It is still not a good description though, but I can't propose a better description as I don't understand it:
What is "entity and component updates coming from the server"?
According to the documentation Plugin Types:

To interact with the server-side scene, you'll need to write an gz::sim::System.
To interact with the client-side scene, you'll need to write an gz::gui::Plugin, or a more specialized gz::sim::GuiSystem if you need to access entities and components.

It is confusing that this document states a gz::gui::Plugin for "updates coming from the server" and the other documentation states  gz::sim::GuiSystem is client-side.

Good catch, I think your rewording makes sense.

What is "entity and component updates coming from the server"?

In this case, the entity and component updates are coming from the simulation server via the SceneBroadcaster system.
The GUI (simulation client) and Server (simulation server) each maintain a copy of the ECM, and the state is periodically syncronized from the server to the client.  GuiSystem plugins allow for interaction with the ECM state in the GUI.
Given this context is the explanation clearer?  Should we add something like this?

This is what I think to understand.
There are a few questions:
gz::gui::Plugin
A gz::gui::Plugin is a plugin that defines a widget to be loaded into a GUI window.
That GUI window can be:

The one that shows the running simulation,
Or any stand-alone GUI window (there doesn't even need to be a simulation running),

A gz::gui::Plugin can be used to implement general functionality, e.g.:

Instantiate a ROS node in the plugin to send ROS messages upon click of a button,
The gz::gui::plugins::ImageDisplay plugin shows images received through gz-transport
(e.g. from a simulation sensor),
The gz::gui::plugins::MinimalScene plugin creates a gz::rendering::Scene and ensures that it gets rendered into the GUI window. This plugin however does not populate the scene (this is done by another plugin, see below).
Etc.

A gz::gui::Plugin has no access to entities and components.

gz::sim::GuiSystem
A gz::sim::GuiSystem is identical to a gz::gui::Plugin in that it is also a plugin to be loaded into a Gui window. However:
A gz::sim::GuiSystem has access to the ECM of the GUI process (i.e. the frontend process),
For this to work, the ECM of the GUI process must be kept in sync with the ECM of the simulation loop (i.e. of the backend process).

This is done by the SceneBroadcaster system plugin,
It is a one-way process: ECM changes are sent from backend process to frontend process only.

So if you want to add entities in both processes, you need to:

Load a system plugin in the backend process that inserts the entities into the backend ECM (e.g. the UserCommands system),
Use gz-transport to communicate from the frontend to that backend system plugin,
The frontend ECM will be synced to the backend ECM by the SceneBroadcaster.

It's not clear to me how the 'receiving end' for the SceneBroadcaster is configured.
E.g. let's say I have one backend process with SceneBroadcaster plugin and two GUI windows. Will both automatically have an updated ECM?
If so: what if I don't run GuiSystem plugins in one of those GUI windows (e.g. just some buttons and visualisations to interact with the simulation through gz-transport). That's a lot of unnecessary communication then?

Wrt. gz::gui::Plugin, the gz::sim::GuiSystem interface defines one extra function : update().

From the documentation: update() is called every time the system is stepped.

What does that mean, 'stepped'?
Aren't the GUI updates generally done at 60Hz (except in specific cases)? As opposed to the simulation step frequency?

update() is called from a Gazebo Transport thread, so any interaction with Qt should be done through signals and slots.

The gz::sim::GzSceneManager is a GuiSystem that updates the 3D scene (of the MinimalScene gui plugin) according to the frontend ECM.

What happens if a GuiSystem adds entities to the frontend ECM in its update()?
What defines the order that the updates() are called?
E.g. how to ensure that the  GzSceneManager updates the scene with the newly added entity?
Do these frontend-added entities need to be re-added in each iteration? Or are they persistent?
How do frontend and backend avoid duplicate entity ID's?

It's not clear to me how the 'receiving end' for the SceneBroadcaster is configured.
E.g. let's say I have one backend process with SceneBroadcaster plugin and two GUI windows. Will both automatically have an updated ECM?
If so: what if I don't run GuiSystem plugins in one of those GUI windows (e.g. just some buttons and visualisations to interact with the simulation through gz-transport). That's a lot of unnecessary communication then?

Yes, the SceneBroadcaster will publish the State message and both GUI windows will receive the update, assuming both GUI windows were created using gz::sim::gui::createGui. If you don't want to run GuiSystem plugins, I think you can just create gz::gui::Application yourself as in this example.

From the documentation: update() is called every time the system is stepped.
What does that mean, 'stepped'?
Aren't the GUI updates generally done at 60Hz (except in specific cases)? As opposed to the simulation step frequency?

Stepped is probably the wrong word here since that could imply physics/simulation steps. You are correct in the the SceneBroadcaster publishes the State message at 60Hz (except in specific cases).

update() is called from a Gazebo Transport thread, so any interaction with Qt should be done through signals and slots.

This is no longer the case as of #1095. Update is now called from the Qt thread.'

What happens if a GuiSystem adds entities to the frontend ECM in its update() and what defines the order that the updates() are called?

The order of Update calls follows the order in which the plugins are listed in the SDFormat file.

E.g. how to ensure that the  GzSceneManager updates the scene with the newly added entity?
Do these frontend-added entities need to be re-added in each iteration? Or are they persistent?

The synchronization mechanism should not remove any entities that weren't also removed from the server, i.e, for the entity to be removed, it must have existed in the backend/server ECM and a system on the backend must of requested the removal of the entity.

How do frontend and backend avoid duplicate entity ID's?

Not sure about this. I don't think there's anything to prevent this
I also wanted to mention that there is some level of GUI->Server sync that happens when the play button is pressed.
There's some additional context here  about it.

The ABI checker failed, but I'll go ahead and merge this since it's just a documentation change.


Upgrade for Android Q

It looks like Android Q will block executing native code from the /data/data writeable space. We can configure to run from the read-only app private space but this will require changes to the way we handle setup.
Currently, by default, we use a simple flat directory, with the executable and config files in the same location. We can't do this anymore since we can't write the config files to the same directory as the executable.
This should only affect the android module, not universal.
https://www.reddit.com/r/androiddev/comments/b2inbu/psa_android_q_blocks_executing_binaries_in_your/

The other annoyance is that the executable files have be named at least with .so on the end, perhaps even also with lib on the beginning.  Seems like a better solution would be to get the Android TorService to link against tor as a proper shared library.  This is working well on iOS now.

Agreed we should move to actual shared libraries, but for now...
We have an initial release out for testing that hopefully addresses the Android Q issue:
https://github.com/n8fr8/tor-android/releases/tag/tor-android-binary-tor-<IP_ADDRESS>-rc
and a build of Orbot, as well, based on this:
https://github.com/n8fr8/orbot/releases/tag/16.0.6-BETA-1-tor-<IP_ADDRESS>
There is a new gradle dependency published as well:
org.torproject:tor-android-binary:<IP_ADDRESS>-rc


proper return types

Description
I've been using more and more phpstan recently but I've been a bit disappointed by inconsistent return types that exist across the framework.
For example
https://github.com/silverstripe/silverstripe-framework/blob/bcbbfddd1ad6f70a2fd954b4bf71a236fd754527/src/Forms/FileUploadReceiver.php#L81-L90
Obviously should be return ?DataObject or DataObject|null depending on preferences
Should these type of issues always be distinct PR or "one big sweep" across the framework would be better ?
Additional context or points of discussion
Another typical pain point are Extensions that are not easily detected
A typical situation: you have a MyMember extension, defining a return type Member&MyMember doesn't work so well in most ide, Member|MyMember is an obvious - incorrect - hack that works sometimes
Dynamic extensions, in general, don't help with proper static analysis :-) (a phpstan plugin could help there, see https://github.com/syntro-opensource/silverstripe-phpstan)
Injector is not always friendly. I've been using a simple enough work around that looks basically like this:
/**
 * @template T
 * @param class-string<T> $class
 * @return T|mixed
 */
function ss_inject(string $class)
{
    return SilverStripe\Core\Injector\Injector::inst()->get($class);
}

This also apply to DataObject in general as soon as you do something else that MyDataObject::get_by_id($id)... I do miss something like MyDataObject::get_by_field($field, $id) or get_by_index (which is a really typical use case) and have $list->first() return something valid
Validations

[X] You intend to implement the feature yourself
[X] You have read the contributing guide
[X] You strongly believe this feature should be in core, rather than being its own community module
[X] You have checked for existing issues or pull requests related to this feature (and didn't find any)

We pondered strongly-typing everything in CMS 5, but we ended up putting it in the too hard basket. We'll have more lead up time to CMS 6, so we might be able to do it there.

Should these type of issues always be distinct PR or "one big sweep" across the framework would be better ?

If you did occasional PRs to adjust the PHPDoc typing for specific method or class, we should be able to merge that.
Doing the entirety of Framework, might be a bit too much to swallow all at once.
Explicitly defining types could be a breaking API change depending on the context. So I would avoid jumping on those.
Generics supports
We're adding support for generic typehints in CMS 5.2. You might want to have a look at that.

@maxime-rainville great news for 5.2, can't wait to see that :-) it's going to be very helpful
ok I may then make some small pr for the parts i'm mostly using

Explicitly defining types could be a breaking API change depending on the context. So I would avoid jumping on those.

The next major branch has been created, so any PRs targetting that branch could be reviewed and merged if we agree with the typing.

great so i'll be closing this and make pr if needed


Bugfix: correct copy-webpack-plugin options for Windows systems

fix(toolkit): correct copy-webpack-plugin globOptions for Windows

the underlying "fast-glob" package only accepts posix paths. Native path.resolve on windows create
paths with backslash separators, causing this "ignore" pattern not working, and the index.html
template then overwrites the HtmlWebpackPlugin generated one

Looks good!


Remove MSCVR120.dll dependency?

Is it possible to remove MSCVR120.dll dependency from the exe file completely? Putting the dll file into the exe directory works, but inefficient for me because it needs 2 files instead of one. Might seems weird but I don't want to install VC Redist unless I really need it.

@AndhikaWB Yes I think I can remove this dependency. I keep you in touch.

Thank you, I will be waiting then.

@AndhikaWB Should be ok with the latest release ;)


feat: Enable IAM integration for Cloud Pak for Data

Is your feature request related to a problem? Please describe.
Per https://www.ibm.com/docs/en/cloud-paks/cp-data/4.6.x?topic=environment-integrating-iam-service, integrating CP4D with IAM service is a welcome addition to the deployments.
Describe the solution you'd like
Follow the documentation steps to enabled IAM integration
Describe alternatives you've considered
None, the requirement is pretty narrow.
Additional context
Add any other context or screenshots about the feature request here.

:tada: This issue has been resolved in version 0.25.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Is there a way to detect selection on each image and get its index ?

I need to perform action on clicking on each image , so I am asking if there is a way for doing this ? @zvonicek

any solutions found on this?

I need to perform action on clicking on each image , so I am asking if there is a way for doing this ? @zvonicek


PowerShell cmdlets error on initial Database Migration creation

The following PowerShell cmdlet, executed in the Package Manager Console of Visual Studio 2017 Enterprise (15.2.26430.14) with the Default Project: dropdown listbox set to Scheduler.API causes an error:
Add-Migration -Name Initial -Project Scheduler.API

Startup project 'Scheduler.Model' targets framework '.NETStandard'. This framework is not intended for execution and may fail to resolve runtime dependencies. If so, select a different startup project and try again.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.EntityFrameworkCore.Design, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
File name: 'Microsoft.EntityFrameworkCore.Design, Culture=neutral, PublicKeyToken=null'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at Microsoft.EntityFrameworkCore.Tools.ReflectionOperationExecutor..ctor(String assembly, String startupAssembly, String projectDir, String contentRootPath, String dataDirectory, String rootNamespace, String environment)
I have updated all NuGet packages in all 3 projects to the latest editions (July 1, 2017).

@fmorriso  simply try to cd to path of the Scheduler.API project and run the following commands:

Add-Migration Initial
Update-Database


Updated with new location for mod on kerbalstuff

!pull

Can someone look at this and tell me whats wrong?  I only changed two lines and now it's erroring, but the error doesn't make sense
Thanks

I just downloaded the netkan.exe to test this locally, and it was able to make the ckan file without an error

I wonder if we've hit an edge case with the JSON parse we use in the metadata.t tests. Works fine for me locally though.

What sort of edge case?

Not sure, possibly a bug. We might be using the Pure Perl parser in the container. Which is great for fat packing, but the XS one is faster and I've encountered less oddities like this.

Can you merge the manually generated ckan for this now until this gets fixed?

Is it possible there was a conflict between this .netkan file and the
one which Kerbalstuff generated (which I see you just deleted)?
On 8/16/2015 8:46 PM, Leon Wright wrote:

Not sure, possibly a bug. We might be using the Pure Perl parser in
the container. Which is great for fat packing, but the XS one is
faster and I've encountered less oddities like this.
—
Reply to this email directly or view it on GitHub
https://github.com/KSP-CKAN/NetKAN/pull/2115#issuecomment-131645817.

Nah, it's a metadata test. I'm not really kitted up to test this fully at work. @plague006  - will probably be about at some point.

I created #2116 with a copy of the current AutomatedScreenshots.netkan with the file name + identifier changed. It gives the exact same error at the exact same character offset. Considering AutomatedScreenshots.netkan has been running without issue and generated AutomatedScreenshots-0.1.0.ckan , AutomatedScreenshots-0.2.0.ckan , and AutomatedScreenshots-0.3.0.ckan I don't think there should be an issue.
Passes local. Merging.

Thank you!


Error in readme

The readme says that init default to random :

init: the initialization of the lower dimensional embedding. One of "pca" or "random", or a user-provided numpy ndarray with the shape (N, 2). Default to "random".

While the code says it default to "pca"
init: str, optional
            One of ['pca', 'random']. Initialization of the embedding, default='pca'.

Thank you for catching the problem! The readme should have been fixed now.


FFMPEG Disconnect

Hello friend, good job, the server generates the following error once FFMPEG starts:
libpostproc    55.  5.100 / 55.  5.100
[sdp @ 0x5577fa3e0d00] Could not find codec parameters for stream 1 (Video: h264, none): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, sdp, from 'rtp-forwarder.sdp':
  Metadata:
    title           : Pion WebRTC
  Duration: N/A, bitrate: N/A
    Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
    Stream #0:1: Video: h264, none, 90k tbr, 90k tbn, 180k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> aac (native))

Metadata:
    title           : Pion WebRTC
    encoder         : Lavf58.29.100
    Stream #0:0: Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.54.100 aac
[flv @ 0x5577fa488700] Failed to update header with correct duration.
[flv @ 0x5577fa488700] Failed to update header with correct filesize.
size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[aac @ 0x5577fa46ec40] Qavg: -nan
Connection State has changed failed
Connection State has changed closed

Thanks for your reply.

I think it may be a problem of my HTML client, could you help me with an example of HTML client, thank you very much for your help.
navigator.mediaDevices
	.getUserMedia({
		audio: true,
		video: true,
	})
	.then((cameraStream) => {
		const pc = new RTCPeerConnection({
			sdpSemantics: 'unified-plan',
		});

		cameraStream.getTracks().forEach(track => pc.addTrack(track, cameraStream));

		pc.createOffer()
			.then((offer) => pc.setLocalDescription(offer))
			.then(() =>
				fetch('http://xxx.xxx.xxx.xxx:8090/webrtc/offer', {
					method: 'POST',
					headers: { 'Content-Type': 'application/json' },
					body: JSON.stringify({
						"ingestionAddress":"xxxxx",
						"streamKey": "xxxxxxxxx",
						"offer": JSON.stringify(pc.localDescription)
					})
				})
			)
			.then((res) => {
				if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
				return res.json();
			})
			.then((answer) => pc.setRemoteDescription(answer))
			.catch((err) => console.error(err));

Hey @remymatheus, try creating a peer connection with the google stun server like

Hello @remymatheus I am facing the same error in the server. Did you manage to solve that?


Get-RubrikReportData no longer works in RCDM 4.1

Expected Behavior
From RCDM 4.1, due to changes in the /internal/report/{id}/table endpoint, the 'Get-RubrikReportData' cmdlet no longer functions
Current Behavior
This used to return the table data for the report, which could then be used to build custom reporting based on Envision data.
Failure Information (for bugs)
PS C:\WINDOWS\system32> Get-RubrikReportData -id CustomReport:::b569036b-f27d-47dc-b572-314c3707e5cb -Verbose
VERBOSE: Validate the Rubrik token exists
VERBOSE: Found a Rubrik token for authentication
VERBOSE: Gather API Data for Get-RubrikReportData
VERBOSE: Load API data for
VERBOSE: Description: Retrieve table data for a specific report
VERBOSE: Build the URI
VERBOSE: URI = https://<<RUBRIK_CLUSTER>>/api/internal/report/CustomReport:::b569036b-f27d-47dc-b572-314c3707e5cb/table
VERBOSE: Build the query parameters for
sla_domain_id,cluster_location,search_value,object_type,compliance_status,task_status,task_type
VERBOSE: Query = Found limit flag
VERBOSE: URI =
https://<<RUBRIK_CLUSTER>>/api/internal/report/CustomReport:::b569036b-f27d-47dc-b572-314c3707e5cb/table?limit=9999
VERBOSE: Performing the operation "Retrieve table data for a specific report" on target
"CustomReport:::b569036b-f27d-47dc-b572-314c3707e5cb".
VERBOSE: Submitting the request
VERBOSE: GET
https://<<RUBRIK_CLUSTER>>/api/internal/report/CustomReport:::b569036b-f27d-47dc-b572-314c3707e5cb/table?limit=9999
with 0-byte payload
WARNING: The endpoint supplied to Rubrik is invalid. Likely this is due to an incompatible version of the API or
references pointing to a non-existent endpoint. The URI passed was:
https://<<RUBRIK_CLUSTER>>/api/internal/report/CustomReport:::b569036b-f27d-47dc-b572-314c3707e5cb/table?limit=9999
The remote server returned an error: (404) Not Found.
At C:\Program Files\WindowsPowerShell\Modules\Rubrik\<IP_ADDRESS>\Private\Submit-Request.ps1:18 char:21
+                     throw $_.Exception
+                     ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], WebException
    + FullyQualifiedErrorId : The remote server returned an error: (404) Not Found.

PS C:\WINDOWS\system32>

Steps to Reproduce
Please provide detailed steps for reproducing the issue.

See above output for command to run on a 4.1 cluster

Context
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.

Rubrik PowerShell Module Version: <IP_ADDRESS>
PowerShell Version: 5.1.16299.251
Operating System: Windows 10 1709 16299.309

Failure Logs
See above

Here is 4.1 and 4.0.6 context if useful-
RCDM 4.1 (POST)
call = "/api/internal/report/#{r['id']}/table"
payload = { "limit": 100, "sortBy": "StartTime", "sortOrder": "desc" }
RCDM 4.0.6 (GET)
call = "/api/internal/report/#{r['id']}/table?limit=1000&sort_attr=QueuedTime&sort_order=desc"

I have this issue also, just pushed to 4.1 Rubrik to address some other issues on the box. Also just started trying to get the powershell stuff to work, so it has been interesting trying to figure out if these are my issues, rubrik or the powershell. I had a call and have  the work around for this. I am not sure if I can post the workaround here, is that acceptable. Now that I have the data coming back. how I am having an issue calling new-rubirksnapshot that I want to call from returned report data for the systems that have failed.  Do you have an easy method for loading the data that comes back in the container object?

for me, changing line 81'sh in the git-rubrikreportdata.ps1
from:
$result = Submit-Request -uri $uri -header $Header -method $($resources.Method) -body $body
To:
$result = Submit-Request -uri $uri -header $Header -method POST -body $body
worked. they said to create a new function and then export it, I couldn't get that to work so the support guy just had me update the orginal file. seems maybe 4.1 busted a lot.

The Get-RubrikAPIData allows for multiple versions of an endpoint to exist based on the RCDM version. Should just be a matter of updating that file with the different endpoint details and testing it. You want to tackle that one @railroadmanuk ?

Yes sure, I can pick it up
On 12 April 2018 at 18:58, Chris Wahl<EMAIL_ADDRESS>wrote:

The Get-RubrikAPIData allows for multiple versions of an endpoint to
exist based on the RCDM version. Should just be a matter of updating that
file with the different endpoint details and testing it. You want to tackle
that one @railroadmanuk https://github.com/railroadmanuk ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/rubrikinc/PowerShell-Module/issues/172#issuecomment-380892509,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AIvlvctJ4VH_JH-jqHWeyTVNRFJ3vQXKks5tn5XXgaJpZM4S8mo-
.

I, too, would like to be able to get more than 25 rows in the dataset.

Like robinkaty and BigHouseITGuy I am also very interested in receiving more than 25 lines in the dataset.

Get-RubrikReportData now has a -limit parameter where you can pass the number of records you want to return.

Hello MikeFal,
i have just installed the new version of the module and it works great. Thank you very much, now I can query the compliance and show the status in our monitoring. :)


to sudo or not to sudo is the question

Hi
just a note it is not very nice that the script uses sudo
a better way is to detect if the script is run as root
if (( $EUID != 0 )); then
    echo "script must run with root privileges"
    echo "sudo $0"
    exit
fi

Thanks! I have resolved this as part of version 1.0.0 that I just released.

nice
now you just need to remove all the places the code uses sudo


Failed to execute menu action.

Yup, still an issue. Hopefully gets fixed soon.

Sorry, I've been crazy busy with my new job.  This sounds like an easy fix though.  I'll try to take care of this soon.

Check if the latest version works for you.  If not, let me know what error you get.

I got a slightly different error message this time using the new version  :

Ok, can you let me know which version of ImageMagick you're using.  It's obviously 7, but it must be a different version.
If you open a terminal or command prompt window and type "magick -version" you should get it.

Im using ImageMagick 7.1.1-36 Q16-HDRI x64

OK, I've modified 3 locations where the convert submodule was used.  I just tested it and it worked for me.  Let me know how 1.3.1 does for you.

Yep, It works perfectly now, thanks for taking the time to fix it

Closed with c6e1bb4


Playground problem with serialisation of logs

The serialisation of the logs is wrong.

showing null in place of the expected undefined:
console.log([undefined]); // ==>  [LOG]: [ null ]
not showing existing keys:
console.log({foo: undefined}); // ==> [LOG]: {}

Cool, if someone wants to look into this, the code is here: https://github.com/microsoft/TypeScript-Website/blob/v2/packages/playground/src/sidebar/runtime.ts#L115

@orta The "print" function mentioned above is the culprit, const isObj = typeof arg === 'object' will be true for Arrays (and other types: regexp, dates, etc)) and JSON.stringify(arg, null, 2) can not handle them properly.
Are you using some other formatter already?  (something like recast)

Nope, what you see it all there is, I aimed for simple and good enough.- happy for it to get extended to be comprehensive.

As mentioned earlier, I also checked that the JSON.stringify() function does not work. That is why I tried a few attempts because I think I need to modify this. The way I thought of it is as follows. I hope you can comment on your opinion.
The attached picture is the result of testing the stringfy() function at the W3school site. As a result, we found that not having "" attached to the inner element returns nothing as a result, like this error we know. We found this to be a problem here.
One of the alternatives to the workaround is to parse this object and make it json again, then use stringfy(). I am trying to do this in this way, but I accessed the elements of an object using a for statement, but it seems that the value of the value(variable) is not recognized. Is there a good way? What do you think about this method?

Taking console.log({foo: undefined}) as an example,
now, In function objectToText, {foo : undefined} from console.log({foo : undefined}) is recognized as an object, but JSON.stringfy() cannot handle it properly.
Then how about extracting the name(foo in example) and value(undefined in example) from the arg Object and redefining the toString() function which can be called by JSON.stringfy() like below?

(This example doesn't work well, Im trying to find the proper way to extract the name and value...)
I already checked JSON.stringfy() on the 146th line of runtime.js find and call this redefined toString function(above) like below.

The '162 line' in above image is the log from the JSON.stringfy().
Look at the 'toString' part, it calls argToString() which is redefined well.

Possible to close this if irrelevant? @orta

I think there's still value in getting console.log({foo: undefined}) to show the foo: undefined


4.0 Kernel reference?

File: engine/userguide/storagedriver/overlayfs-driver.md, CC @mistyhacks
Is this ubuntu or for rhel and rhel started supporting overlay2 in the 3.10 kernel.  Can we make this clearer as there are multiple support documents pointing to different versions of the 7.4 kernel.  The prerequisites for deploying overlay2 do not match this document.

Closing this ticket due to its age, and the impending refactor. If you think this is in error, feel free to reopen. Thanks!


"is not assignable to" even after all necessary discriminated union checks are made

TypeScript Version:  3.5.1
Search Terms: is not assignable to, discriminated union
Code
export const enum PatternKind {
    Known = "Known",
    Unknown = "Unknown"
}

export type Pattern1 = {
    kind: PatternKind.Known;
    name: "Pattern1";
    pattern1_attribute: string;
};

export type Pattern2 = {
    kind: PatternKind.Known;
    name: "Pattern2";
    pattern2_attribute: string;
};

export type KnownPattern = Pattern1 | Pattern2;

export type UnknownPattern = {
    kind: PatternKind.Unknown;
    name: string;
};

export type Pattern = KnownPattern | UnknownPattern;

function getPattern(): Pattern {
    // TODO: implement
    throw new Error("");
}

const pattern: Pattern = getPattern();

if (pattern.kind === PatternKind.Known) {
    if (pattern.name === "Pattern1") {
        // Error, pattern1_attribute is not accessible
        pattern.pattern1_attribute = "foo";

        // Error, pattern is not assignable to Pattern1
        let pattern1: Pattern1 = pattern;
        pattern1 = pattern1;
    }
}

if (pattern.kind === PatternKind.Known) {
    // But for some reason, storing pattern in a KnownPattern variable first makes it work, even
    // though after the "pattern.kind === PatternKind.Known" above, the compiler is already
    // recognizing pattern to be a KnownPattern (which is why pattern can be assigned to the
    // KnownPattern variable by the way)
    const knownPattern: KnownPattern = pattern;

    if (knownPattern.name === "Pattern1") {
        // No error, pattern1_attribute is accessible
        knownPattern.pattern1_attribute = "foo";

        // No error, knownPattern is assignable to Pattern1
        let pattern1: Pattern1 = knownPattern;
        pattern1 = pattern1;
    }
}

Expected behavior: no compiler errors
Actual behavior: compiler errors
Playground Link:
http://www.typescriptlang.org/play/#code/KYDwDg9gTgLgBAYwgOwM72MgrgWzgBQEMYZgpkBpAS2QBM4BvAKDlbguQgHdk4BeOACIO3ZIIA0LNgFVkAa049+Q2QtGCmAXyZNQkWHBgBPMMALFS5AIzLmbOHJq0AXOZJlKTgHQieAbilWZEIcYFdBIndrQQD7MAsPKwB9CygqACMsUld0NOQAcwDNAN1waHhjUzdLZAAmW0CHJ1dImuo6H0VkWLZg0PDWj1qYxvioupSSNMzsuFyaQq0SvXLDEzNfZEHyZW3kGwAfaqHlsoNKs1UuvYb7RzoWhPJ22i8r0R6gkLC5mDzF4o6FbndbHHYCTY3I7vHh7EoAMywyAQMCoKDg+WAMD2AAoAJSPcaMRoAehJcAAKgB5AAiVNcVBwYAANsBQsgYI0YAALKDcODIYBcOAAUSgfKgOMEgjxRR0SDQ8DGNUJNWUmOxT2Q+JKVHhcBxyo8Xnu9D45rBng6mzxxPseoNRvIXj6ZnNAgiWqsMrt9jYZNF4ug4jgTv2kz+GSyZioqAFEHghAQCGAqFQGVZjTiWq8YeSqSjpGUgnhEAgIyz-vJYolIbDcFj8cTaao+WC6VZhgglqsldYrKVXtViWUYc+frzo694+02iYDsNOdN-AtexenVEtrsVbgACEsnBS1A5hBQnAoMBCKgUCH0NAFqGtQ3eIR2NcnwA3QhpQgdszwqgoHQOAcEIORUwbeAuGgOQQ2AD9MFJckeQgLB8m5OBCHhSxDG5MxBDDE0nBXAQ128TZBEw9IIAQkMeTMJAmSoVlj0bQhmQvQhaCMJDz2AJA2yoAAvB96xgbt0jMV9ISfHEuG5KgEAwxt5KMR8iQQQheEkzCWzbYB6HE3DgF4mSiS-H8-zgdI1PouAuEIIw8UaBVgLUWEtVcMy1QEMcdHtfUcXcrYc1dEihD2b0tz7OAAwAOW7Mha3Ump8ymQsYzjJMUxbP8YuCvZcy9CNpmjYtS3LEo-R3BK4CS4MHHfIk2L09tOyMyKYoHFLEmHaxlAKrVx2zcYbF86dGlnIA

This is a design limitation caused by the fact that discriminant narrowing only considers the declared type, rather than the current type of the identifier.
In your erroneous example you are relying on the composition of two discriminant narrowing's (pattern.kind and then pattern.name). In the other example you store the assigned the narrowed variable to a new identifier such that its declared type is the narrowed intermediate type (which is why that works).
Ideally this would just work as expected but I think the perf regressions would be significant.

And we don't even need the type annotation on the new variable:
if (pattern.kind === PatternKind.Known) {
    // And this works even if we don't declare the type
    const knownPattern = pattern;

    if (knownPattern.name === "Pattern1") {
        // No error, pattern1_attribute is accessible
        knownPattern.pattern1_attribute = "foo";

        // No error, knownPattern is assignable to Pattern1
        let pattern1: Pattern1 = knownPattern;
        pattern1 = pattern1;
    }
}

Also, could you give a short description of exactly what would cause the performance regressions?
Like, would it lead to a lot of second-, third-, etc. guessing during type inference? What of and/or where would it happen?

Synthesising the type for a property on a union, such as pattern.kind, is expensive and happens at each discriminant check. Caching makes this bearable, but you need to make sure that you consistently hit the cache - TypeScript does this by always narrowing from the declared type.

Tracked by #30557


Ability to open main window while running VMs

I sometimes close the main UTM window after opening a VM and currently, there's no way to open it without closing all VMs and opening the application again.
Please consider providing an option to switch back to the main window in the menu bar or automatically display it on reactivation (app icon clicked on the dock or launchpad).

Duplicate of #3632


Use the GraphQL mutation API directly when adding a user to a team

Same as https://github.com/buildkite/frontend/pull/251 but for the users section

@toolmantim fyi


Just not working

This is an amazing project and I could use this really badly.
The problem is, it is just not working. I checked everything: used the workspace version of TS in vscode, added the plugin declaration accordingly to tsconfig.json and even tried to inspect the tsserver.log but found nothing unusual. The plugin seemed to have just started fine but I still get the "Cannot find module './example.yaml' or its corresponding type declarations." message.
I want this plugin because I tried to get yaml support for typescript imports in a nextjs project. After many considerations a used yaml-loader to load the files and it works fine with the webpack config. I understand that a working bundler has nothing to do with the typescript interpreter and I found a link to this repo in https://github.com/eemeli/yaml-loader/issues/29. It would be absolutely fantastic, if this package could even support the same config as the loader or come with the loader altogether, but that is not the current issue.
The only difference in my case is a new typescript version. Currently I am using 5.5.3. Is there any chance that this could be fixed? I noticed that there are hardly any projects that solve the issue of importing yaml into typescript and I really want this functionality :)

Opened a PR that "works on my machine" (tm). Feel free to give it a try #2


fix: set enableScripts to false by default

Proposed change
Disable the postinstall scripts of third parties by default
It can be re-activated for a specific package using dependenciesMeta if need be
Related issues

:bug: Fixes #(issue)
:rocket: Feature #(issue)

Can you indicate the reason in the comment of the PR (or link the related task)?


Refactor to create a core package

We want to refactor to create a core package along with packages targeting specific renderers such as react-three-fiber. From user level, a single renderer package can target multiple versions automatically by detecting their package.json. In this case the react-three-fiber package will target v8 or v9 based on detection. Internally, we will keep them as separate packages, if possible, for clean typing.

How do you imagine different renderers interplaying with the editor itself? What is in core, the ast manipulation, service, editor ui? Is the use case to handle more webgl based renderers or web as well?

I believe Nikhil has plans to try and support anything that can be represented as React component. A refactor was already done with ecc24d05e8f637e16e1e227f6f19510a6ecb3d3c, but for this to be considered closed we will need to complete some kind of support for v8/v9 packages.


[BUG] 11-blue-green.md file does not exsist

Describe the bug
In the last statement of this article (https://github.com/Azure/AKS-Landing-Zone-Accelerator/tree/main/Scenarios/AKS-Secure-Baseline-PrivateCluster/Terraform#getting-started) you refer to 11-blue-green.md file which does not exsists. https://github.com/Azure/AKS-Landing-Zone-Accelerator/blob/main/Scenarios/AKS-Secure-Baseline-PrivateCluster/Terraform/11-blue-green.md
To Reproduce

Go to web page: https://github.com/Azure/AKS-Landing-Zone-Accelerator/tree/main/Scenarios/AKS-Secure-Baseline-PrivateCluster/Terraform#getting-started
Go down to section https://github.com/Azure/AKS-Landing-Zone-Accelerator/tree/main/Scenarios/AKS-Secure-Baseline-PrivateCluster/Terraform#deploying-blue-green-aks-clusters
Look for sentence: "The details about the blue green deployment are documented here"
Click in the provided link to 11-blue-green.md file.
You will see the file does not exist.

Expected behavior
The file should exist in the GitHub repo.

#145 closes this


DMA Writes

Hi - first I would like to thank you for the great work.
I was wondering if the SD FS Libraries can support DMA writes and would it improve write speeds?
Not sure if it is possible to come up with an interface that can be supported by underlying hardware such as Arduino, Teensy, ESP32 etc.

Many boards are supported with DMA.  Custom drivers are in the src/SpiDriver/ folder.
Write speed mainly depends on dedicated SPI access to an SD card.
SD card emulate 512 byte sectors in 512 KiB flash pages.  To optimize write speed you must maintain access to the SD.  If you release access, the entire 512 KiB page is programmed.  If you write another 512 byte virtual sector, data must be moved to the a new flash page.  The result can be 400 KB/sec write performance for a 90 MB/sec SD.  There may be 200 MB/sec internal data movement in the SD and extreme flash wear.
So DMA may slow write speed if it requires release of the SD.  On Teensy with 4-bit SDIO, DMA can be 40 times slower than programmed transfers to a FIFO.
In short, SD cards are complex and DMA may not be very helpful.
Often DMA requires 4-byte aligned data which is incompatible with files since they are byte aligned.  Even if a write buffer is 4-byte aligned you can't use DMA unless the file position is a multiple of four.


Does "Transformer Architecture Marchine Learning Model" is supported on RubixML ???

Hello (again).
ChatGPT is built on Transformer Architecture Machine Learning Model .
So, does RubixML support this Transformer Architecture algorithm to do something like an intelligence Question & Answer project like ChatGPT in PHP using RubixML ???
If so, how to access its tutorial ???
Thanks to answer.

Hi @chegmarco1989, currently we just have feed-forward networks without attention implemented in Rubix ML.

Ok. Thanks for your feedback

You're welcome! If you're looking for a place to get started with Transformer networks, I highly recommend Andrey Karpathy's NanoGPT project as a place to get started.
https://github.com/karpathy/nanoGPT

Thanks


A "center" option for interactive shapes

Drawing lines (Line2D), polygons (Polygon2D) and curves (Path2D) on the editor can lead to the figure being displaced from the node center and sometimes is hard to re-position them.
A (scene editor) way to center the figure to the origin of the node could be really useful.
ps: This "center" (or arbitrary "displace") option could be part of Vector arrays too to make it more generic but I don't know if there are plans to give extra functions to these kind of arrays.

Note: the editors for these three nodes are not generic at all, they are very similar but their common parts is copy/pasted

Feature and improvement proposals for the Godot Engine are now being discussed and reviewed in a dedicated Godot Improvement Proposals (GIP) (godotengine/godot-proposals) issue tracker. The GIP tracker has a detailed issue template designed so that proposals include all the relevant information to start a productive discussion and help the community assess the validity of the proposal for the engine.
The main (godotengine/godot) tracker is now solely dedicated to bug reports and Pull Requests, enabling contributors to have a better focus on bug fixing work. Therefore, we are now closing all older feature proposals on the main issue tracker.
If you are interested in this feature proposal, please open a new proposal on the GIP tracker following the given issue template (after checking that it doesn't exist already). Be sure to reference this closed issue if it includes any relevant discussion (which you are also encouraged to summarize in the new proposal). Thanks in advance!


Feature: Add GitHub Copilot as model provider

Issue
Hello!
Please add GitHub Copilot as model provider.
Should be possible like this: https://github.com/olimorris/codecompanion.nvim/blob/5c5a5c759b8c925e81f8584a0279eefc8a6c6643/lua/codecompanion/adapters/copilot.lua
Idea taken from: https://github.com/cline/cline/discussions/660
Thank you!
Version and model info
No response

Seems like it's a standard OpenAI-style API, with an token that is refreshed periodically using a long-lived refrehs token, OAuth style.
The tricky part seems to be actually getting the refresh token in the first place. All the Neovim plugins rely on authenticating through copilot.vim or copilot.lua, which use Github's closed-source Javascript language server. Then once the initial auth step is done, they copy the refresh token from the location in the filesystem where it gets saved and go from there.
The good news is that the refresh token doesn't really seem to ever expire. My token at ~/.config/github-copilot/hosts.json is two years old and still works even though my Copilot subscription lapsed for a time in between.
If we're ok with having Aider pull its refresh token in a similar way, then this should be pretty easy to implement, but the initial setup for the user may be a bit of a hassle.
For additional reference, here's Avante.nvim's implementation which is pretty similar to the one in CodeCompanion.

Great, that doesn't look too complicated, thanks.
Haven't looked into it, is the JS language server the only way to get the token?
Anything we can do with these: https://github.com/settings/tokens?

Haven't looked into it, is the JS language server the only way to get the token?

You can use this code to get a token directly from the API:
`    resp = requests.post('https://github.com/login/device/code', headers={
'accept': 'application/json',
'editor-version': 'Neovim/0.6.1',
'editor-plugin-version': 'copilot.vim/1.16.0',
'content-type': 'application/json',
'user-agent': 'GithubCopilot/1.155.0',
'accept-encoding': 'gzip,deflate,br'
}, data='{"client_id":"Iv1.b507a08c87ecfe98","scope":"read:user"}')
# Parse the response json, isolating the device_code, user_code, and verification_uri
resp_json = resp.json()
device_code = resp_json.get('device_code')
user_code = resp_json.get('user_code')
verification_uri = resp_json.get('verification_uri')

# Print the user code and verification uri
print(f'Please visit {verification_uri} and enter code {user_code} to authenticate.')

while True:
    time.sleep(5)

    resp = requests.post('https://github.com/login/oauth/access_token', headers={
        'accept': 'application/json',
        'editor-version': 'Neovim/0.6.1',
        'editor-plugin-version': 'copilot.vim/1.16.0',
        'content-type': 'application/json',
        'user-agent': 'GithubCopilot/1.155.0',
        'accept-encoding': 'gzip,deflate,br'
        }, data=f'{{"client_id":"Iv1.b507a08c87ecfe98","device_code":"{device_code}","grant_type":"urn:ietf:params:oauth:grant-type:device_code"}}')

    # Parse the response json, isolating the access_token
    resp_json = resp.json()
    access_token = resp_json.get('access_token')

    if access_token:
        break

print('Authentication success: '+access_token)

`

Haven't looked into it, is the JS language server the only way to get the token?

This code can get the token from github api. Note that it register itself as copilot.vim, as I don't know if copilot allows for other third part clients.
 resp = requests.post('https://github.com/login/device/code', headers={
'accept': 'application/json',
'editor-version': 'Neovim/0.6.1',
'editor-plugin-version': 'copilot.vim/1.16.0',
'content-type': 'application/json',
'user-agent': 'GithubCopilot/1.155.0',
'accept-encoding': 'gzip,deflate,br'
}, data='{"client_id":"Iv1.b507a08c87ecfe98","scope":"read:user"}')

# Parse the response json, isolating the device_code, user_code, and verification_uri
resp_json = resp.json()
device_code = resp_json.get('device_code')
user_code = resp_json.get('user_code')
verification_uri = resp_json.get('verification_uri')

# Print the user code and verification uri
print(f'Please visit {verification_uri} and enter code {user_code} to authenticate.')

while True:
    time.sleep(5)

    resp = requests.post('https://github.com/login/oauth/access_token', headers={
        'accept': 'application/json',
        'editor-version': 'Neovim/0.6.1',
        'editor-plugin-version': 'copilot.vim/1.16.0',
        'content-type': 'application/json',
        'user-agent': 'GithubCopilot/1.155.0',
        'accept-encoding': 'gzip,deflate,br'
        }, data=f'{{"client_id":"Iv1.b507a08c87ecfe98","device_code":"{device_code}","grant_type":"urn:ietf:params:oauth:grant-type:device_code"}}')

    # Parse the response json, isolating the access_token
    resp_json = resp.json()
    access_token = resp_json.get('access_token')

    if access_token:
        break

print('Authentication success: '+access_token)

Thanks for trying aider and filing this issue.
This sounds like it would require using a undocumented API or abusing a documented API for an off-label purpose?

@RodolfoCastanheira Great, that's looks like a simple solution. We should have all the pieces then?
@paul-gauthier I don't know, whether it's undocumented or would be off-label. I mainly forwarded the idea from Cline (see op) and also made the same suggestion to LiteLLM (see mention above).

I think there's a decent argument to be made that it's acceptable, if not officially supported.

Copilot lets you make "Extensions" which are [allowed to call the chat endpoints. Here's an official example from Github that does that
Elsewhere in the extensions documentation, they mention that the chat endpoint is rate-limited, so the potential for abuse is low.

The main difference between the extensions and what Aider (and the other existing, unofficial integrations) would do is around the auth token management. For extensions the tokens are automatically managed for you and the short-lived access token is passed to each call to the extension code. But in both cases, it's using an OAuth style flow that authenticates as your Github user, and that token stops working if you stop paying.
I can understand the worry for a high-profile project like Aider doing an integration like this. Hopefully this helps clear it up some.

Aider relies on litellm for integrations to LLM API providers, so I think it would be best to focus on getting it implemented there.
That said, it seems unclear that Copilot would sanction this sort of use of their API. So I'm not sure it would be appropriate for litellm (or aider) to add this sort of support.
I'm happy to be shown something that would clarify that this would be a legitimate use of the copilot API.

I've checked the usage policy[1] and the official forum, but couldn't find anything that says third-party integrations are either allowed or forbidden. When someone asks for help with an unofficial integration, the GitHub staff just lets the community respond (they don't jump in and say "no, you can't do that" or "we don't support that").
It seems like personal use for coding is okay, as long as you're not getting out of hand. And it looks like these unofficial integrations are tolerated, even if this usage is not officially endorsed. The silence on the matter seems like a deliberate choice.
[1] https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features#github-copilot

Here's the official documentation on how agents should use their API: https://docs.github.com/en/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent
I think it's quite a strong sign that they allow such usage.

I'm labeling this issue as stale because it has been open for 2 weeks with no activity. If there are no additional comments, I will close it in 7 days.Note: A bot script made these updates to the issue.

Any update?

The docs above explain how a GitHub Copilot Agent can access the API. I see no indication that 3rd party tools like aider can use it.
Please correct me if I am misunderstanding the docs.

Please correct me if I'm wrong, but my understanding is that in worst-case scenario Aider would need its "gh-copilot-proxy-agent" that would basically proxy requests to LLM from Aider. Main point is that Aider is a great agent and it would be in the spirit of their manual to make it compatible with their APIs one way or another.

I vote in favor. This integration will be really useful for those who already have a Copilot subscription. Regarding “unofficial” integrations, Zed offers Copilot integration for both code completion and chat. They utilize copilot.vim.

I also want to use the github copilot model from aider.
However, I would like to add a note about copilot.vim as an example, that the author, tpope, is an employee of github and is not considered to be using it without permission.
If you want to follow the official policy, you could register aider as a copilot extension and use it as an agent, like @aider xxxx.


⚠ File access has degraded performance

In c3b16ef, File access (https://fyle.uk/file/fish) experienced degraded performance:

HTTP code: 200
Response time: 2754 ms

Resolved: File access performance has improved in 7f268c6 after 10 minutes.


Move binding scan source filter into param setter

https://github.com/JujuAdams/Input/commit/2011a24ded0352e11aaa215f6b2884b9f2d43fe9