Atari disk image with DaynaPort network setup needed

I would like to test the DaynaPort emulation with an Atari TT, but I have failed with setting this up. This is why I am interested in a disk image with a working DaynaPort setup. A plain TOS setup without MiNT is preferred, but not required. The disk image should just contain the bare essentials, including software I can test the connection with.

@uweseimet I've put together some information on how I got this working on my ATARI TT030 with STiNG: https://www.atari-forum.com/viewtopic.php?p=438157#p438157
If you can't get the setup to work with this information I can try to upload the disk image with my working setup somewhere sometime next week.

@fdanapfel Thank you! I am going to test this most likely tomorrow and will update this ticket with my results.

@fdanapfel With your instructions I was quite successful, and piscsi is now receiving SCSI commands for the daynaport when STiNG initializes. The logs look similar to how they look like when a Mac is connected. DHCP does not appear to work yet. The SYSINFO tool says that the TT has IP address <IP_ADDRESS>.
@rdmark https://github.com/PiSCSI/piscsi/wiki/Dayna-Port-SCSI-Link was not fully up to date anymore. I updated the path to the bridge configuration, but there may still be something else that has changed: There was no /etc/dhcpcd.conf file on my Pi running bookworm. Maybe easyinstall would have installed it because one of the packages it installs depends on it. When not using easyinstall you have to manually install dhcpcd. Maybe this should be mentioned on the Wiki.
After installing dhcpd and following the instructions for the wired setup "brctl show" does not list eth0:
bridge name     bridge id               STP enabled     interfaces
piscsi_bridge           8000.6a650450e792       no

After attaching SCDP it says:
bridge name     bridge id               STP enabled     interfaces
piscsi_bridge           8000.6a650450e792       no              piscsi0

Any idea what's still missing?
"ip addr show" says:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet <IP_ADDRESS>/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:98:c9:d2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5fcc:c54f:67f3:bd6a/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:98:c9:d3 brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/24 brd <IP_ADDRESS> scope global dynamic noprefixroute wlan0
       valid_lft 3016sec preferred_lft 3016sec
    inet6 2a02:8071:2284:5340::c4ab/128 scope global dynamic noprefixroute
       valid_lft 42620sec preferred_lft 42620sec
    inet6 fe80::30cf:c63f:6981:b6c6/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::653e:8185:a9d7:9ce1/64 scope link
       valid_lft forever preferred_lft forever
4: piscsi_bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 6a:65:04:50:e7:92 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::dea6:32ff:fe98:c9d2/64 scope link
       valid_lft forever preferred_lft forever
5: piscsi0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master piscsi_bridge state UNKNOWN group default qlen 1000
    link/ether 6a:65:04:50:e7:92 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::6865:4ff:fe50:e792/64 scope link
       valid_lft forever preferred_lft forever

That's an interesting find. I think dhcpcd used to be installed by default in Buster and Bookworm, but isn't anymore in Bookworm. Let me put up a PR to add it to the list of packages to install in easyinstall.sh

After installing dhcpd and following the instructions for the wired setup "brctl show" does not list eth0:

That's odd. I've never seen this behavior before. Is this on an RPi or Linux PC?

On a Pi running bookworm.

@rdmark The web tests are failing?

Is the piscsi_bridge config file in /etc/network/interfaces.d/?

Yes, it is.

@rdmark The web tests are failing?

Yes, but I think it's an issue with the github runners:
2.258 --2023-11-10 09:58:54--  https://github.com/rdmark/hfdisk/archive/refs/tags/2022.11.tar.gz
2.258 Resolving github.com (github.com)... <IP_ADDRESS>
2.260 Connecting to github.com (github.com)|<IP_ADDRESS>|:443... connected.
2.362 ERROR: The certificate of 'github.com' is not trusted.
2.362 ERROR: The certificate of 'github.com' doesn't have a known issuer.

I saw this before, a few weeks ago, on one of @nucleogenic 's PRs I think.

@rdmark I double-checked everything, but there is not more to do than copying piscsi_bridge and updating dhcpd.conf, isn't it? After a reboot eth0 is not listed by brctl.

And the correct network interface is defined in /etc/network/interfaces.d/piscsi_bridge, I assume? (The default is eth0 so I would expect so.)

auto piscsi_bridge
iface piscsi_bridge inet dhcp
        bridge_ports eth0

Then there's no additional setup step that I'm aware of that's missing.
@benjamink Are you running the latest Raspberry Pi OS Bookworm, or the older Bullseye, on your RPi?

@rdmark He is running bullseye, I think he said so. I can run a test on bullseye later.

@fdanapfel With your instructions I was quite successful, and piscsi is now receiving SCSI commands for the daynaport when STiNG initializes. The logs look similar to how they look like when a Mac is connected. DHCP does not appear to work yet. The SYSINFO tool says that the TT has IP address <IP_ADDRESS>.

Glad those instructions helped! As far As I know STiNG does not support DHCP, so you always need to configure a static IP via the STiNG control panel (which is necessary anyway if the WiFi interface is used on the Pi for the Daynaport).
If you use the STiNG archive I've mentioned in my instructions there is a ping.prg in the TOOLS directory of STiNG that can be used to verify that the network connection is actually working btw.

@uweseimet I filed https://github.com/PiSCSI/piscsi/issues/1331 to follow up on the network bridge investigations.

@fdanapfel Yes, the ping and traceroute tools are the ones I am currently using for testing. Somewhere it was mentioned that CAB requires a particular overlay. Do you know where to get it from? And one more question: Does STiNG work with MagiC?

@benjamink Are you running the latest Raspberry Pi OS Bookworm, or the older Bullseye, on your RPi?

Just hopping in to confirm that my PiSCSIs are currently using Bullseye.

@fdanapfel Yes, the ping and traceroute tools are the ones I am currently using for testing. Somewhere it was mentioned that CAB requires a particular overlay. Do you know where to get it from? And one more question: Does STiNG work with MagiC?

For the overlay for CAB, please check https://breakintochat.com/blog/2017/09/05/web-browsing-on-the-atari-st-with-a-cosmosex/ and http://storage.atari-source.org/atari/mirrors/kurobox.serveftp.net/internet/cabovl/
Sorry, haven't used MagiC for decades (I actually only used MagiCMac), therefore I don't know if it works with STiNG. But I think I saw it mentioned somewhere that MagiC has its own network stack (MagicNet).

@fdanapfel After switching to bullseye the bridge is now working, and in the piscsi log I can see that the daynaport emulation is constantly being pulled for packets. sysinfo shows that the TT has IP <IP_ADDRESS>, but traceroute and ping (I tried <IP_ADDRESS>, which can be pinged from elsewhere) are not working. Any idea what I may be missing? route.tab looks fine to me.

@uweseimet Does pinging the gateway of that network (<IP_ADDRESS>) work?
If not then the issue is most likely with the ROUTE.TAB file as far as I can remember (sorry, it's been a while since I last used the Atari TT with the PiSCSI, since I've now switched to a BlueSCSIv2 which also supports the Daynaport emulation if a Raspberry Pi Pico W is used).

@fdanapfel Pinging the gateway does not work, but I think I know now why. (I'm not a networking expert.) The <IP_ADDRESS> network only exists when the bridge is set up for wlan0. In my case it's currently eth0, and the Atari most likely gets its IP in the regular local network, in my case <IP_ADDRESS>. I guess I will have to configure a static IP to be asigned to the MAC STiNG uses. Not sure though, how the PI's dhcpdcd DHCP and the DHCP of my regular router can both provide IPs for the <IP_ADDRESS> network.

I will keep this ticket open until I have also managed to get everything running with wlan0 instead of eth0.

@fdanapfel Can you recommend an ftp client?

@uweseimet Take a look at https://www.atari-forum.com/viewtopic.php?t=34155 or https://www.janatari.de/atari-firebee/anwender-software/litchi-ftp-client/

@fdanapfel Thank you, I will. I also found pftp, and was able to successfully connect to an ftp server.

With wlan0 I was also succesful. @fdanapfel Once again thank you for your help. Using my Atari with the daynaport is a great help when testing changes. Now that I know how to configure STiNG for the daynaport I will try again to also get it working with my Riebl card. Till now I could only use it with Linux-68k and Atari's SVR4. The last time I tried to use it with STiNG I had no success.

@uweseimet Glad to hear that it is working and happy that I could help.
Good luck with the Riebl card. Would love to have one of those, but its next to impossible to find them nowadays. I‘ve managed to get a Pams Net card a while ago, but could not get it to work with either STiNG, MiNT or Atari SVR4 ☹

As far as I know there is no ASV driver for the Pams Net card.
I have tried to set up the RIebl card with STING, but the CPX crashes with a bus error when doing that. This is what I also observed when I tried it the first time long ago. There might just be a bug in the CPX, but it could also be a bug in ETHER.STX, for instance. It should be possible to manually set up STING.PRT, but I do not know how it would have to look like regarding the card type/jumperr settings (VME TT/MegaSTE etc.). I expect information on this in STING.PRT.

@uweseimet Yepp, the only supported network card for ASV unfortunately seems to be the Riebl cards 😩
Not sure if you are aware of this, but the source code for STiNG is available at https://github.com/th-otto/STinG
Maybe this is useful for you to figure out how to get it working with your Riebl card.

@fdanapfel I was not aware of that, indeed. Thank you. It's even for Pure C, which is fine for me. For Atari software I would not want to work with GCC, neither native nor as a cross compiler.

@uweseimet The sources of the DaynaPort driver for MiNT are available as part of FreeMiNT: https://github.com/freemint/freemint/tree/master/sys/sockets/xif/daynaport
Looks like they are from the same person who created the driver for STiNG, so maybe they are useful even if the Source of the STiNG driver isn't available anymore.

@fdanapfel :) Yet another interesting link, thank you.

@fdanapfel With a patch HDDRIVER can map SCSI IDs to LUNs of ID 0. On my TT the DaynaPort driver now also works when the emulation is assigned a LUN > 0. This is probably interresting when using the internal host adapter of the MegaSTE, which only supports a single SCSI ID. I do not have a good setup for testing this with a MegaSTE, though.
Do you know a tool for the Atari that can patch binaries and apply binary patches?

@uweseimet Sorry, no I don't know of any such tool.
Over on https://www.atari-forum.com/viewtopic.php?t=43204 somebody was trying to get the DaynaPort emulation that is now also available on the BlueSCSIv2 to work with a MegaSTE, with the BlueSCSIv2 attached to the internal ACSI to SCSI adapter.  But the problem seems to be that at least the DaynaPort driver for STing only is able to use LUN0, and even with the MapLunsToIDs of the BlueSCSIv2 it is not possible to get the DaynaPort driver to recognize the emulated DaynaPort adaper when the internal ACSI to SCSI adapter of the MegaSTE is used: https://www.atari-forum.com/viewtopic.php?p=453610#p453610

@fdanapfel Yes, the problem with BlueSCSI is identical with what you observe with PiSCSI. This is something that must be resolved on the Atari side. BlueSCSI/PiSCSI cannot do anything about it.

@fdanapfel There is a performance issue I noticed with the MegaSTE (but ACSI i general is affected) where a patch to BlueSCSI or PiSCSI would help: ACSI/DMA can only transfer multiples of 16 bytes. Any excess bytes are stuck in a FIFO. For hard drive sectors this is not an issue. But with commands where the number of bytes returned is not a multiple of 16 an additional SCSI command has to be sent in order to flush the buffer..
With the DaynaPort this is quite an issue, because the drivers (both Mac and Atari) poll for network data several times per second. Usually the amount of data returned is not a multiple of 16. With ACSI this effectively doubles to number of SCSI commands sent per second. In the piscsi logs I can see that for ACSI almost always two commands are needed for each polling cycle. Sending just one kind of command several times per second will definitely not make the MegaSTE faster. Doubling the amount of commands makes things even worse.

@fdanapfel Instead of a patched HDDRIVER there is a tool for the AUTO folder now. No patching required anymore.


Releaser 0.6.0+ cannot release Releaser

Releaser 0.6.0+ does not transform the assembly JAR needed to run Releaser at a later date

Fixed in Releaser 0.7.0


Lost "matchSound" and "spellSound" level types in development and production

When checking Thai in development, I noticed "matchSound" and "spellSound" levels in the levelgen show the letters in the UI bubble above the monster when it should be only the play button (they're only supposed to hear the audio without the visual cue above the monster in these level types).
I went and checked a production language, Afrikaans, that has "matchSound" and "spellSound" levels and noticed those are showing the letter in the balloon above the monster too...
Did we lose the ability to render these level types? Is the JSON getting overwritten in a way we don't want? ...?

UI issue - Here we are getting 2 play buttons in spell sound level types.

Issue is fixed this level type is proper.


app-git-stash on clean install fails

When doing a clean install of an app that uses git for the download, inc/app-git-stash.sh is called to stash the local changes.
If the git configs user.email and user.name are not set, this script fails and prints the following in stdout:
--->Git stashing any local changes made to Lazy Librarian...

*** Please tell me who you are.

Run

  git config --global user.email<EMAIL_ADDRESS>  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@test-VirtualBox.(none)')
Cannot save the current index state

--->Starting Lazy Librarian...

--->All done. Lazy Librarian installation complete.
For access details, run the Lazy Librarian Access Details utility.

This doesn't affect a clean install of the app, but could cause problems for updates.

This is still an issue.
However I'm looking to remove this as I don't think anyone will be using it.

Removed git Stashing


onchange, activeDropDownList  donot working

$form = ActiveForm::begin();
    echo Html::activeDropDownList($model,
                'client_key',
                ArrayHelper::map(ListClient::find()->all(), 'client_key', 'cli_stat_name_l'),
                ['prompt'=>'All Clients...'],
                ['onchange'=>'this.form.submit()']);
    ActiveForm::end();

activeDropDownList  onchange didnot working when have ['prompt'=>'All Clients...'],
I comment ['prompt'=>'All Clients...'],  it work

Q
A

Yii version
2.0.10

PHP version
PHP Version 5.6.3

Operating system
windows 7

Is your example above as it is in your code? If so you've got the options as two separate parameters which is why it'll work when you comment it out.
Try
echo Html::activeDropDownList(
    $model,
    'client_key',
    ArrayHelper::map(ListClient::find()->all(), 'client_key', 'cli_stat_name_l'),
    ['prompt'=>'All Clients...', 'onchange'=>'this.form.submit()']
);

@Alex-Code is right


Put the content of the docx file on the Shapeshifter Wiki

Is your feature request related to a problem? Please describe.
The docx file is not easy to cooperate on, as it's a binary format. Also currently it cannot be opened with Microsoft Word, it only works with LibreOffice
Describe the solution you'd like
I think it would be best if the information in the docx file is being transferred to the Shapeshifter Wiki. Some technical stuff might be usefull in a MD file in the repository
Describe alternatives you've considered
Everything in an MD file is also a possibility, but I think a wiki is more appropriate

Resolved by pull request https://github.com/shapeshifter/shapeshifter-specification/pull/67 and the great contribution of @nicorikken
Md was chosen. If the need for more information on the LFE Wiki still exists, please add this as a new issue (enhancement).


Wrong default rake task when generating a new gem using minitest

I just created a new gem using bundle gem with bundler 1.11.2 and had a minor issue with generated Rakefile: it still says the default task is :spec, whereas it should be :test.
Here is the generated Rakefile:
require "bundler/gem_tasks"
require "rake/testtask"

Rake::TestTask.new(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.test_files = FileList['test/**/*_test.rb']
end

task :default => :spec

And here is what I get if I run rake:
rake aborted!
Don't know how to build task 'spec'

Tasks: TOP => default
(See full trace by running task with --trace)

Because of course the spec task doesn't exist, changing spec to test in the last line fixes the issue :)

Can you provide steps to reproduce this?

Sure, It's funny I just tried with bundle gem --test=minitest yolo and in that case it works fine, so the problem is only with the first time prompt:
> rm ~/.bundle/config
> ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
> bundle -v
Bundler version 1.11.2
> echo -e "minitest\nn\nn" | bundle gem yolo
Creating gem 'yolo'...
Do you want to generate tests with your gem?
Type 'rspec' or 'minitest' to generate those test files now and in the future. rspec/minitest/(none): minitest
Do you want to license your code permissively under the MIT license?
This means that any other developer or company will be legally allowed to use your code for free as long as they admit you created it. You can read more about the MIT license at http://choosealicense.com/licenses/mit. y/(n): n
Do you want to include a code of conduct in gems you generate?
Codes of conduct can increase contributions to your project by contributors who prefer collaborative, safe spaces. You can read more about the code of conduct at contributor-covenant.org. Having a code of conduct means agreeing to the responsibility of enforcing it, so be sure that you are prepared to do that. Be sure that your email address is specified as a contact in the generated code of conduct so that people know who to contact in case of a violation. For suggestions about how to enforce codes of conduct, see http://bit.ly/coc-enforcement. y/(n): n
      create  yolo/Gemfile
      create  yolo/.gitignore
      create  yolo/lib/yolo.rb
      create  yolo/lib/yolo/version.rb
      create  yolo/yolo.gemspec
      create  yolo/Rakefile
      create  yolo/README.md
      create  yolo/bin/console
      create  yolo/bin/setup
      create  yolo/.travis.yml
      create  yolo/test/test_helper.rb
      create  yolo/test/yolo_test.rb
Initializing git repo in /home/bigbourin/yolo
> cd yolo
> bundle
> rake
rake aborted!
Don't know how to build task 'spec' (see --tasks)

Tasks: TOP => default
(See full trace by running task with --trace)
> tail -1 Rakefile
task :default => :spec

Was able to reproduce with v1.11.2 but unable to reproduce in master. I think this might have fixed it: d70de62bd2dd6a375c65b21a749ecf3a0050947e

@hughbien Seems like it, thanks!

Ok great :)


pexpect.exceptions.TIMEOUT

I'm executing a process that's running for a few minutes before printing some output. After a few seconds I got:
  File "/usr/lib/python2.7/site-packages/delegator.py", line 240, in chain
    data = c.out
  File "/usr/lib/python2.7/site-packages/delegator.py", line 91, in out
    self.__out = self._pexpect_out
  File "/usr/lib/python2.7/site-packages/delegator.py", line 79, in _pexpect_out
    result += self.subprocess.read()
  File "/usr/lib/python2.7/site-packages/pexpect/spawnbase.py", line 413, in read
    self.expect(self.delimiter)
  File "/usr/lib/python2.7/site-packages/pexpect/spawnbase.py", line 321, in expect
    timeout, searchwindowsize, async)
  File "/usr/lib/python2.7/site-packages/pexpect/spawnbase.py", line 345, in expect_list
    return exp.expect_loop(timeout)
  File "/usr/lib/python2.7/site-packages/pexpect/expect.py", line 107, in expect_loop
    return self.timeout(e)
  File "/usr/lib/python2.7/site-packages/pexpect/expect.py", line 70, in timeout
    raise TIMEOUT(msg)
pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x1bdb510>
searcher: searcher_re:
    0: EOF
<pexpect.popen_spawn.PopenSpawn object at 0x1bdb510>
searcher: searcher_re:
    0: EOF

There doesn't seem to be a way to control the timeout, is there?

I've created PR #403 to address this.  The run method will now take an optional timout parameter that will let you extend the length of time before it throws that error.

@erinxocon thanks! I added a PR to your branch to support the timeout parameter in chain() too

@gjedeer This issue is now fixed with the new 0.0.12 release.

Thank you! 🍻
On 9 June 2017 19:34:00 CEST, erinxocon<EMAIL_ADDRESS>wrote:

@gjedeer This issue is now fixed with the new 0.0.12 release.
--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
https://github.com/kennethreitz/delegator.py/issues/26#issuecomment-307451737

--
Sent from my Android device with K-9 Mail. Please excuse my brevity.

This can be closed now, no?

Yep, I think we're done here. Thanks @peterbe!


Rearrange struct keys and update schedule

https://app.asana.com/0/555089885850811/1205890385667025/f

lol at nothing reading those exceptions.
can you please make the same update to the TypeScript type at assets/ts/schedule/components/__schedule.d.ts?

Oh, we hard-code these things in two places? Why not?

@thecristen I'm not seeing a hardcoding of data in the TS file. Do you just mean the key order?


.success immediately triggers under IOS 11.3

What did you do?
In IOS 11.3, .success triggers immediately
What did you expect to happen?
It's expected that a callback will not be immediately triggered.
What happened instead?
Under 11.3, a .success handler is triggered immediately and provides a null result.
Alamofire Environment
Alamofire version:
4.7.2
Xcode version:
9.2
Swift version:
4
Platform(s) running Alamofire:
IOS 11.3 / 11.2
macOS version running Xcode:
Demo Project
Sample method:
class func getFloorConfig() {
        // get the floor configuration
        let configURL = primaryAPIURL + "api/ble/floors"
        let oHeaders: HTTPHeaders = [
            "Authorization": "Bearer " + auiOAuthAccessToken,
            "Accept": "application/hal+json"
        ]

        if (auiRawFloorData.count == 0) {
            // call API
            Alamofire.request(configURL, method: .get, parameters: [:], encoding: JSONEncoding.default, headers: oHeaders).responseString { response in
                switch response.result {
                case .success:
                    if let result = response.result.value {
                        let dataFromString = result.data(using: .utf8, allowLossyConversion: false)
                        let json = JSON(dataFromString!)

                        if (json["_links"] != JSON.null) {
                            // save the result string
                            print("floor config synch succesful")
                            rawFloors = result
                            auiRawFloorData = json

                        } else {
                            auiSynchSuccessful = false

                        }

                        // call the next in the chain
                        self.getRoomConfig()

                    }
                case .failure:
                    auiSynchSuccessful = false

                    // call the next in the chain, but set synchSuccessful false
                    auiSynchSuccessful = false
                    self.getRoomConfig()

                }

            }

        } else {
            // call the next in the chain
            print("floor config read from storage")
            self.getRoomConfig()

        }

    }

For the above method, under IOS 11.2, the success callback is triggered as expected.  Under 11.3, the success callback triggers immediately with an empty result set.

You should look inspect your HTTP traffic to see what's being sent in one OS versus the other. But in general you don't want to include empty parameters ([:]), instead you should pass nil. Also, GET requests don't normally want JSONEncoding for a parameter encoding, as many servers don't like that. Finally, you may want to add a validate() call before responseString, to ensure you're getting a response in the appropriate code range and with the correct type. You may be hitting an error scenario on the server.


Leg twist compenstation

Some people's legs twist when they bend or twist them, like on the pictures below:

We need to add a coefficient that can be configured when the person sits, that will compensate for the twist. The coefficient should untwist the leg based on the pitch of it. The compensation should be applied to the base rotation of the tracker.

Just coming in to document what I had previously toyed around with for this. I messed around with the skeleton data and offset the lower leg tracker rotation by a manually calibrated amount, multiplied by the bending of the knee, doing so I managed to somewhat consistently reduce the false rotation which resulted in significantly less foot sliding.
For the manually calibrated values, each leg had to have its own calibrated value, they were significantly different. The issues left to resolve for this are how it will be calibrated, whether it would need to be calibrated every time the trackers are put on, and how to compensate for the rotation of the upper leg.

 Leg twist compensation


What is the current proper way to config AucTex in straight?

@raxod502 What is the current proper way to config AucTex in straight? Before I moved
to straight all I did was ensure auctex  and had require tex and everything worked fine.
I took the suggestion in #240 and added latex, not sure if this the correct way or where
Tex-command-master command is found?
This is my current config:
(straight-use-package '(auctex :source el-get
                        :files ("*.el" "*.info" "dir"
                                "doc" "etc" "images" "latex" "style")))
(require 'tex-site)
(require 'preview-latex)

(use-package latex
  ;; :ensure auctex ; makes latex easier to use
  :straight auctex
  :demand t
  :init
  (setq TeX-PDF-mode t) ; compile tex as PDF
  (setq TeX-command-force "LaTex") ; Don’t ask for options like View, Latex etc..
  (setq TeX-view-program-list '(("zathura" "zathura %o"))
            TeX-view-program-selection '((output-pdf "zathura")))
  (add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
  (setq TeX-source-correlate-start-server t)
  (add-hook 'LaTeX-mode-hook
        (lambda ()
          (add-hook 'after-save-hook 'TeX-command-master nil t)))
  :config
  ;;(my/map-keys `(("C-c l l" ,#'Tex-command-master "pdf")) 'org-mode-map)
)

Originally posted by @rickalex21 in https://github.com/radian-software/straight.el/issues/240#issuecomment-1500990797

This works fine for me: https://github.com/radian-software/radian/blob/f403244e244ccca695ff6c73c62b1265e521afa7/emacs/radian.el#L3386-L3506
Are you encountering an issue with your configuration?

@raxod502 Sorry for the delay I did not see this notification. It seems to be working
fine now after a few loops that I had to through. I don't use Latex much so when I
do, I will come back and post here if I encounter any problems.
Speaking of loops..... I keep getting this message for my local packages.
They are my packages without git. When I edit my file I want it to native compile
automatically when I reload emacs.
Source file ‘~/.config/emacs/.cache/straight/build-28.2/my-pgk/my-pkg.el’ newer than byte-compiled file; using older file

I read that load-prefer-newer fixes this but then it's not native comp.
Here is the config, I am wanting to use my packages with straight. Just for the
record I'm not sure if I'm doing this right.
(cl-loop for pkg in (list
'my-pkg
'another-pkg
)
do
(straight-use-package
 (list pkg
       ;;:build '(autoloads compile native-compile info)
       :files (list (format "%s.el" pkg))
       :local-repo (format "/home/ritchie/.config/emacs/lisp/%s/" pkg) :type nil ))
(require pkg)
)

I did find three other similar issues, I am on the develop. This is my config.
(setq
  ;;Set `use-package' when it's started in verbose mode
  use-package-verbose t
  ;;Defer loading packages by default, use `:demand' to force loading a package
  use-package-always-defer t
  ;; Don't uncomment will break things.
  ;;straight-use-package-by-default t
  straight-base-dir (expand-file-name  ".cache/" user-emacs-directory)
  ;; Add Emacs version and the Git hash to the build directory to avoid problems
  straight-build-dir (format "build-%s%s" emacs-version
                              (if emacs-repository-version
                                (format "-%s" (substring emacs-repository-version 0 8)) ""))
 straight-repository-branch "develop"
 ;; Do not clone all project history, just the last worktree (--depth 1)
 straight-vc-git-default-clone-depth '(1 single-branch)
 ;; Do not slow startup by checking for package modifs, check only on demand
 straight-check-for-modifications '(check-on-save find-when-checking))

;; Bootstraping straight.el
(defvar bootstrap-version)
(let ((bootstrap-file (concat straight-base-dir "straight/repos/straight.el/bootstrap.el"))
      (bootstrap-version 6))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))

(straight-use-package 'use-package)

I could use my own code my/load but why not use straight right since I have
things that are looking like packages now right?
(defun my/load (feature)
  "Native Compile or require. Make sure use-package is not in the module."
  (if (native-comp-available-p)
      (progn (let* ((file (locate-library (format "%s" feature)))
                    (feln (concat (car native-comp-eln-load-path)"mine/"(file-name-sans-extension (file-name-nondirectory file))".eln")))
               (cond ( (not (file-exists-p feln)) (progn (load (native-compile file feln) nil t) )) ; eln does not exist
                     ( (file-newer-than-file-p file feln) (progn (load (native-compile file feln) nil t)))) ; file is newer than eln
               (load feln nil t)))
    (require feature)))

straight.el byte-compiles and native-compiles packages by default when they are built. If you are seeing that warning then something has gone wrong with that system. The first thing to check is if you can manually trigger rebuilds with M-x straight-rebuild-package. Then check the modification detection system settings in your configuration.

It does work with M-x straight-rebuild-package once I restart but when a file is
modified should it not automatically build and load the package on start up
automatically?

Then check the modification detection system settings in your configuration.

I have not done much with my configuration all the straight configuration is above.
I do not tweak straight outside of what it is show above.
There is another problem I had yesterday and I am not sure if it is a straight issue
but for some reason I get void-function org-clock-kill-emacs-query when trying
to quit emacs. I do not mess with the org code at all. As a work around:
(autoload 'org-clock-kill-emacs-query "org-clock")

I am not sure if straight was suppose to load this or this is an optional package. I did
not add this function to a hook. I am not sure why org or any one would hook this
function when org-clock.el is required.

I'm not sure I understand. Is it suppose to create a file in the straight/modified
directory? It's not creating a file.
To make the expression execute I did this:
(straight-register-repo-modification "one-mine")

I also tried this:
(straight-register-repo-modification "~/.config/emacs/lisp/one-mine/")

My code:
(cl-loop for pkg in (list
'one-mine
'two-mine
)
do
(straight-use-package
 (list pkg
       ;;:build '(autoloads compile native-compile info)
       :files (list (format "%s.el" pkg))
       :local-repo (format "/home/ritchie/.config/emacs/lisp/%s/" pkg) :type nil ))
(require pkg)
)

I am still getting the message:
Source file ‘/home/ritchie/.config/emacs/.cache/straight/build-28.2/one-mine/one-mine.el’ newer than byte-compiled file; using older file

I get the same message when modify other packages that are not mine under
git source control in straight/repos. I understand what I want will slow
down my startup time but that's ok because I don't modify things all the time,
only when I need to check on something or see how it works.

Oh, you're saying that even when evaluating (straight-register-repo-modification "one-mine") manually, there is no file created called ~/.emacs.d/straight/modified/one-mine? The file gets created for me. You should look into why that function is not creating a file, it seems pretty straightforward that it should just looking at its implementation.

It's hard for me to help because I don't have good insight into your environment. That's not your fault however, we should have tools for this. I have started https://github.com/radian-software/straight.el/pull/1110 to solve this problem and will get back to you with further diagnostic suggestions.

Thanks for all your help. If I figure something out I'll come back and post. I don't know what else
to mention. I think when I update with straight-pull-all it should automatically do this and not
warn about source files newer than build but not saying it's your fault, it's unknown what the
problem is for now...

Ok, I added https://github.com/radian-software/straight.el/pull/1110 and https://github.com/radian-software/straight.el/pull/1115 so that you could run again and I would have enough logs to find the problem. But while adding the logs I found the problem myself: https://github.com/radian-software/straight.el/pull/1116

it says compilation has finished

What does, exactly? Is this a message from straight.el? If so, what's the exact wording?


Fix scrollable TabBar jitters in the middle position

fixes TabBar with isScrollable set to true is broken
This regressed due to a tiny mistake in https://github.com/flutter/flutter/pull/146293
Code sample

expand to view the code sample
import 'dart:ui';

import 'package:flutter/material.dart';

/// Flutter code sample for [TabBar].

void main() => runApp(const TabBarApp());

class TabBarApp extends StatelessWidget {
  const TabBarApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: TabBarExample(),
    );
  }
}

class TabBarExample extends StatelessWidget {
  const TabBarExample({super.key});

  @override
  Widget build(BuildContext context) {
    final List<Tab> tabs =
        List<Tab>.generate(20, (int index) => Tab(text: 'Tab $index'));

    return ScrollConfiguration(
      behavior: ScrollConfiguration.of(context)
          .copyWith(dragDevices: <PointerDeviceKind>{
        PointerDeviceKind.touch,
        PointerDeviceKind.mouse,
      }),
      child: DefaultTabController(
        length: tabs.length,
        child: Scaffold(
          appBar: AppBar(
            title: const Text('TabBar Sample'),
            bottom: TabBar(
              isScrollable: true,
              tabs: tabs,
              tabAlignment: TabAlignment.start,
            ),
          ),
          body: TabBarView(
            children: <Widget>[
              for (int i = 0; i < tabs.length; i++)
                Center(
                  child: Text('Page $i'),
                ),
            ],
          ),
        ),
      ),
    );
  }
}

Before
https://github.com/flutter/flutter/assets/48603081/b7aa98a2-a6a5-431e-8327-859a11efa129
After
https://github.com/flutter/flutter/assets/48603081/0435719f-03d4-4d76-8b5a-532894fcf4a3
Pre-launch Checklist

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I read the Tree Hygiene wiki page, which explains my responsibilities.
[x] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[x] I signed the CLA.
[x] I listed at least one issue that this PR fixes in the description above.
[ ] I updated/added relevant documentation (doc comments with ///).
[x] I added new tests to check the change I am making, or this PR is test-exempt.
[ ] I followed the breaking change policy and added Data Driven Fixes where supported.
[x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Even though this fix works to some extent, it doesn't fix "TabBar with isScrollable set to true is broken" as with the changes proposed in this PR the TabBar jumps after swiping to Tab 3 and back to Tab 2:
https://github.com/flutter/flutter/assets/8590720/214a8321-1b83-4a9d-b9d4-bf1e83e01dc5

@PerLycke
Thank you so much for testing the PR code. I'm out of office today, I'll address your issue first thing tomorrow.

@TahaTesser I can confirm it now works as expected 👍


refactor: Refactor proof handling for ownership and borrowing

On a long enough timeline, we'll want to generate compressed proofs without dropping the associated RecursiveProof. This is for the purpose of re-starting the proof using the prior RecursiveProof, which at the moment can only be obtained through cloning prior to compression (which itself would be impossible prior to the companion PR used here).
The current approach witnesses that compression only requires a reference to the current proof, and returns a Cow: the only situation in which this would result in a clone is if:

we create a CompressedProof,
we call compress() on it,
we further perform a modification of the resulting CompressedProof that requires an owned value.
=> this flow seems unlikely.

In detail:

Updated compress function across various files to take &self instead of self, avoiding the drop of the RecursiveProof;
Adjusted dependencies in chain-server's Cargo.toml to use workspace versions, streamlining dependency management and increasing project consistency.

[!NOTE]
This depends on and requires the companion PR https://github.com/lurk-lab/arecibo/pull/364. CI is fully expected to fail on the cargo-deny job due to use of a fork (until companion PR is merged).

This is for the purpose of re-starting the proof using the prior RecursiveProof, which at the moment can only be obtained through cloning prior to compression

How come? #1209 accomplishes the above without such clone

How come? https://github.com/lurk-lab/lurk-rs/pull/1209 accomplishes the above without such clone

That's because #1209 drops the recursive proofs as it calls compress (which takes ownership of self, and does not return it in case of compression). Which is fine for #1209, since reusing the recursive proof after compression is not in scope there.


Blazor Web App

More of a question - would this be compatible with the latest .net 8 blazor web app projects?

Yes, it was built using the latest Blazor template on .NET 8:
dotnet new blazor


[hwloc] Added utility hwloc-info

I want to use hwloc to build POCL which requires hwloc-info.exe to determine the library version during configuration. The package now properly builds this utility executable under tools/hwloc.
Mentioning @codicodi @hkaiser for awareness. Would any one of you care to update the package to make it work on Linux? The _CRT_SECURE_NO_WARNINGS and _USRDLL look like awfully MSVC-specific defines. The Linux versions might as well use the original autoconf based build. Or does anyone have capacity to make proper CMake scripts for hwloc? I believe the Stellar Group has ample incentive to reduce the burden on building from source on all platforms.

Thanks for the PR and sorry for the long delay! LGTM (pending CI)
We typically do not install debug versions of tools, so I've removed that here. If it's critical that the debug version is installed, let me know and I can restore it :)

No, the debug version is not needed I believe. Fire away!


SSCS-10146 update sscs-common version

JIRA link (if applicable)
https://tools.hmcts.net/jira/browse/SSCS-10146
Change description
Update sscs-common version
Does this PR introduce a breaking change? (check one with "x")
[ ] Yes
[ ] No

Please remember to squash and merge lots of commits for very little


[WIP] Deps update - forked controller-runtime

This PR is used for running the on the current state.

There are (at least) two things that are prerequisites for the dependencies update to work:

[ ] https://github.com/kubernetes/kubernetes/pull/119000
[ ] A new helm release (3.13.0 is the next feature release and be on September 13, 2023.)

The latter is required, because there is an upstream bug (https://github.com/kubernetes/client-go/issues/1269) that causes a panic:
cd e2e && \
        LOGGING_OPERATOR_IMAGE="controller:local" \
        KIND_PATH="/home/orion/axoflow/logging-operator/bin/kind" \
        KIND_IMAGE="kindest/node:v1.23.17@sha256:f77f8cf0b30430ca4128cc7cfafece0c274a118cd0cdb251049664ace0dee4ff" \
        PROJECT_DIR="/home/orion/axoflow/logging-operator" \
        go test -v -timeout 20m .//...
# sigs.k8s.io/kustomize/kyaml/openapi
../../../go/pkg/mod/sigs.k8s.io/kustomize/kyaml@v0.14.1/openapi/openapi.go:683:33: cannot use doc (variable of type *"github.com/google/gnostic/openapiv2".Document) as *"github.com/google/gnostic-models/openapiv2".Document value in argument to swagger.FromGnostic
# k8s.io/kubectl/pkg/util/openapi
../../../go/pkg/mod/k8s.io/kubectl@v0.27.2/pkg/util/openapi/openapi_getter.go:36:42: cannot use &CachedOpenAPIGetter{} (value of type *CachedOpenAPIGetter) as discovery.OpenAPISchemaInterface value in variable declaration: *CachedOpenAPIGetter does not implement discovery.OpenAPISchemaInterface (wrong type for method OpenAPISchema)
                have OpenAPISchema() (*"github.com/google/gnostic/openapiv2".Document, error)
                want OpenAPISchema() (*"github.com/google/gnostic-models/openapiv2".Document, error)
../../../go/pkg/mod/k8s.io/kubectl@v0.27.2/pkg/util/openapi/openapi_getter.go:49:28: cannot use g.openAPIClient.OpenAPISchema() (value of type *"github.com/google/gnostic-models/openapiv2".Document) as *"github.com/google/gnostic/openapiv2".Document value in assignment
../../../go/pkg/mod/k8s.io/kubectl@v0.27.2/pkg/util/openapi/openapi_getter.go:78:46: cannot use oapi (variable of type *"github.com/google/gnostic-models/openapiv2".Document) as *"github.com/google/gnostic/openapiv2".Document value in argument to NewOpenAPIData
../../../go/pkg/mod/k8s.io/kubectl@v0.27.2/pkg/util/openapi/openapi.go:52:38: cannot use doc (variable of type *"github.com/google/gnostic/openapiv2".Document) as *"github.com/google/gnostic-models/openapiv2".Document value in argument to proto.NewOpenAPIData
?       github.com/kube-logging/logging-operator/e2e/common     [no test files]
?       github.com/kube-logging/logging-operator/e2e/common/cond        [no test files]
?       github.com/kube-logging/logging-operator/e2e/common/kind        [no test files]
FAIL    github.com/kube-logging/logging-operator/e2e/fluentd-aggregator [build failed]
FAIL    github.com/kube-logging/logging-operator/e2e/syslog-ng-aggregator [build failed]
FAIL    github.com/kube-logging/logging-operator/e2e/volumedrain [build failed]
FAIL
make[1]: *** [Makefile:166: test-e2e-nodeps] Error 1


Implement unit tests for basic features

Implement unit testing for basic operations.

@brech1 I think the best to write test is you who actually developed the Runtime.

We can defer this to 0.2 or 0.3 (marked 0.2 for now).
ATM we can leverage blackbox tests using sim circuit and the circom-mp-spdz.


add extras_require complete and test options

[x] Closes #553
[x] I am familiar with the contributing guidelines.
[x] Fully tested. Added and/or modified tests to ensure correct behavior for all reasonable inputs. Tests (usually) must pass on the TravisCI and Appveyor testing services.
[x] Updates entries to docs/sphinx/source/api.rst for API changes.
[x] Adds description and name entries in the appropriate docs/sphinx/source/whatsnew file for all changes.
[x] Code quality and style is sufficient. Passes LGTM and SticklerCI checks.
[x] New code is fully documented. Includes sphinx/numpydoc compliant docstrings and comments in the code where necessary.
[x] Pull request is nearly complete and ready for detailed review.

I'm not willing to make scipy, tables, etc. requirements for the upcoming 0.6.0 release. But I think we can use the setuptools extras_require option to at least make it a little easier for a few people. So people will be able to install all of the dependencies necessary for any feature by running
edited below here for clarity and future reference
pip install pvlib[optional]  # once released to pypi
pip install -e .[optional]  # works for development too, though escape brackets for zsh

I originally chose "complete" because that's what dask uses. See discussion below for reasons to changing to optional/doc/test/all.
Options can also be combined like this:
pip install -e .[optional,test]

@mikofski you are most qualified to review this!

LGTM:

create a virtualenv, install pvlib requirements and build a wheel

markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ virtualenv -p python3 venv

markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ . venv/bin/activate

(venv) markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ pip install numpy scipy siphon netcdf4 matplotlib pytest mock nose pytest-cov pandas ipython jupyter sphinx sphinx-rtd-theme numpydoc numba ephem pytest-mock tables nbsphinx pytz

(venv) markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ python setup.py bdist_wheel sdist

(venv) markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ ls dist/
pvlib-0.5.2+48.gf427a39-py3-none-any.whl
pvlib-0.5.2+48.gf427a39.tar.gz

(venv) markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ deactivate

create another virtualenv and install wheel with extra requirements [complete]

markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ virtualenv -p python3 venv-extras

markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ . venv-extras/bin/activate

(venv-extras) markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ pip list
Package    Version
---------- -------
pip        18.0
setuptools 40.2.0
wheel      0.31.1

(venv-extras) markmikofski@Suzannes-MacBook-Pro:pvlib-python (extras)$ cd

(venv-extras) markmikofski@Suzannes-MacBook-Pro:~$ pip install --no-index --find-links ~/Projects/pvlib-python/dist/ pvlib[complete]
Looking in links: /Users/markmikofski/Projects/pvlib-python/dist/
Collecting pvlib[complete]
Collecting six (from pvlib[complete])
  Could not find a version that satisfies the requirement six (from pvlib[complete]) (from versions: )
No matching distribution found for six (from pvlib[complete])
(venv-extras) markmikofski@Suzannes-MacBook-Pro:~$ pip install --find-links ~/Projects/pvlib-python/dist/ pvlib[complete]
Looking in links: /Users/markmikofski/Projects/pvlib-python/dist/
Collecting pvlib[complete]
Collecting pytz (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl
Collecting pandas>=0.14.0 (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/78/78/50ef81a903eccc4e90e278a143c9a0530f05199f6221d2e1b21025852982/pandas-0.23.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting numpy>=1.10.1 (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/a6/0a/2defbdd9bd3a436ee0642bb8d8a66d16e523122d33384a04548dcfab23ba/numpy-1.15.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting six (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting siphon; extra == "complete" (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/56/f5/2be03af9ac2911d4795ac69de86dbd1b48c404a7812a4bf1b00403eafda5/siphon-0.8.0-py2.py3-none-any.whl
Collecting scipy; extra == "complete" (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/a0/b6/70bf61c1badb5fea82d4c558e05e76c2dee5e77bb072fe465d7c7a87287d/scipy-1.1.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting ephem; extra == "complete" (from pvlib[complete])
Collecting tables; extra == "complete" (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/bc/5f/79643d50fcf927dcd4b3bd118062550fdcfbd247d63cad1dfb305c6852b5/tables-3.4.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting numba; extra == "complete" (from pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/fc/f6/1555a24d032c1ebe6db3e92796d5846e7d5b4337eeb53439d95fb4694fc2/numba-0.39.0-cp36-cp36m-macosx_10_9_x86_64.whl
Collecting python-dateutil>=2.5.0 (from pandas>=0.14.0->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl
Collecting requests>=1.2 (from siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Collecting beautifulsoup4>=4.6 (from siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/21/0a/47fdf541c97fd9b6a610cb5fd518175308a7cc60569962e776ac52420387/beautifulsoup4-4.6.3-py3-none-any.whl
Collecting protobuf>=3.0.0a3 (from siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/c7/27/133f225035b9539f2dcfebcdf9a69ff0152f56e0120160ec5c972ea7deb9/protobuf-3.6.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting numexpr>=2.5.2 (from tables; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/53/e4/4ea4e519ddbf8b2c26edccfba6a6011419208044c07f8e4f01b3fb3028ba/numexpr-2.6.8-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting llvmlite>=0.24.0dev0 (from numba; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/e7/ee/9e827a16b0f168b4e2da3efc8e3798fc3e4139f3196dafdf127b052c683d/llvmlite-0.24.0-cp36-cp36m-macosx_10_9_x86_64.whl
Collecting idna<2.8,>=2.5 (from requests>=1.2->siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl
Collecting urllib3<1.24,>=1.21.1 (from requests>=1.2->siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c53851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests>=1.2->siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee63644d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests>=1.2->siphon; extra == "complete"->pvlib[complete])
  Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Requirement already satisfied: setuptools in ./Projects/pvlib-python/venv-extras/lib/python3.6/site-packages (from protobuf>=3.0.0a3->siphon; extra == "complete"->pvlib[complete]) (40.2.0)
Installing collected packages: pytz, six, python-dateutil, numpy, pandas, idna, urllib3, certifi, chardet, requests, beautifulsoup4, protobuf, siphon, scipy, ephem, numexpr, tables, llvmlite, numba, pvlib
Successfully installed beautifulsoup4-4.6.3 certifi-2018.8.24 chardet-3.0.4 ephem-<IP_ADDRESS> idna-2.7 llvmlite-0.24.0 numba-0.39.0 numexpr-2.6.8 numpy-1.15.1 pandas-0.23.4 protobuf-3.6.1 pvlib-0.5.2+48.gf427a39 python-dateutil-2.7.3 pytz-2018.5 requests-2.19.1 scipy-1.1.0 siphon-0.8.0 six-1.11.0 tables-3.4.4 urllib3-1.23
(venv-extras) markmikofski@Suzannes-MacBook-Pro:~$ pip list
Package         Version
--------------- -----------------
beautifulsoup4  4.6.3
certifi         2018.8.24
chardet         3.0.4
ephem           <IP_ADDRESS>
idna            2.7
llvmlite        0.24.0
numba           0.39.0
numexpr         2.6.8
numpy           1.15.1
pandas          0.23.4
pip             18.0
protobuf        3.6.1
pvlib           0.5.2+48.gf427a39
python-dateutil 2.7.3
pytz            2018.5
requests        2.19.1
scipy           1.1.0
setuptools      40.2.0
siphon          0.8.0
six             1.11.0
tables          3.4.4
urllib3         1.23
wheel           0.31.1

odd I don't see netcdf4 in the virtualenv with the "complete" install, but it is a requirement of the building the docs and the forecast.py module
probably best to add it

for reference, here's my requirements.txt

Here's a link to the build: https://wholmgren-pvlib-python-new.readthedocs.io/en/extras/index.html
but none of the changes in this PR should effect the documentation build on readthedocs.
I'm wondering if we'd be better off with something like
pvlib[optional]  # scipy, tables, etc.
pvlib[doc]  # sphinx, etc
pvlib[test]  # pytest etc
pvlib[complete] or pvlib[all]  # all of the above, same as pvlib[optional,doc,test]

Yep, sorry fir cross posting
Great idea. Sounds good to me.

Ok @mikofski, now the changes in this PR do effect the doc build! Between wheels and readthedocs.org including numpy/scipy/matplotlib in its root environment, I think we're now better off using pip installs on RTD than conda envs. This PR consolidates the build requirements in one place (setup.py) and the builds seem to be faster (4-8 minutes instead of 12-15+).
Unfortunately, reconfiguring RTD has not fixed the ipython directive issue.

At some point does it make sense asking on Google groups make sense? Or searching SO?

Well I had issues with it locally so not sure what to ask specific to rtd.
On Sun, Sep 9, 2018 at 8:00 PM Mark Mikofski<EMAIL_ADDRESS>wrote:

At some point does it make sense asking on Google groups
https://groups.google.com/forum/m/#!forum/read-the-docs make sense? Or
searching SO https://stackoverflow.com/questions/tagged/read-the-docs?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/pvlib/pvlib-python/pull/566#issuecomment-419773799,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AELiR0B7HKyYRyVBjcpjyPjBR1cxsbxXks5uZdW7gaJpZM4WeAwk
.

@mikofski are you happy with the latest changes here? You are the active contributor that is most likely to take advantage of this on a regular basis, so want to make sure you're happy with it. I'm ready to merge if you still approve.
The latest doc build (still on conda) now shows the same ipython behavior as in the build of my fork's branch. I think we should go ahead with changing the pvlib RTD configuration to use wheels.

LGTM, if I have a chance, I'll try to figure out what's going on with ipython  directive, maybe there's an alterate way to do the doctest, but for now I think this is fine. Thanks again! OK with me to merge ...


Update maintainers.yml

Please confirm this pull request meets the following requirements:

[x] I followed the contributing guidelines: https://github.com/github/india/blob/main/CONTRIBUTING.md.

Which change are you proposing?

[ ] Adding/updating open source project/s
[x] Adding/updating maintainer/s

Adding/updating open source project/s

[x] The project was built in or receives significant contributions from India
[x] The project has at least 100 stargazers

Why should this open source project be featured?

Please replace this line with an explanation of why you think these changes should be made.

Adding/updating maintainer/s

[x] Maintainer's location on their GitHub profile indicates as India
[x] Maintainer has approved this PR to be included on the website

What open source project/s does the individual maintain?
https://github.com/SigNoz/signoz

Something that does not neatly fit into the binary options above

[ ] My suggested edits are not about an existing page, or at least not a single one

Please note: we will close your PR without comment if you do not check the boxes above and provide ALL requested information.

Sure @mvkaran :-D


Add Glossary to Academic

Feature Request
Is your feature request related to a problem? Please describe.
It is not related to a problem.
Describe the solution you'd like
I think a glossary would be a natural function for Academic.
I have seen that there is a Hugo function for this, called dict, but Academic saved me a lot of work and I didn't need to struggle with functions to create my website, so I don't know how to add dict to Academic.
Describe alternatives you've considered
What I propose is that being a Glossary something natural to science, it should be included in Academic in some way, either with a dict or with any other better idea that the community can contribute.
Additional context
Thanks to Academic, George Cushen and the community.

There are several Hugo themes which have glossaries as short-codes. Some links are presented below. There are two kind of interactions which are easily conceived of around the concept of a glossary. First could be just some designated page with a list of terms. This is not very interactively inserting, but it does get the terms and their definitions out there. A second sort of interaction, and which is to me more interesting, is some sort of highlighting of specific terms in pages. For instance what Kubernetes does with tool tips.  I considered just adding their shortcode to my theme and adding some styling (which would be a fine place for Wowchemy to land). However as I thought more about this interaction, I decided that I really wanted to automate the interaction a bit more, and not need to add short-codes all the time. So my solution is to use JavaScript to add a tool-tip containing a term definition from a pre-defined lists of terms and definitions (presumably from a YAML or JSON file – and I'm not settled on a final format as some definitions may themselves need linked to a citation or source).  I am still working getting this functionality to work smoothly. I have added links to some of the javascript libraries I am looking at.
Hugo Short Codes
Glossary, tabs, and table captions: https://kubernetes.io/docs/contribute/style/hugo-shortcodes/
Glossary: https://github.com/istio/istio.io/tree/master/content/en/docs/reference/glossary
https://preliminary.istio.io/latest/docs/reference/glossary/#F
https://github.com/istio/istio.io/blob/master/layouts/shortcodes/gloss.html
Javascipt
https://github.com/pauljz/autoabbr
https://github.com/tawong/instant-definitions
https://popper.js.org/
https://github.com/atomiks/tippyjs


resin-mounts-flasher.bb: Add mount unit for bind mounting system-conn…

…ections
We need /etc/NetworkManager/system-connections bind mounted to a read-write location
also for when using the flasher
Signed-off-by: Florin Sarbu<EMAIL_ADDRESS>

@agherzan @michal-mazurek @telphan


404 page - Page Not Found

[ ] If no data is found under any module, then show consistent 404 error
[ ] If page link is broken then show proper 404 error

This is no longer relevant


helm: add envoy gateway addon helm chart support

What type of PR is this?

What this PR does / why we need it:
Which issue(s) this PR fixes:

ref https://github.com/envoyproxy/gateway/issues/3355

This PR only include DP metrics and Grafana support, will send another PR to include CP metrics as well (https://github.com/envoyproxy/gateway/issues/3474#issuecomment-2132817429)

hey @shawnh2 , @zhaohuabing @guydc and I brought this up in the community meeting today and aligned on

calling this chart gateway-demo-helm
adding envoy gateway as a sub chart (sorry for the churn here)

This PR only include DP metrics and Grafana support, will send another PR to include CP metrics as well (#3474 (comment))

lets include Grafana dashboard for CP as well after https://github.com/envoyproxy/gateway/pull/3506 landed.
and the doc under https://gateway.envoyproxy.io/latest/tasks/observability/ can be updated with this helm demo support.

hey @shawnh2 , @zhaohuabing @guydc and I brought this up in the community meeting today and aligned on

calling this chart gateway-demo-helm
adding envoy gateway as a sub chart (sorry for the churn here)

If we are including envoy-gateway helm as well, we may not install this demo chart just using one helm install, cause eg and prom/grafana should be installed at different namespace. But helm does not support installing dependencies at different namespace. xref: https://github.com/helm/helm/issues/10905
So:

Do we accpet installing all the dependencies at the same one namespace?
There's another tool helmfile could solve this problem, but will introduce more operations for users.
I can understand why we are trying to include eg as a dependency, to provide users with a one-stop eg-with-addons experience. But exclude eg does not affect this, we still can provide one-stop abilities for all the addons. And can solve this problem more easily.

ah then lets go with the previous approach of gateway-addons-helm and rm envoy-gateway from this chart

Nit: should we name this directory "gateway-addons"? Currently, there are two addons(Prometheus and Grafana), and we may have more in the future.

hey @phlax once this PR merges, we'll be pushing a new Helm Chart envoyproxy/gateway-addons-helm , will the CI be able to push using the existing PAT or do we need to create the repo before hand ?


assertSameStructure with dict vs defaultdict

When trying to use assertSameStructure to compar a dict to a defaultdict, it throws an error.
This is due to the direct type comparison here
https://github.com/abseil/abseil-py/blob/master/absl/testing/absltest.py#L1219
Not sure if it's worth adding another exception similar to int vs long. Feel free to close if this is WAI

Thanks for the report. I'd consider it a bug. A normal dict and default dict (or ordered dict) compare equal, I don't see why the assert method should care about their types.
Looking through the change history, it doesn't look like that type check was added for a specific reason (it's been there since the beginning), so it might as well be removed.

Dict vs OrderedDict is definitely a trickier case, especially since (at least right now) function cares about order in lists, but I think that at least for defaultdicts, it's a clearer case.
I guess speaking of removing the type check brings up other questions, such as lists vs tuples or str vs unicode, both of which would pass without the type check.
As you allude to, we need a better definition of what "structure" means in this case. In my mind, it was about higher level structure of the data such as mappings and sequences.

I'm trying to think which way would be actually useful in the context of testing, and honestly I think they both have their use. One solution could be to have a strict_type_check=True parameter that allows the engineer to choose between the two behaviors. That also makes the function backward compatible and doesn't break existing tests.

My preference is to take the most conservative route and only explicitly allow defaultdict to compare to dict if there is a compelling need.
Even allowing collections.defaultdict could require special case handling. The comparison code can cause new default keys to be inserted into the defaultdict.  Assertions should not have side effects (OTOH the entire point of defaultdict is to be a side effect, no idea what to make of that).  A defaultdict would need to be converted into a plain dict for purposes of comparison without side effects.
Wait until someone has a need for dict ordering to be part of the comparison and decide what to do about 3.7 dict and OrderedDict at that time.  That one may require a mode flag or new method such as your strict_type_check suggestion.  For now people think of dicts as always unordered, but that is likely to change over time thanks to 3.7's behavior.
That there are special cases needed for these already suggests that the strict type check is a good thing.  Not being strict in test comparisons can lead to unintentionally passing tests, which is worse than an unintentionally failing tests as it isn't likely to be detected.

For reference, ==, assertEqual, and assertDictEqual all ignore ordered-ness and default-ness and just treat them as plain dicts.
From what I can tell of assertSameStructure is that it doesn't care about ordering of keys. Just the ordering of sequences (which makes sense). Overall, assertSameStructure seems to be basically assertEqual, except stripped down a bit and with different error reporting. TBH, it seems like a best thing to do would be to deprecate assertSameStructure and improve assertEqual's error reporting for large structures, but that's a bit pie-in-the-sky.

long and int being special is not odd at all, Python 1.x's numeric types are not intended to ever be treated as separate types anymore. They auto-convert freely in Python 2 and the distinction no longer exist in Python 3.
Yes, I see what you mean, defaultdict could be supported.  I only quickly glanced at the code and saw the a[k] and b[k].  I'd be fine with supporting defaultdict here.


Drop support for .net standard 1.x

Microsoft no longer supports netstandard 1.x, so we could safely target netstandard 2.x only.

.NET Standard 1.x target platform has been dropped in v5


Parsing problem when a categorical value contains spaces

Hi, I ran into the following error, I'm not sure whether it is a problem with how the dataset is encoded (in which case this issue should maybe be ignored), or whether it would make sense adding a trim function somewhere? (Using v0.3.1 and julia-1.10.1)
julia> T=OpenML.load(32)
[ Info: Downloading dataset 32.
 Use `show(err)` to see complete types.

Looks like something one should address in ARFFFiles.jl. I'll open an issue there.

Fixed in ARFFFiles.jl


Feature/clean screen function

Reference Issues/PRs

Closes #97

What does this implement/fix? Explain your changes.
This pull request integrates the clear_screen function into the main module (__main__.py). Specifically, the function is called when the reset mode is activated. This enhancement ensures that the console screen is cleared appropriately, providing a cleaner interface during reset operations.
Any other comments?
For additional context, you can view the related GIF below:

I noticed the os.system usage in the code. If necessary, I can update it to use the subprocess module to address the security concern. Just let me know if you’d like me to make this change.

@oscarArismendi Thanks for your contribution 🚀


Final project deliverables checklist

[ ] Project Code

[ ] Fork GitHub repository
[x] Source on USB

[ ] Documentation via wiki
[ ] Windows compatible (.exe) file
[ ] Architecture diagram

[ ] Hardware handoff & system compatibility

[x] Twin setups [AK + OH]

[x] Arduino or similar type

Explore GitHub Actions as way to manage released (https://github.com/andrewsng/assistive-technology/releases/new) executable files & best practices for version numbers (#19).

Wiki should be cloned and added to the /docs directory to preserve information post-fork.


Atomic block's entity should be deleted on backspace command too

I have a simple use case which bothers me since a week.
When I add an atomic block:

"‸"

"Some text...‸"

add atomic block with entity space (programatically)

"Sometext..."
" "
"‸"

Hit backspace (we jump on line 1, atomic block is deleted how we except BUT the space from the atomic block with the entity in it is now on line 1 right next to the cursor.)

"Sometext...‸ "

Normally you not recognize this space with the entity - but when you render the content state side-by-side to the editor you recognize that an entity in still present there on line 1. You can delete this space, than it's solved theoretically.
I except that the entity space should be removed too when I delete an atomic block by a backspace operation.
Otherwise the content state is now just invalid - there is an atomic entity somewhere free outside of an atomic block.

I figured out that I have the exact same behaviour when using the delete command.
In the first post the backspace command was executed.
Both are handled by RichUtils. How I see in the code, onBackspace and onDelete keeps responsibility to delete atomic blocks.
However the empty space with the entity range is just there.

Okey I solved it. I don't returned "handled" in Editor::handleKeyCommand when it was handled and updated by RichUtils.handleKeyCommand - this caused this problem.
This issue can be closed but I moved an entry in issue #931 for documentation purposes

I'm reviewing the same bug in our codebase, but we don't have a custom handleKeyCommand function. However, deleting an atomic block element with backspace results in the leftover space (from the insertAtomicBlock call), just like you described.
Any idea what might fix this? Do we need to write our own handleKeyCommand?

RichUtils.handleKeyCommand is not bound by default to handle commands. That's the truth.
In the RichUtils.handleKeyCommand method you see all the commands this method handles. They are several, but in most cases it's okey.
Simple example:
  handleKeyCommand(command) {
    const { editorState } = this.state;

    const newContent = RichUtils.handleKeyCommand(editorState, command);
    if (newContent) {
      this.handleEditorChange(newContent); // .. update editor state ...
      return 'handled';
    }
  }

Detailed explanation
When you don't want that RichUtils.handleKeyCommand handle some command (for example some inline styles) just catch those commands and don't call RichUtils.handleKeyCommand for it.
The most important point however is that you return the handled string when your custom code or RichUtils.handleKeyCommand handled the command - this will prevent the default key action.
When you don't return handled even when RichUtils.handleKeyCommand was handled the command and updated the editor state, still 90% of the commands are working as excepted.
But deleting atomic block will not work correctly since draft.js thinks the command was not handled and executes the default action which break the atomic block removal.

Here's my workaround.
auditEditorState.js

export const auditEditorState = editorState => {
    // Need to make sure when an atomic block is deleted that its corresponding entity is, as well

    const atomicTypes = {image: true, twitter: true, youtube: true};

    const selectionState = editorState.getSelection();
    const anchorKey = selectionState.getAnchorKey();
    const currentContent = editorState.getCurrentContent();
    const currentContentBlock = currentContent.getBlockForKey(anchorKey);

    const type = currentContentBlock.getType();
    if (type === 'unstyled') {
        let orphan = false;
        currentContentBlock.getCharacterList().forEach(cm => {
            const entityKey = cm.getEntity();
            if (entityKey) {
                const entityType = currentContent.getEntity(entityKey).getType();
                if (entityKey && atomicTypes[entityType]) {
                    console.log(`${entityType} not allowed in unstyled block ${currentContentBlock.getKey()}`);
                    orphan = true;
                }
            }
        });

        if (orphan) {
            const newEditorState = editorState;
            newEditorState._immutable = newEditorState._immutable.set('allowUndo', false); // hack to allow pushing a new state without creating an undo
            const updatedSelection = selectionState.merge({anchorOffset: 0});
            const newContent = Modifier.removeRange(currentContent, updatedSelection, 'forward');
            return EditorState.push(
                newEditorState,
                newContent,
                'remove-orphaned-entities'
            );
        }
    }
    return editorState;
};

Sorry that's a slightly older version. This one's been cleaned up.
export const auditEditorState = editorState => {
    // Need to make sure when an atomic block is deleted that its corresponding entity is, as well
    const atomicTypes = {image: true, twitter: true, youtube: true};

    const selectionState = editorState.getSelection();
    const anchorKey = selectionState.getAnchorKey();
    const currentContent = editorState.getCurrentContent();
    const currentContentBlock = currentContent.getBlockForKey(anchorKey);

    const type = currentContentBlock.getType();
    if (type === 'unstyled') {
        let orphan = false;
        currentContentBlock.getCharacterList().forEach(cm => {
            if (!orphan) {
                const entityKey = cm.getEntity();
                if (entityKey) {
                    const entityType = currentContent.getEntity(entityKey).getType();
                    if (entityKey && atomicTypes[entityType]) {
                        //console.log(`${entityType} not allowed in unstyled block ${currentContentBlock.getKey()}`);
                        orphan = true;
                    }
                }
            }
        });

        if (orphan) {
            const newEditorState = editorState;
            newEditorState._immutable = newEditorState._immutable.set('allowUndo', false); // hack to allow pushing a new state without creating an undo
            const updatedSelection = selectionState.merge({anchorOffset: 0});
            const newContent = Modifier.removeRange(currentContent, updatedSelection, 'forward');
            return EditorState.push(
                newEditorState,
                newContent,
                'remove-orphaned-entities'
            );
        }
    }
    return editorState;
};```

You might be able to simplify the logic to find the orphans by doing something like this.
  const orphan = currentContentBlock.getCharacterList().some(cm => {
    const entityKey = cm.getEntity();

    return entityKey && atomicTypes[currentContent.getEntity(entityKey).getType()];
  });

Why stop there? :)
// Need to make sure when an atomic block is deleted that its corresponding entity is, as well
export const auditEditorState = editorState => {
    const selectionState = editorState.getSelection();
    const anchorKey = selectionState.getAnchorKey();
    const currentContent = editorState.getCurrentContent();
    const currentContentBlock = currentContent.getBlockForKey(anchorKey);
    const atomicTypes = {image: true, twitter: true, youtube: true};
    if (currentContentBlock.getType() === 'unstyled' && currentContentBlock.getCharacterList().some(cm => cm.getEntity() && atomicTypes[currentContent.getEntity(cm.getEntity()).getType()) {
        editorState._immutable = editorState._immutable.set('allowUndo', false);
        return EditorState.push(
            editorState,
            Modifier.removeRange(currentContent, selectionState.merge({anchorOffset: 0}), 'forward'),
            'remove-orphaned-entities'
        );
    }
    return editorState;
};

This issue is actually worse. Eventually, you get runtime errors when you try to add an atomic block again.
Uncaught Error: Unknown DraftEntity key.
    at invariant (eval at <anonymous> (dekki.js:861), <anonymous>:44:15)
    at Object.__get (eval at <anonymous> (dekki.js:2058), <anonymous>:166:285)
    at ContentState.getEntity (eval at <anonymous> (dekki.js:2518), <anonymous>:155:24)
    at AtomicBlock (eval at <anonymous> (dekki.js:4840), <anonymous>:30:37)
    at StatelessComponent.render (eval at <anonymous> (dekki.js:8194), <anonymous>:44:17)
    at eval (eval at <anonymous> (dekki.js:8194), <anonymous>:795:21)
    at measureLifeCyclePerf (eval at <anonymous> (dekki.js:8194), <anonymous>:75:12)
    at ReactCompositeComponentWrapper._renderValidatedComponentWithoutOwnerOrContext (eval at <anonymous> (dekki.js:8194), <anonymous>:794:25)
    at ReactCompositeComponentWrapper._renderValidatedComponent (eval at <anonymous> (dekki.js:8194), <anonymous>:821:32)
    at ReactCompositeComponentWrapper._updateRenderedComponent (eval at <anonymous> (dekki.js:8194), <anonymous>:745:36)

I found the issue:
https://github.com/facebook/draft-js/blob/master/examples/draft-0-10-0/media/media.html#L223-L225
        const entity = props.contentState.getEntity(
          props.block.getEntityAt(0)
        );

If you go "too fast" then props.block.getEntityAt(0) return null sometimes which causes a runtime error. You have to check to see if that entity key exists before you try to get it.

    const entityKey = props.block.getEntityAt(0);
    if (entityKey) {
        const entity = props.contentState.getEntity(entityKey);

Sorry for that diversion. It's an unrelated bug to this ticket.

@aight8 can you please provide^ how to fix this exactly peace of code?

@aight8 how to use this auditEditorState.js ?

This is what I used to do.
// handleBeforeInput Editor prop functions
export const BACKSPACE_ON_ATOMIC_BLOCK = 'BACKSPACE_ON_ATOMIC_BLOCK';
export const ENTER_ON_ATOMIC_BLOCK = 'ENTER_ON_ATOMIC_BLOCK';

export const atomicKeyBindings = (editorState, e) => {
  const backSpace = 8;
  const enter = 13;
  if (e.keyCode === backSpace) {
    if (atomicSelection(editorState)) return BACKSPACE_ON_ATOMIC_BLOCK;
  }
  if (e.keyCode === enter) {
    if (atomicSelection(editorState)) return ENTER_ON_ATOMIC_BLOCK;
  }

  return null;
};

export const atomicKeyCommands = (command, editorState, updateEditorState) => {
  if (command === BACKSPACE_ON_ATOMIC_BLOCK) {
    const blockKey = atomicSelection(editorState); // check the block type
    const newEditorState = removeBlockWithKey(editorState, blockKey); // handle the backspae myself
    updateEditorState(newEditorState);
    return 'handled';
  }

  if (command === ENTER_ON_ATOMIC_BLOCK) {
    const newEditorState = insertNewBlock(editorState);
    updateEditorState(newEditorState);
    return 'handled';
  }

  return 'not-handled';
};

// method used to remove the atomic block
export const removeBlockWithKey = (editorState, blockKey) => {
  const contentState = editorState.getCurrentContent();
  const blockMap = contentState.getBlockMap();
  const newBlockMap = blockMap.filter(block => block.getKey() !== blockKey);

  const newContentState = contentState.merge({
    blockMap: newBlockMap,
  });

  const selection = editorState.getSelection();
  const startKey = selection.getStartKey();
  const blockBeforeKey = contentState.getBlockBefore(startKey).getKey();
  const newSelection = SelectionState.createEmpty().merge({
    ...selection.toJS(),
    anchorKey: blockBeforeKey,
    focusKey: blockBeforeKey,
  });

  return EditorState.forceSelection(EditorState.push(editorState, newContentState), newSelection);
};

@webdeveloperpr  is there anyway, in which i can fix existing broken draft state?


add settings to include dirs in excluding dirs

I have a excluding dir "Client", but I want to include dir "Client/common". There are so many subdirs in "Client". So I hope that we can have a setting to include dirs.

If has any other problem, please open a new issue.


Ability to invalidate cached items by key needed.

This discussion started in issue #561. @BenSchwab suggested I create a separate issue report for the following:

There currently appears to be no way to invalidate specific items in the cache. From what I can tell, it's an all or nothing proposition with only a clearAll() type method being exposed to users of the Apollo SDK. There are valid use cases for needing to invalidate specific cached objects.
For example, let's say you had a list/detail situation. A query is executed to get a list of objects for the UI, each with only a few properties to display summary level info for each. The detail UI makes a query for one of the specific objects and includes more properties. Everything loaded so far is cached. If I wanted to invalidate the cache for the one specific object, ideally I could blow it away using its cache key. I guess I would expect that if I did that, the cached list would also become invalidated since it references the single object which was invalidated.
I don't see how one would do something like that with the current SDK. The only options for cache invalidation seem to be to blow everything away.
To quote @BenSchwab on this topic:

Can you make a separate issue for deleting single cache entries? We should be able to do something via the imperative store api.

@eschlenz

If I wanted to invalidate the cache for the one specific object

Just curios do you have any specific use case where you need this? As for list -> details (master - details) as this is a normalized cache the response of will be shared between list and details. So any updates on details will be visible in list.

@sav007

Just curios do you have any specific use case where you need this? As for list -> details (master - details) as this is a normalized cache the response of will be shared between list and details. So any
updates on details will be visible in list.

I see what you are saying there. If a specific object is updated in the cache, any other data that's referencing it will have the updated version for future use. That's great! But what I'm looking for is the ability to at least manually invalidate a specific object, and have anything referencing it be implicitly invalidated as well.
I'll try to use a real world example. Our API team is in the process of transitioning from a REST API to GraphQL. At the moment, only read operations are provided by our GraphQL server. Write operations are still done through our REST API. So there is a scenario where the user can take action on the "detail" page, which we know will result in modification of that object. We want to invalidate any cached data related to it so that we can fetch a fresh copy from GraphQL.
Currently we would simply stay on the detail page and make the call to refresh that object. Alternatively, let's say that upon modification of the object with the REST API, we wanted to jump the user back to the list (master) screen. After the REST update, but before taking the user to the list, I might invalidate the updated object knowing that other areas of the app also need to reflect the current state. In doing so I want the invalidation of the single object to implicitly invalidate any cached data that references it.
Another example, which might be relevant to others outside myself, might be "pull to refresh" on the detail screen. If I detect a "pull to refresh" I feel I should have the option to invalidate the cache for the object before attempting the query again, thereby getting a fresh copy. That doesn't seem possible at the moment.

Yeah, makes sense. Thx!

Thanks for the change @sav007!


All examples not work

Macos 13.6.5

Interesting, I'll fix it. right now you can add --release flag and it will work.

Interesting, I'll fix it. right now you can add --release flag and it will work.有趣，我会修复它。现在你可以添加--release标志，它将起作用。

Yes, it's working...


add_response_headers not being added when OAuth2 filter is used

Describe the bug
When using add_response_headers in a Mapping or in the ambassador Module defaults  those headers are not added when an OAuth2 filter is triggered.  The initial 307 redirect does not include the headers.
To Reproduce
Steps to reproduce the behavior:

setup 2 Host endpoints
Implement an OAuth2 filter https://www.getambassador.io/docs/edge-stack/latest/topics/using/filters/oauth2/
3  Associate the filter and filterpolicy to one of the Host's
Add Cache-Control: no-cache, no-store to add_response_headers: in the httpmapping: of the ambassador Module defaults
curl -v to both Host end-points with the OAuth2 filter and the one without.
Notice the Host without will have the cache-control header, and the filtered host will respond initially with a 307 redirect however will not have the cache-control header.

These same steps can be repeated by adding the headers in a Mapping and will have the same results
Expected behavior
adding headers in a Mapping or in the ambassador Module defaults should include the headers regardless of filters
Versions (please complete the following information):

Ambassador: 6.6.2
Kubernetes environment: EKS latest version as of reporting

This is correct -- add_response_headers happens after authentication; it's basically the last thing in the chain, after the upstream responds. (add_request_headers happens a bit earlier, but still after authentication.)
What's the use case that you're wrestling with here?


fix(plugin-uploader): System ENV value check

env variable should not be empty.

Why
The isSet function check to see if the env value is a type string; however, in the cli flags for the env are all defined as type string defeating the purpose of the isSet function. This results in not prompting the user to fill out the necessary values to run the kintone plugin uploader. The code will throw an error. This is a bug.
What
I have updated the code to also check the value of the env. If the value is an empty string, isSet will return false.
How to test
Run the kintone plugin uploader without initializing env variables. Then see if the code will prompt the user.
Checklist

[x] Read CONTRIBUTING.md
[x] Updated documentation if it is required.
[x] Added tests if it is required.
[x] Passed pnpm lint and pnpm test on the root directory.

@charleslee0212
Thank you!
Please check the following two points.

It looks like the CI is down, so could you check that?
Is it possible to create a unit test for this fix?

プロンプトが動作することを確認。
$ unset KINTONE_BASE_URL
$ unset KINTONE_USERNAME
$ unset KINTONE_PASSWORD
$ bin/cli.js /path/to/plugin.zip
? kintoneのベースURLを入力してください (https://example.cybozu.com): http://localhost
? ログイン名を入力してください: username
? パスワードを入力してください: password
Open http://localhost/login?saml=off
Trying to log in...
Navigate to http://localhost/k/admin/system/plugin/
Trying to upload /path/to/plugin.zip
/path/to/plugin.zip をアップロードしました!

@charleslee0212
Thank you! it's merged.

Of course!


Data cannot download

Hi, thank you for your dataset.
However, I have a problem downloading it. It seems that it is too big. So, could you please split the dataset into several parts, or upload the dataset into other platform like google drive, or provide some smaller sample cases?
Many thanks for your help!

Same issue here, could you please split the dataset into smaller size?

Same issue here, could you please split the dataset into smaller size?

Hi, I've successfully downloaded this dataset. Maybe I can share it with google drive.

Same issue here, could you please split the dataset into smaller size?

Can you try this link? https://drive.google.com/open?id=1nA299ZEH0kYunkhEfDWq2ay32t4QQhP2

Same issue here, could you please split the dataset into smaller size?

Can you try this link? https://drive.google.com/open?id=1nA299ZEH0kYunkhEfDWq2ay32t4QQhP2

hi, can you please share 199G version dataset on google drive too?

Same issue here, could you please split the dataset into smaller size?

Can you try this link? https://drive.google.com/open?id=1nA299ZEH0kYunkhEfDWq2ay32t4QQhP2

Hi Yufan, it seems that the link cannot work. Could you please share the dataset again?

hi Yufan, same problem here, need help @ryf1123

Same problem


java.lang.NoSuchMethodException: net.minecraft.world.item.ItemStack.save(net.minecraft.nbt.NBTTagCompound) (1.18-pre8)

I'm getting the following stacktrace when using the library on 1.18-pre8:
[07:24:18] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'waypointregistry:waypoint' in plugin WaypointRegistry v1.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-api-1.18-pre8-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-api-1.18-pre8-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_18_R1.CraftServer.dispatchCommand(CraftServer.java:800) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1937) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1776) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1757) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:46) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:1) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:30) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.TickTask.run(SourceFile:18) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.util.thread.IAsyncTaskHandler.c(SourceFile:151) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]        at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.c(SourceFile:23) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1157) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.c(MinecraftServer.java:1) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.util.thread.IAsyncTaskHandler.y(SourceFile:125) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.bf(MinecraftServer.java:1136) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.y(MinecraftServer.java:1129) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.util.thread.IAsyncTaskHandler.c(SourceFile:134) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1113) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1037) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:303) ~[spigot-1.18-pre8-R0.1-SNAPSHOT.jar:3312-Spigot-7840c2a-5a39a23]
        at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.ExceptionInInitializerError
        at xyz.upperlevel.spigot.book.BookUtil$BookBuilder.pages(BookUtil.java:153) ~[?:?]
        at co.purevanilla.mcplugins.WaypointRegistry.util.BookGeneration.getWaypointBook(BookGeneration.java:73) ~[?:?]
        at co.purevanilla.mcplugins.WaypointRegistry.cmd.WaypointCMD.onCommand(WaypointCMD.java:106) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-api-1.18-pre8-R0.1-SNAPSHOT.jar:?]
        ... 21 more
Caused by: java.lang.IllegalStateException: Cannot initiate reflections for v1_18_R1
        at xyz.upperlevel.spigot.book.NmsBookHelper.<clinit>(NmsBookHelper.java:123) ~[?:?]
        at xyz.upperlevel.spigot.book.BookUtil$BookBuilder.pages(BookUtil.java:153) ~[?:?]
        at co.purevanilla.mcplugins.WaypointRegistry.util.BookGeneration.getWaypointBook(BookGeneration.java:73) ~[?:?]
        at co.purevanilla.mcplugins.WaypointRegistry.cmd.WaypointCMD.onCommand(WaypointCMD.java:106) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-api-1.18-pre8-R0.1-SNAPSHOT.jar:?]
        ... 21 more
Caused by: java.lang.NoSuchMethodException: net.minecraft.world.item.ItemStack.save(net.minecraft.nbt.NBTTagCompound)
        at java.lang.Class.getMethod(Class.java:2227) ~[?:?]
        at xyz.upperlevel.spigot.book.NmsBookHelper.<clinit>(NmsBookHelper.java:120) ~[?:?]
        at xyz.upperlevel.spigot.book.BookUtil$BookBuilder.pages(BookUtil.java:153) ~[?:?]
        at co.purevanilla.mcplugins.WaypointRegistry.util.BookGeneration.getWaypointBook(BookGeneration.java:73) ~[?:?]
        at co.purevanilla.mcplugins.WaypointRegistry.cmd.WaypointCMD.onCommand(WaypointCMD.java:106) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-api-1.18-pre8-R0.1-SNAPSHOT.jar:?]
        ... 21 more

I'm not 100% sure if this is being caused by book-api or spigot, (I find weird net.minecraft.world.item.ItemStack.save(net.minecraft.nbt.NBTTagCompound) isn't a method on this release, but it was on previous. Maybe it was deprecated?

momap:

obfuscated back to spigot mappings by paper:

But why did they drop the de-obfuscation?
Anyways, sorry for the delay, today I'll try to fix it, thank you!

JustSpigotThings?

Yes, more bad news, we require NMS for ItemStack to JSON conversion (used if the dev. needs to show an item on hover).
Since I don't want to drop this (as it seems like this is the only project that supports itemstacks on hover) I divided the NMS into two, the heavier legacy openBook/setPages code (used only if the newer lightweight one is not supported) and another class that has just ItemStack saving. Everything is loaded on-demand so the average user that does not need ItemStacks on hover will not even load any NMS-reflection code.
This works perfectly so I'll push the new release shortly, thank you both for the report and for the help!

is there a way to open the book to the player now being on the safe side for future updates?

What do you mean on the safe side?
It should not break again for a long time since it now uses official Spigot APIs.
I only use some unofficial API if you put an ItemStack on hover, and that's the only fragile part of the library.

sorry, I was testing using the wrong version, don't know how I could have missed that. Thanks!

No problem!
Tell me if you need help on anything :+1: