function redcap_every_page_top NOT firing on every page

Every Page Top is supposed to fire at the top of every page.  However it is not in the testing branch nor the master branch.
To confirm the issue I wrote a small plugin that fires on every page top:
The plugin only contains this:
function redcap_every_page_top($project_id)
{
   echo '
hi
';
}

The External Module "Instance Marker" is trying to add a marker to every page.  However pages like this one, http://localhost/redcap8.0.2/redcap_v8.0.2/index.php?pid=1 do NOT fire the function redcap_every_page_top.  It does fire correctly here: http://localhost/redcap8.0.2/index.php

@biggeeves, i assume you mean "module" not "plugin", right? If you want that hook for that module to be called in a project, then the module must be enabled for that project OR it must be enabled for ALL projects. Otherwise it will not fire, which is what you're seeing. You might want to mention in your module's instructions that the module must additionally be enabled on all projects by default in order for the instance label to appear inside projects too.

@taylorr4.  I did a fresh install of another version of REDCap, moved the external modules folder over and forgot to set the "enable for all modules".  I'll close delete this issue.


Inconsistant polling behavior

Context
Building a HTTP server, took the TCP server example and improved it.
On linux 6.6.63 (NixOS), with maximal ulimit, running rust 1.83.0 (but getting same behavior with rust 1.70.0)
Reproduced on linux 5.15.0 (Ubuntu) with rust 1.83.0
Bug reproduction

Code of the minimal example

use core::str;
use mio::{event::Event, net::{TcpListener, TcpStream}, Events, Interest, Poll, Registry, Token};
use std::{collections::HashMap, io::{Read, Write}};

pub struct Server {
    listener: TcpListener,
    connections: HashMap<Token, (TcpStream, Option<Vec<u8>>)>,
    tk_nb: usize,
}

impl Server {
    pub fn run(mut self) {
        let mut poll = Poll::new().unwrap();
        let mut events = Events::with_capacity(128);

        poll.registry()
            .register(&mut self.listener, Token(0), Interest::READABLE)
            .unwrap();

        loop {
            let tstart = std::time::Instant::now();
            poll.poll(&mut events, None).unwrap();
            println!("Poll blocked for {:?}", tstart.elapsed());
            for ev in events.iter() {
                self.handle_event(ev, poll.registry());
            }
        }
    }

    fn handle_event(&mut self, ev: &Event, reg: &Registry) {
        println!("\n{ev:?}");
        if ev.token().0 == 0 {
            self.handle_new_connection(reg);
        } else {
            self.handle_client(ev, reg);
        }
    }

    fn handle_new_connection(&mut self, reg: &Registry) {
        let (mut stream, addr) = self.listener.accept().unwrap();
        let tk = Token(self.tk_nb + 1);
        reg.register(&mut stream, tk, Interest::READABLE).unwrap();
        self.connections.insert(tk, (stream, None));
        println!("{addr:?} connected on client {:?}", tk);
        self.tk_nb += 1;
    }

    fn handle_client(&mut self, ev: &Event, reg: &Registry) {
        let tk = ev.token();
        if ev.is_error() {
            let (mut stream, _) = self.connections.remove(&tk).unwrap();
            let err = stream.take_error().unwrap().unwrap();
            reg.deregister(&mut stream).unwrap();
            println!("Got error on client {tk:?}: {err:?}");
            return;
        }

        if ev.is_writable() {
            let (stream, reply) = self.connections.get_mut(&tk).unwrap();
            let rep = reply.take().unwrap();
            let n = stream.write(&rep).unwrap();
            println!("Reply sent to {tk:?}");
            reg.reregister(stream, tk, Interest::READABLE).unwrap();
            assert!(n == rep.len());
        }

        if ev.is_readable() {
            self.recv(tk, reg); // Moved to its own function for clarity
        }
    }

    fn recv(&mut self, tk: Token, reg: &Registry) {
        let (stream, reply) = self.connections.get_mut(&tk).unwrap();
        let mut received = vec![0; 1024];
        let mut bytes_read = 0;
        loop {
            match stream.read(&mut received) {
                Ok(0) => break,
                Ok(n) => {
                    bytes_read += n;
                    if bytes_read == received.len() {
                        received.resize(received.len() + 1024, 0);
                    }
                }
                Err(e) => match e.kind() {
                    std::io::ErrorKind::WouldBlock => break,
                    std::io::ErrorKind::ConnectionReset => {
                        println!("Connection reset");
                        self.remove_client(tk, reg);
                        return;
                    }
                    _ => {
                        panic!("{e:?}")
                    }
                },
            }
        }

        if bytes_read == 0 {
            println!("Got no more data");
            self.remove_client(tk, reg);
            return;
        }

        let data = str::from_utf8(received.get(..bytes_read).unwrap()).unwrap();
        println!("{tk:?} Got {:?}", data);
        *reply = Some(
            format!("HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!")
                .into_bytes(),
        );
        reg.reregister(stream, tk, Interest::WRITABLE.add(Interest::READABLE)).unwrap();
    }

    fn remove_client(&mut self, tk: Token, reg: &Registry) {
        let (mut stream, _) = self.connections.remove(&tk).unwrap();
        reg.deregister(&mut stream).unwrap();
        println!("Removed client {tk:?}");
    }
}

fn main() {
    let listener = mio::net::TcpListener::bind("<IP_ADDRESS>:3000".parse().unwrap()).unwrap();
    let server = Server {
        listener,
        connections: HashMap::new(),
        tk_nb: 0,
    };
    server.run();
}

Run this server, and in another shell have a continuous curl running:
watch -n 3 'date && curl -m 1 -s http://<IP_ADDRESS>:3000 && echo "OK" || echo "FAIL"'

It should run fine for now.
However, when stressing the server using rewrk (or similar):
rewrk --duration 5s --host http://<IP_ADDRESS>:3000 --connections 200

The curl command fails, and will continue to do so after the stress is finished.
Observations
This is the logs of a normal curl command:
Poll blocked for 3.010249804s

Event { token: Token(0), readable: true, writable: false, error: false, read_closed: false, write_closed: false, priority: false, aio: false, lio: false }
<IP_ADDRESS>:56024 connected on client Token(4)
Poll blocked for 1.886µs

Event { token: Token(4), readable: true, writable: false, error: false, read_closed: false, write_closed: false, priority: false, aio: false, lio: false }
Token(4) Got "GET / HTTP/1.1\r\nHost: <IP_ADDRESS>:3000\r\nUser-Agent: Wget/1.25.0\r\nAccept: */*\r\nAccept-Encoding: identity\r\nConnection: Keep-Alive\r\n\r\n"
Poll blocked for 1.467µs

Event { token: Token(4), readable: false, writable: true, error: false, read_closed: false, write_closed: false, priority: false, aio: false, lio: false }
Reply sent to Token(4)
Poll blocked for 1.210488ms

Event { token: Token(4), readable: true, writable: false, error: false, read_closed: true, write_closed: false, priority: false, aio: false, lio: false }
Got no more data
Removed client Token(4)

And this is once the rewrk broke the server:
Poll blocked for 4.014244249s

Event { token: Token(0), readable: true, writable: false, error: false, read_closed: false, write_closed: false, priority: false, aio: false, lio: false }
<IP_ADDRESS>:46508 connected on client Token(901)
Poll blocked for 2.793µs

Event { token: Token(901), readable: true, writable: false, error: false, read_closed: true, write_closed: false, priority: false, aio: false, lio: false }
Token(901) Got "GET http://<IP_ADDRESS>:3000/ HTTP/1.1\r\nhost: <IP_ADDRESS>\r\n\r\n"
Poll blocked for 2.444µs

Event { token: Token(901), readable: true, writable: true, error: false, read_closed: true, write_closed: false, priority: false, aio: false, lio: false }
Reply sent to Token(901)
Got no more data
Removed client Token(901)

strace didn't reveal anything out of the ordinary, and I don't have any error anywhere, just curl waiting for an answer as the server tells me it did its job.
Important detail
Sometimes, when having a curl http://<IP_ADDRESS>:3000/ running (without any timeout), it will block forever, but if I launch another rewrk, it will unlock curl command, and the request goes through normally

I'm willing to work and investigate on it, but already spent a day and a half on this, so I wouldn't mind a quick look from you guys, if you can reproduce the bug, and if there is a deeper OS-related issue here.
If that's something I do wrong, I think there's some improvements on the documentation to do about it, as I read carefully and didn't got it

You're using write() instead of write_all(). The unreliable write() is a footgun by design, and most likely screws up the HTTP protocol, making clients wait for the rest of the headers forever.
Besides that, you have single-threaded event handling blocked on I/O. I'd be worried about this setup, because there may be more events waiting in poll() that you're not handling while being blocked on a single client, and if the OS had any circular dependency there (e.g. won't read more from the client you're waiting for, because some internal buffers are already full of unread data from other clients you're not looking at), your server could deadlock.

You're using write() instead of write_all().

This is wrong. You can't use write_all with Mio. You have to handle a WouldBlock "error", which the default implementation of write_all does not do.
@litchipi you code has a number of issues:

The call to stream.read with Vec<u8> is overwriting data, so if you loop twice you'll discard part of the request.
You're handling of a zero sized read is also incorrect. It's possible for the client to send the entire request and close their writing side, which will trigger a zero read in the server, but instead of handling the bytes in the buffer your code removes the client.
Your code is not dealing with partial writes properly.
Your code is reregistering with Interest::READABLE once you get writable, not sure why you're doing that.
Your code is handing an error event, but not removing the client?

I recommend you take a look at Tokio or Heph which both are higher level and deal with all of this for you already. If do want to keep using Mio please also read https://docs.rs/mio/1.0.2/mio/struct.Poll.html#portability.


fix(tabs): vertical tabs display as horizontal on small screens

What I did

Vertical tabs at screen sizes less than 768px will now display as if they were a horizontal tab.

Closes #940
TODO

[x] Fix padding on [vertical] tabs tab in horizontal / mobile mode.

Testing Instructions

View deploy preview
View color-context demo

Notes to Reviewers
This was a pretty sizable modification to the CSS.  Please look for any regressions in look and feel.  Will have to look carefully at the DP and ux. to compare looking for stylistic regressions across all tab variations. Vertical tabs should switch to horizontal on small screens < 768px as well as maintain correct borders even under context changes.
@bennypowers my assumption this at least qualifies for a "minor" change, wanted to discuss before creating a changeset.

CSS changes are kind of a judgement call. One could make the argument that this is a major. We should get a list of real world uses and check against them

CSS changes are kind of a judgement call. One could make the argument that this is a major. We should get a list of real world uses and check against them

On hold till we resolve changeset level.
A question remaining will be the documentation suggests this swap between vertical and mobile happens.  Until this PR merges it does not (assuming a much longer hold if a "major" change).  Do we hold the docs PR as well?  Thoughts? /cc @bennypowers @coreyvickery

@zeroedin I guess I can hide mention of responsive vertical tabs until this is worked out, I want to avoid further delaying the release of this new doc page.

if the docs say (now and at release) that the behaviour in this pr is supposed to happen, and it doesn't currently, then this PR is a patch, not a major

if the docs say (now and at 1.0 release)

This is part of the issue tabs at 1.0 did not have docs specifically to the new feature set.  Our docs on ux. were hold overs from PFE tabs:

Mobile

Tabs can’t be used on screens that are less than 576px wide because the limited space will cause too many section text labels to get cut off. In this environment, tabs will convert to an accordion.

if you can test all the specific in-the-wild uses, then we can probably get away with a patch commit, but don't make a habit of it :)


TypeError: Object doesn't support property or method 'startsWith' [redux-subspace]

Is it a bug, feature request or question?
Bug, exception is thrown in console when using Internet Explorer 11
Which package(s) does this involve?
redux-subspace
Expected Behavior
No exception is thrown.
Current Behavior
The following exception is thrown:
TypeError: Object doesn't support property or method 'startsWith'
https://github.com/ioof-holdings/redux-subspace/blob/ac618ea7a6df5371930b6c38cf6a1e570701b39a/packages/redux-subspace/src/actions/isGlobal.js#L10
Possible Solution
Don't use String.prototype.startsWith in order to support older environments

package
version(s)

redux
4.0.1

redux-subspace
3.1.0

Internet Explorer
11

Happy to accept a PR replacing the call with something more supported.


Open Google Pay App for Payment

Is your feature request related to a problem? Please describe. A clear and concise description of what the problem
is.
I am developing a QR payment system for a restaurant, aiming to facilitate payment processing for users upon completing their orders. I intend for users to be seamlessly directed to the Google Pay app, where they can view and complete the required payment. And hence don't have to give their card details.
Describe the solution you'd like A clear and concise description of what you want to happen.

The user is directed to the Google Pay app where they will get the payment request.
The website should be able to know if the payment is completed.

Not an issue for the Google Pay button


Use watchify task instead of browserify task in watch task

Browserify was not re bundling on updates sometimes. Figured this could be the reason.

Oh, actually, that line should be removed altogether! Watchify only gets called in tasks/browserify.js


Handle case when zotero-bridge is not present

Given I have Zotero Link plugin installed
  And Zotero Bridge not installed in Obsidian
 When I try to insert a link
 Then I should be notified that required APIs are not available and how to fix it

Implemented in plugin-api


Android app cannot paste to Github gist text-field (firefox)

When copying the claim-blob for github, "paste" is not an option when going to gist.github.com and click-holding. Pasting into other text-fields on other web pages in the same browser (different tab) works fine.
I tried both regular Firefox and Firefox Focus. I don't know how to find their version numbers on Android.

Same with chrome. This is pretty ridiculous.


Increase package version (v0.1.42)

See assemblee-virtuelle/semapps#508.
Implements breaking changes from PR assemblee-virtuelle/semapps#539.
As far as I can see in the list of breaking changes (https://github.com/assemblee-virtuelle/semapps/issues?q=label%3A"breaking+changes"+is%3Aclosed) and a quick "smoke test" this is the only change required to this template.

Here's the updated documentation: https://github.com/assemblee-virtuelle/semapps/commit/3d45b0353da3b2883425c82f29b863e6728c8e2b

Here's the updated documentation: https://github.com/assemblee-virtuelle/semapps/commit/3d45b0353da3b2883425c82f29b863e6728c8e2b

Ok, I also split this PR into multiple commits like the other one.

Ok, I also split this PR into multiple commits like the other one.


Config Template

Set "config.enabled" to false for the development environment as well as the test environment.

@revans, appreciate the PR! We want to keep 'development' enabled by default, though. The main benefits we see are:

Rollbar code gets executed in development, so you're more likely to notice if any problems arise. This is especially relevant if you start adding Rollbar.error() calls throughout your application.
I personally really like the "View in Rollbar" link (in the logs) - it makes it really easy to share an exception with a co-worker. I'll frequently post links in our Slack room to the Rollbar page about an error I just ran into in my dev instance
In the future, we'll help you find similar issues that may have happened in other environments (i.e. you hit some bug in development, and then later something similar appears in production). We do this a little bit now on the "Similar Items" tab.
In the interface, you can select specific environment (i.e. "Production") so clutter hasn't been an issue for us. And of course, you're always welcome to disable it in your own setup.


Avoid to error-return when MTU change is not supported.

In case of virtio-net, MTU change is not supported in DPDK SDK,
then rte_eth_dev_set_mtu() returns -ENOTSUP and it is expected.
This fix adds to pass error condition in case of -ENOTSUP.

Hi,
Could someone please take a look into it?
Regards,
Tomofumi

Sorry for late reply.
Thank you for your pull request about mtu configuration in DPDK virtio-net PMD.
Your pull request looks ad-hoc.
I think this MTU configuration must be more general way to check return code of rte_eth_dev_set_mtu().
Regarding your pull request, we will fix this issue as follows:
@@ -1083,10 +1083,16 @@ dpdk_configure_interface(struct interface *ifp) {
   }
   ret = rte_eth_dev_set_mtu(portid, ifp->info.eth_dpdk_phy.mtu);
   if (ret < 0) {
-    rte_panic("Cannot set MTU(%d) for port %d (%d)\n",
-              ifp->info.eth_dpdk_phy.mtu,
-              portid,
-              ret);
+    if (ret != -ENOTSUPP) {
+      rte_panic("Cannot set MTU(%d) for port %d (%d)\n",
+                ifp->info.eth_dpdk_phy.mtu,
+                portid,
+                ret);
+    } else {
+      lagopus_msg_notice("Cannot set MTU(%d) for port %d, not supporetd\n",
+                         ifp->info.eth_dpdk_phy.mtu,
+                         portid);
+    }
   }
   rte_eth_promiscuous_enable(portid);

We will include this kind patch in next minor version up.

Hi Yoshihiro,
Thank you for your cooperation!
I close this request.
Regards,
Tomofumi


Migrating from flutter_downloader

Last week, flutter_downloader marked as discontinued on pub.dev due to lack of maintainer to continue it's development.
I noticed this recently when trying to solve #125.
Personally I'd never try to write downloader myself due to complexity of today's android file storage handling, so perhaps I'll find another package that are still actively maintained and if possible, has nicer API.

How about background_downloader?

How about background_downloader?

This seems to also use scoped storage better. Maybe this could allow selecting a custom folder via SAF without needing the external_storage permissions that file managers use.
Sorry if this is off-topic.


fix(js_parser): correctly parse type arguments in expression

Summary
Try to close https://github.com/biomejs/biome/issues/1184
When parsing type arguments in an expression, it is necessary to re-scan the > token to ensure that it is > rather than other tokens, such as >=
Typescript reference https://github.com/microsoft/TypeScript/blob/2e3b8af85e1f782634349139819151881369e3ea/src/compiler/parser.ts#L6529-L6532
Test Plan
Add a new test case

@Conaclos Thank you for the review! I have addressed the comments in https://github.com/biomejs/biome/pull/1645/commits/f22489aaed1831ace214fd230fcf7b6568910d3f


Fix CI for release

https://github.com/kairos-io/kairos/actions/runs/4585005395/jobs/8112417216

still hitting CI: https://github.com/kairos-io/kairos/actions/runs/4597309925/jobs/8119844772


docker.io/calico/apiserver:v3.21.1,no matching manifest for linux/arm64/v8 in the manifest list entries

Expected Behavior
apiserver:v3.21.1,for linux/arm64/v8
Current Behavior
docker.io/calico/apiserver:v3.21.1,no matching manifest for linux/arm64/v8 in the manifest list entries
Possible Solution
m1 pro max
Steps to Reproduce (for bugs)
Context
Your Environment

Looks like the apiserver is only built for amd64: https://github.com/projectcalico/apiserver/tree/master/docker-image
@frozenprocess was this one on your roadmap?

This should fix the problem after merge.
https://github.com/projectcalico/apiserver/pull/63

patch https://github.com/projectcalico/calico/pull/5386 and
make image BUILDARCH=arm64

image:
zhangguanzhang/calico-apiserver:v3.21.6-arm64


Broadcast with Custom Binary UFunc

I'm working on a user defined binary UFunc and see a quick how-to on the google groups page (https://groups.google.com/forum/#!searchin/scala-breeze/binary$20ufunc/scala-breeze/OTlDf_IItgY/u2hBNFlzDQAJ)
val f = UFunc(math.pow _)
val m = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0))

Works great when comparing two DenseVectors:
f(m(::, 0), m(::, 1))
res38: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 1024.0)

However, I hit an error when trying to broadcast:
f(m(::, *), m(::, 1))
<console>:18: error: could not find implicit value for parameter impl: breeze.generic.UFunc.UImpl3[breeze.generic.WrappedUFunc.type,breeze.generic.WrappedUFunc2[Double,Double,Double],breeze.linalg.BroadcastedColumns[breeze.linalg.DenseMatrix[Double],breeze.linalg.DenseVector[Double]],breeze.linalg.DenseVector[Double],VR]
              f(m(::, *), m(::, 1))

Is there something I'm missing to enable broadcasting?

no, i think that's just a limitation in how broadcasting works right now.
i'll try to look into it (though I'm pretty swamped right now so can't
promise a timeline)
I am a bit surprised it doesn't work, but only a bit.
On Wed, Jul 13, 2016 at 12:03 PM, NoahMarconi<EMAIL_ADDRESS>wrote:

I'm working on a user defined binary UFunc and see a quick how-to on the
google groups page (
https://groups.google.com/forum/#!searchin/scala-breeze/binary$20ufunc/scala-breeze/OTlDf_IItgY/u2hBNFlzDQAJ
)
val f = UFunc(math.pow _)val m = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0))
Works great when comparing two DenseVectors:
f(m(::, 0), m(::, 1))
res38: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 1024.0)
However, I hit an error when trying to broadcast:
f(m(::, *), m(::, 1))
:18: error: could not find implicit value for parameter impl: breeze.generic.UFunc.UImpl3[breeze.generic.WrappedUFunc.type,breeze.generic.WrappedUFunc2[Double,Double,Double],breeze.linalg.BroadcastedColumns[breeze.linalg.DenseMatrix[Double],breeze.linalg.DenseVector[Double]],breeze.linalg.DenseVector[Double],VR]
f(m(::, *), m(::, 1))
Is there something I'm missing to enable broadcasting?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/scalanlp/breeze/issues/560, or mute the thread
https://github.com/notifications/unsubscribe/AAAloWvTH1AW34m7WWpxpry7idGTzSfuks5qVTZugaJpZM4JLvhP
.

Thanks!
In case it comes up for others, I have a workaround in the meantime for my particular use case by partially applying the UFunc and then mapping the broadcasted columns instead:
val p = f(m(::, 1), _:breeze.linalg.DenseVector[Double])

m(::, *).map(p)
res55: breeze.linalg.DenseMatrix[Double] =
2.0    4.0     8.0
625.0  3125.0  15625.0


support input output port like react diagram

Description
does it will support input output port like react diagram?
Additional Context
No response

Hello, please describe it normally, we can’t read your mind.)


Update links to show grant app permissions.

Submitted via Docs Editor.

@Ricky-G : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@Ricky-G : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@rwike77
Can you review the proposed changes? IMPORTANT: When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
#assign:@MicrosoftDocs/public-repo-pr-review-team

@Ricky-G : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@Ricky-G  thanks for the update, that looks fine.  #sign-off


How to initiate full init when lazy loading

Plugin vim-gnupg consists of only one plugin.vim file, but greatly depends on mess of autocmd.
Is it possible to emulate it's complete loading when lazy? Using augroup key not helpful, because of plugin doesn't depend on VimEnter. Manual init through doautocmd inside on_post_source hook did something half-harted -- see #53.
Please, point out if this issue completely depends on plugin implementation or there are some details specific to NeoBundle.

OK.  I get it.  You should use explorer feature.
NeoBundleLazy 'jamessan/vim-gnupg', { 'explorer': '*.\(gpg\|asc\|pgp\)' }

Same reaction in such configuration (I fixed regex: '.*\.\(gpg\|asc\|pgp\)$').
Hook on_post_source  (echo inside) is triggered when opening file.gpg.
But without manual doautocmd no decryption was initiated -- so BufReadCmd wasn't sent to vim-gnupg automatically by using explorere feature.

Added the support.

Maybe, it will fix some future problems with another plugins, but not with this one.
If I only specify NeoBundleLazy 'jamessan/vim-gnupg', open nvim, manually source plugin by :so ~/.cache/vim/bundle/vim-gnupg/plugin/gnupg.vim and then open file :e file.gpg -- all works.
But when I try use some NeoBundle autoload triggers -- like filename_patterns or explorer -- it's not. Besides, on usual file.gpg open routing (looking at logs of vim-gnupg), BufReadCmd FileReadCmd wasn't called. So I have doubts it's right thing to do always.

Did you test vim-gnupg with explorer in the latest neobundle?
OK.  I will test it.
Please upload minimal .vimrc and reproduce ways from Vim starting.

Yes, I tested with ..., { 'explorer': '.*\.\(gpg\|asc\|pgp\)$' } -- your commit does same that I did manually in on_source hook yearlier and results in doubling output and incorrect work of vim-gnupg.  Please, take a look in other side of this problem at #53 -- there I have already published minimal vimrc to test by vim-gnupg author and I ask you to use the same one.

I assume you have installed and setted up gpg and have some encrypted file to test?
If not, you can refer to my step-by-step notes at Initial Setup and Encrypt Data at cfg/net/gnupg. I will render assistance to them, if necessary.

OK.  I get the problem.  Please wait.

Fixed.  But the fix is experimental.  It may be changed.

Reverted.
You should use the feature.
autocmd BufReadCmd,FileReadCmd pattern NeoBundleSource vim-gnupg | doautocmd BufReadCmd

Hi @Shougo,
I am a Vim user at Debian 7 (Wheezy), I can't see file context after upgrade the NeoBundle to 8dde1db.
I downgrade to f95ac5d and it's work, maybe you can help me?
Attach my environment info:
$ uname -a
Linux thinkpad-t410 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u6 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.9 (wheezy)
Release:	7.9
Codename:	wheezy

$ /usr/bin/vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:28:00)
Included patches: 1-547
Modified by<EMAIL_ADDRESS>Compiled by<EMAIL_ADDRESS>Huge version with GTK2-GNOME GUI.    The commit is already reverted.

@Shougo It's fixed, thank you very much. :+1:


Simplifies the _set_description function fixing hashtags and mentions

This PR solves a problem that has been mentioned in a couple of issues where the hashtags and mentions are not being added correctly. The most likely reason for this is simply changes to the TikTok UI however they have made the hashtag and mention selection stage much more difficult to execute because there are no good elements to anchor to.
One effect that I noticed whilst testing the code is that if a space is typed after a hashtag and then backspaced, the first hashtag suggestion will be an exact match of the hashtag you are trying to add, meaning we do not have to anchor to an element and click it, we can simply send an ENTER key. The same applies to the mention functionality. This meant that the size of the _set_description function can be greatly reduced. I also fine-tuned the timing between actions to make sure that the correct values will be inserted into the description, for this I used the implicit wait value that exists in the config.
Because we no longer have to select the dropdown elements, I have removed these selectors from the config file.
In order to show the functionality working again, I have added a hashtag and mention into the description string in the basic_upload.py file.
Hopefully this will close one or two issues on this project.
Below is a screenshot of the updated script in action, correctly adding hashtags and mentions:

The hashtags and mentions work great, but for some reason for me it doesn't clear the entire description at the beginning of the function, causing me to clear it manually so that the program can go on to do its thing.

Somebody already created an issue about this #131

The hashtags and mentions work great, but for some reason for me it doesn't clear the entire description at the beginning of the function, causing me to clear it manually so that the program can go on to do its thing.

@MatetePlays Yeh I looked into this and a change was suggested which I have pushed to this PR, the commit it (https://github.com/wkaisertexas/tiktok-uploader/pull/128/commits/4bf8836589844d60e09ddf2e3fe4b446454c1011). Hopefully that sorts it out

@MatetePlays Yeh I looked into this and a change was suggested which I have pushed to this PR, the commit is (4bf8836). Hopefully that sorts it out, there are a few changes on that commit that aren't relevant to your issue though.

It works great now, thanks!

Thanks @callum-fortune and @MatetePlays
I have published a new version of the project on PyPI


Upgrade parquet-go to v1.5.3

Description
Why
According to https://github.com/xitongsys/parquet-go/compare/v1.5.2...v1.5.3, there are some changes for optimization.
In my environment, I can confirm that "Maximum resident set size" is reduced by about 15%. I created test data from https://github.com/abicky/docker-log-and-fluent-plugin-s3-with-columnify-example.
$ /usr/bin/time -v path/to/columnify \
  -parquetCompressionCodec SNAPPY \
  -parquetPageSize 8192 \
  -parquetRowGroupSize 33554432 \
  -recordType msgpack \
  -schemaType avro \
  -schemaFile fluentd/docker_log.avsc \
  -output /tmp/2020082412_0.parquet
<PHONE_NUMBER>_0.msgpack

v1.5.2
Maximum resident set size (kbytes): 136936

v1.5.3
Maximum resident set size (kbytes): 117272

What
I upgraded parquet-go library like this.
$ go get -u github.com/xitongsys/parquet-go
go: github.com/xitongsys/parquet-go upgrade => v1.5.3
go: downloading github.com/xitongsys/parquet-go v1.5.3
$ go mod tidy

Concern
I'm not sure how to verify output compatibility between the old version and the new version. I only confirmed that both JSON output converted by parquet-tool is matched. Does anyone have a good way to verify?
Reference

https://github.com/xitongsys/parquet-go/releases/tag/v1.5.3
#44

Codecov Report

Merging #59 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #59   +/-   ##
=======================================
  Coverage   82.77%   82.77%
=======================================
  Files          15       15
  Lines         505      505
=======================================
  Hits          418      418
  Misses         65       65
  Partials       22       22

Flag
Coverage Δ

#unittests
82.77% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Continue to review full report at Codecov.

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

I guess the reason why is compress package was upgraded, too.
github.com/klauspost/compress v1.10.5

https://github.com/xitongsys/parquet-go/commit/f2077caa4499b8c821e736cd415dbdaa4cbc3852


Simplify method symbol descriptor disambiguation

Currently, conflicting method descriptors are handled this way
def foo(a: x.A) // foo(A+1)
def foo(a: y.A) // foo(A+2)

I propose we simplify it to
def foo(a: x.A) // foo(A)
def foo(a: y.A) // foo(A+1)

The benefit is to make it easier to compute method symbols, a simple loop like this should be enough

val descriptors = mutable.Map[String, Int]
node.methods.foreach { method =>
  val descriptor = method.descriptor
  val suffix = descriptors.getOrElseUpdate(descriptor, 0)
  descriptors(descriptor) = suffix + 1
...

The current scheme is harder to support because the suffix requires knowing all possibly conflicting method symbols beforehand.

@xeno-by can this be closed?

Good catch! I thought that github will take care of that automatically.


Add opam 2.2

Add opam 2.2 as a specific build in addition to opam 2.0 and 2.1.
opam-dev points to the master branch as usual. Currently 2.3.0~alpha.

Looks like the tests need updating here.


iwd: don't include testing tools by default

Hide the testing tools behind a flag. They blow up the closure
size by a huge factor.
Motivation for this change
Reduce closure size from ~250M to 40M
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 105559 run on x86_64-linux 1

1 package built:

iwd

Should this be enabled for https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/iwd.nix?

Should this be enabled for https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/iwd.nix?

Yes I don't see any reason, why the module (or any ordinary user) would need the testing tools.
I am currently running my system from unstable-small with this pr on top.

Would it make sense to install them to a separate output instead?

Would it make sense to install them to a separate output instead?

Well the build takes just a few seconds on my mediocre system, but I can do that if its preferred.
What would be a good name for that output, just "test"?

closing in favor of #105666


Updating SU Shapes to match the SketchUcation plugin store version

I've now updated the SketchUcation Plugin Store version of this plugin to include three new shapes - Helix, Helical Ramp, and Helical Ramp with Sides. I've made a couple of other minor updates - to add missing validation for the number of sides or segments to draw in Tube, Torus and Pyramid shapes, and to add a centre point on key faces in the inserted shapes, to aid placement and Move/Copy operations.
I've also changed the code, following an extremely helpful suggestion and sample code from Jim Foltz, to change from inserting each shape as a Group at the world origin, to creating a component definition, and allowing the user to place it at any pickable point using the API function Sketchup.active_model.place_component.
I'm unclear whether, and if so how, you want to update the Community Extension version to correspond.
I can post updated versions of all the relevant files on GitHub, with the names and internally distinct Module names I adopted to keep the two versions separate - jwm_shapes.rb instead of shapes.rb, an overall module name JWM instead of Community Extensions, and a sub-module name of JWMShapes instead of Shapes, and the amended code to insert components.
Alternatively, and much simpler for me, I can email a copy of the jwm_shapes2.5.rbz file to you for you to decide how best to rename the contents to keep the two versions distinct, should you wish to update the SU Shapes version to add the additional functionality. It also includes updated documentation and changelog.
Please let me know how to proceed from here.

I'm unclear whether, and if so how, you want to update the Community Extension version to correspond.

Generally, pull requests need to be made against specific open issues. One request per issue, and only changes to satisfy that one issue, so it can be easily tested and then merged and closed.
I'd have to guess your code base is now too much diverged from the main trunk. So I'd vote it just remain separate as your edition of the Shapes extension, under your own module.
Eventually, someone else can cut and paste snippets into other pull requests, one at a time, to get the open issues closed and merged properly into the Community edition.
I am also not convinced the 3D Shapes edition should be extended with a bunch of Wireframe shapes. (Like Thomas I expect them to be solids.) Might be better if  wireframe shapes were a separate extension, and on their own sub-menu of the Draw menu ?


Use slots in Order object to save memory

for a 2year backtest that places an order every minute (= ~205k orders), this takes max memory usage from 250MB to 163MB.

Coverage decreased (-0.04%) to 84.159% when pulling 7970b96218a825df2006391b9d827bad67cd9899 on vegas-baby into 842c47b32861ca5d264ab5f0b2c7031aa3b27906 on master.


Expected Time?

Please consider to add, expected require time to create the Snapshot.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 1bb0d5aa-46fa-b15d-8eec-c724b5ae468c
Version Independent ID: 1977490f-d9c6-574c-c6a4-36b0ebd484b8
Content: Create a snapshot of a VHD in Azure
Content Source: articles/virtual-machines/windows/snapshot-copy-managed-disk.md
Service: virtual-machines-windows
Sub-service: disks
GitHub Login: @roygara
Microsoft Alias: rogarana

@KeiroKamioka0000
Thanks for the feedback! I have assigned the issue to the content author to investigate further and update the document as appropriate.

@KeiroKamioka0000 thanks for reaching out, we do appreciate any and all suggestions. :)
In this case, the reason we do not add an expected time is that such a time is highly variable. Because of that, it doesn't make sense to document an exact time.
Again, thank you for taking the time to reach out.
#please-close


Fixes 984 and 992

See https://github.com/umple/umple/pull/993#issue-205489853 for what this PR does. I'm making a new PR rather than using 993 because I rebased in a dumb way and messed up the commit history of the 984 branch.

The build didn’t pass CI on Mac. I’m looking into why, sorry! I did a full build on my machine, I must have missed a failure somewhere
From: Vahdat Abdelzad<EMAIL_ADDRESS>Sent: February 26, 2017 8:57 PM
To: umple/umple<EMAIL_ADDRESS>Cc: Adam Bolding-Jones<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [umple/umple] Fixes 984 and 992 (#1006)
Merged #1006 https://github.com/umple/umple/pull/1006 .
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/umple/umple/pull/1006#event-977780711 , or mute the thread https://github.com/notifications/unsubscribe-auth/AIkHsN3xR_xJkrN4T0kYC0qNj3E6ysNfks5rglesgaJpZM4MMsAa .  https://github.com/notifications/beacon/AIkHsEeAdKD4p2YlRPtETQyx6RD-ePWLks5rglesgaJpZM4MMsAa.gif

@vahdat-ab I did a full build, there aren't any errors. Here's the build output: https://gist.github.com/AdamBJ/faac94caa040a1e412dbe43f93d8466d.js
I'm not sure what's wrong. I didn't have any problem, and the build completed on Linux successfully. Is there any way to run the CI again?

I'm rerunning the travis build now

It looks like the travis checks on master with my changes included are fine: https://travis-ci.org/umple/umple

@AdamBJ everything looks ok :-)


Add TIMESTAMP literal tests

Currently there aren't any TIMESTAMP literal tests and only tests using the Ion timestamp (using the backticks).

Perhaps need to tie the timestamp value represented in Ion with date and time: https://github.com/partiql/partiql-tests/issues/82


Oso 0.26 - Issue with entities appearing multiple times in a relation

Hi.
I'm still having issues migrating to 0.26.
I modified my code to use
from polar.data.adapter.sqlalchemy_adapter import SqlAlchemyAdapter

It won't work with 0.25 (#1520) so I can't tell for sure if the difference comes from the use of SqlAlchemyAdapter or from 0.25 vs. 0.26.

Apparently there has been an important rework in the way the SQL queries are built. I can see that 0.26 generates simpler queries where 0.25 uses subqueries.
A first consequence of this is that when building upon a query generated with authorized_query I had issues if I added joins with tables that were already used inside the authorization logic, therefore already used in the query.
This would take the form of
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateAlias) ERROR: table name "xxx" specified more than once

I solved this by aliasing the tables I join.
Basically,
    authorized_query(user, "read", Team).join(UserTeamAssocTable)

becomes
    authorized_query(user, "read", Team).join(sqla.orm.aliased(UserTeamAssocTable))

I'm not proficient with SQLAlchemy but I'm thinking perhaps Oso could alias tables in the first place so that the user could use classes directly without bothering. It is nice (in fact, fantastic) that Oso does the SQL stuff for us but having to alias tables used in the auth logic kind of makes the abstraction leak. To be on the safe side, I can alias all tables in joins appended to Oso-generated queries, but it is a pity.

Now I'm facing another issue that might be related.
I have a model in which User relates to both A and B, and A and B themselves are related. I define permissions allowing the user to read AxB association table. The rule is that if user has read permission on both A and B, they can read AxB association.
I'm getting this error:
polar.exceptions.OperationalError: Invalid state: Type `User` occurs more than once as the target of a relation

I printed a trace but it is a bit hard for me to unravel. Anyway, my guess is that user appears twice because it is involved in both userxA and userxB relations.
Here's a trace line before the error:
[oso][info]     resource: _this matches TimeseriesClusterGroupByCampaign{} and _this.campaign matches Campaign{} and _ubc_447 in _this.campaign.users_by_campaigns and <User Chuck<EMAIL_ADDRESS>admin: True, active: True> TYPE `UserActor` = _ubc_447.user and _this.timeseries_cluster_group matches TimeseriesClusterGroup{} and _tscgbu_461 in _this.timeseries_cluster_group.timeseries_cluster_groups_by_users and <User Chuck<EMAIL_ADDRESS>admin: True, active: True> TYPE `UserActor` = _tscgbu_461.user

I'm thinking it could be related to the first issue because in both cases an entity appears twice. In the first case, the second appearance appears in my code and I get an SQLAlchemy error, while here it all happens in Oso and I get a polar error.
I didn't take the time to build a minimal reproducible example and I hope I'm (making sense and I'm) giving enough details.
I don't mind linking to the project if it helps, it is public anyway, but I don't expect someone to be willing to dive into it.
Anything else I could provide?
Thanks.

Hey, thanks for the super detailed issue.
The table alias problem is one I hadn't thought about before but totally makes sense.
The other one is a limitation of the new data filtering right now. It can only join to each table once. We want to expand that in the future but that's how it is right now.
That error is a little confusing, why is it trying to join to User more than once? If instead of relations from resources to users you put all those relations on the user to resources it might be possible to work around this.

The table alias problem is one I hadn't thought about before but totally makes sense.

Good. Well, if you can improve this, it's great. The user experience would be better. Meanwhile, we can live with it. We just need to alias the joint we append to the query.

That error is a little confusing, why is it trying to join to User more than once? If instead of relations from resources to users you put all those relations on the user to resources it might be possible to work around this.

I'm not sure I understand that part, and I'd surely appreciate a hint.
The polar file is here.
Relevant part would be:
# User is a resource and an actor, so I define UserActor for the actor
actor UserActor {}

resource User {
    permissions = ["create", "read", "update", "delete", "set_admin", "set_active"];
    roles = ["self"];

    "read" if "self";
    "update" if "self";
}
has_role(_user: UserActor{id: id}, "self", _user: User{id: id});

# -----------------------------------------------------------------------------------------

# Campaign table
resource Campaign {
    permissions = ["create", "read", "update", "delete"];
    roles = ["c_member"];

    "read" if "c_member";
}
has_role(user: UserActor, "c_member", campaign: Campaign) if
    ubc in campaign.users_by_campaigns and
    user = ubc.user;

# User x Campaign assoc table: user can read its own associations
resource UserByCampaign {
    permissions = ["create", "read", "update", "delete"];
    roles = ["ubc_owner"];

    "read" if "ubc_owner";
}
has_role(user: UserActor, "ubc_owner", ubc: UserByCampaign) if
    user = ubc.user;

# -----------------------------------------------------------------------------------------

# TSCG table
resource TimeseriesClusterGroup {
    permissions = ["create", "read", "update", "delete"];
    roles = ["tscg_member"];

    "read" if "tscg_member";
}
has_role(user: UserActor, "tscg_member", tg: TimeseriesClusterGroup) if
    tscgbu in tg.timeseries_cluster_groups_by_users and
    user = tscgbu.user;

# User x TSCG assoc table: user can read its own associations
resource TimeseriesClusterGroupByUser {
    permissions = ["create", "read", "update", "delete"];
    roles = ["tscgbu_owner"];

    "read" if "tscgbu_owner";
}
has_role(user: UserActor, "tscgbu_owner", tscgbu: TimeseriesClusterGroupByUser) if
    user = tscgbu.user;

# -----------------------------------------------------------------------------------------

# TSCG x Campaign assoc table: user can read if associated with both Campaign and TSCG
resource TimeseriesClusterGroupByCampaign {
    permissions = ["create", "read", "update", "delete"];
}
has_permission(user: UserActor, "read", tgbc: TimeseriesClusterGroupByCampaign) if
    has_role(user, "c_member", tgbc.campaign) and
    has_role(user, "tscg_member", tgbc.timeseries_cluster_group);

The admin may associate users and campaigns, campaigns and TSCG, and users and TSCG.
The user may read Campaign x TSCG associations if he is a member of (i.e. associated with) both the campaign and the TSCG. This is how I specify the rules. And I believe this is why the query builder joins twice on user.
Maybe the way I build the polar file is wrong. It is mostly based on trial and error + extensive unit tests.

If instead of relations from resources to users you put all those relations on the user to resources it might be possible to work around this.

Oh, you mean the Relations in register_class should be in User class rather than Campaign, UserByCampaign and all? I could try that, see how it goes.
Thanks.

Oh, you mean the Relations in register_class should be in User class rather than Campaign, UserByCampaign and all? I could try that, see how it goes.

Yeah I believe this is what @saolsen was getting at — that you could invert the relations so that you're going from, e.g., UserActor -> TimeseriesClusterGroupByUser instead of from TimeseriesClusterGroupByUser -> UserActor. Were you able to make any progress on this issue?

Hi. Thanks for the help on this.
I just changed
has_role(user: User, "c_member", campaign: Campaign) if
    ubc in campaign.users_by_campaigns and
    user = ubc.user;

into
has_role(user: User, "c_member", campaign: Campaign) if
    ubc in user.users_by_campaigns and
    campaign.id = ubc.campaign_id;

and the test now passes.
Good. Yet, I have the feeling that I'm getting away with it this time but the same issue might strike again anytime and it won't be obvious why it doesn't work and what relation will work, if any. As @saolsen said, this is a workaround.
In other words, I consider the problem still exists, but the workaround at least allows me to move on. This and #1536 currently prevent me from moving to 0.26 / SqlAlchemyAdapter and I don't want to waste your time reporting issues with the deprecated query builder, so I'm kinda stuck if I have Oso related issues in my app dev branch that I can't test against 0.26.

As I expected, I just got hit by this again.
My model has this kind of loop / diamond relation (those loops always make me cringe but that how it is):
           A1 - A2
          /       \
    U - UG         AB
          \       /
           B1 - B2

User groups associate users with both A1 and B1 objects, which defines user access to A2 and B2 respectively. The permissions on AB association table depend on both permissions on A2 and B2 and I'm getting the dreaded
polar.exceptions.OperationalError: Invalid state: Type `UserGroup` occurs more than once as the target of a relation

Nothing new and surprising, I'm afraid. This time, I could get away with it because a business rule implies that read permissions on A involves read permissions on B so I could skip the check on B, but this is very specific and I'm afraid as the model grows, this will become a real blocker.

The other one is a limitation of the new data filtering right now. It can only join to each table once. We want to expand that in the future but that's how it is right now.

I assume the case above is pretty common in real-life models so this must be a major drawback, isn't it?
I guess there are technical reasons for this current limitation and I totally understand Oso is young and you can't get the whole thing done right away, but I'm curious about your roadmap, more specifically, is this a high-priority feature you aim at supporting soon or is it a low-priority improvement that might be achieved some day eventually?
Or is this actually a corner case I could avoid with a better model or a better use of Oso?

It is a pretty common thing for people to run into so is a big drawback of the current data filtering. We're focused on some other things right now so I don't really have a good answer for when we'll get to it.


Support styled table columns

Currently, TableViewItem::to_column returns a String.  It would be convenient to be able to add some style to the string, or maybe even to be able to use an arbitrary view instead.

I second this suggestion


Update requirements.txt: sentence transformers

Description
Update requirements.txt: sentence transformers bump up
Type of change

[ ] Refactor
[ ] New feature
[ ] Bug fix
[ ] CVE fix
[ ] Optimization
[ ] Documentation Update
[ ] Configuration Update
[ ] Bump-up dependent library
[ ] Bump-up library or tool used for development (does not change the final image)
[ ] CI configuration change
[x] Konflux configuration change

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 95.03%. Comparing base (be25e61) to head (7a3f9be).
Report is 35 commits behind head on main.

Additional details and impacted files

@@            Coverage Diff             @@
##             main    #1795      +/-   ##
==========================================
+ Coverage   95.01%   95.03%   +0.01%
==========================================
  Files          61       61
  Lines        2751     2759       +8
==========================================
+ Hits         2614     2622       +8
  Misses        137      137

see 2 files with indirect coverage changes

/retest

/retest

/retest

/retest

/approve

/lgtm

/override "Red Hat Konflux / lightspeed-service-on-pull-request"


How much is the per gpu batch size?

How much is the per gpu batch size?
total batchsize is 4096, GPU num is 8, so per gpu batch size is 512?
But I use A100 GPU, the batch size only can be set 16?

You can set the per_gpu_batch_size based on your GPU memory. The gradients will accumulate so it doesn't affect the total batch size.

Thank you!

Another question: How to computer the epoch? Like this?
Epoch = Batchsize * step / len(dataset) = 4096 * 100000 / 4000000 = 102?

For our pre-training datasets, the number of the total image-caption pairs is about 10M, so the number of training epochs is about 4096*10k/10M $\approx$ 40.

OK! Thank you for your reply. @zdou0830


Settings Editor: Clicking on anchor doesn't work in search view

Testing #55401:

Input "Search"
In "Search: Exclude", click the anchor for files.exclude
Nothing happens
Clicking the anchor without search query works

#55179


{"error":{"code":"","message":"Value cannot be null.\r\nParameter name: source"}}

I am trying to use the reference service https://services.odata.org/TripPinRESTierService form Salesforce, and the Airlines and Airports works well. But when I try to access the Person Object, I get this error:
{"error":{"code":"","message":"Value cannot be null.\r\nParameter name: source"}}

This is the query that is being made.
https://services.odata.org/TripPinRESTierService/(S(y5p3g0acttyshhhmucgq5fvb))/People?$filter=UserName eq 'angelhuffman'&$count=true&$select=AddressInfo,Age,Emails,FavoriteFeature,Features,FirstName,Gender,HomeAddress,LastName,MiddleName,UserName

I am assuming the primary key of that object is the Username.

This error occurs because the Features property for angelhuffman is not initialized in the data, so it is null which is not allowed for a collection-valued property.

Fixed by https://github.com/OData/ODataSamples/pull/223.  Just needs to be deployed to services.odata.org.


Not an Issue, just a suggestion.

Very impressive.
Can we the run the export on a seperate isolate to speed things up?

Yeah, but it wouldn't help much because image is single threaded. So it would just take as much time on another thread. Also isolates are dart:io only so it won't help on web.

At the moment you can only speed it up by reducing the quality. I plan to make transcoding changeable so you could use ffmpeg on mobile but there's no timeline yet

Thank you for the speedy reply. I appreciate it.


Fix typo

Fixing typo  The other two examples have the attribute called

[IdentityBasicAuthentication] // Enable Basic authentication for this controller.

This section will also need to use IdentityBasicAuthentication
IdentityBasicAuthentication

@LindaLawton We appreciate the contribution; however, the sample is correct as it stands.
When instantiated directly (to apply as a global filter), the "Attribute" suffix is required. When used to decorate a class member (e.g., [AttributeName]), the "Attribute" suffix can be omitted.

Are you sure I just ran through it today and I gives a error that it can't be found until you fix the name.


Migrate LDAP to SAML

Hi
I would like to change my bookstack instance with a lot of ldap users to SAML authentification.
Is this straightforward or do i need to change something so that currently existing ldap users can login with SAML?
Thank you

Hi,
our organisation switched from ldap to SAML. Users could login afterwards to their accounts created using the ldap authentication.
Matching of users is done using the SAML2_EXTERNAL_ID_ATTRIBUTE attribute, so make sure it contains the same value as the LDAP_ID_ATTRIBUTE (for the same user).

Yeah, @miterion is spot-on here. Both systems match existing users by checking their stored external_auth_id with the id provided by the LDAP/SAML system. If you're using the same attribute (That has the same values), you should be good otherwise you might need to update the external_auth_id of existing users on migration.
The external_auth_id is just stored as a column on the users table within the database, if you need a programmatic/bulk way of updating.
If you're using group/role sync then that may be an additional consideration. Is supported in SAML but there could be differences in how your auth system provides those groups to BookStack. Additionally, with LDAP we walk up the group chain to get parent groups whereas I don't think there's a standardised way to do this on the SAML side.

Thank you both for the explanations. I will check if and how i will do it.


RegexPattern for iso8601WithOffset() isn't correct

Bug report
The iso8601WithOffset() call internally uses the ISO8601_WITH_OFFSET regex pattern defined in org.springframework.cloud.contract.spec.internal.RegexPatterns.  The regex is:
([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.\d{3})?(Z|[+-][01]\d:[0-5]\d)
This pattern expects exactly 3 digits to be included in the milliseconds portion of the timestamp, no more, no less.  But, the default formatting of ISO 8601 timestamps used by Java/Jackson removes insignificant zeros from the milliseconds in the timestamp when serializing to JSON.  The matcher then fails.
For example, for this timestamp "effectiveDateTime": "2019-12-27T23:33:09.74Z", I get the following error<EMAIL_ADDRESS>=~ /([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.\d{3})?(Z|[+-][01]\d:[0-5]\d)/)] even though it is a legitimate timestamp generated by Java and serialized by Jackson.
Spring Cloud Contract version: 2.1.2

Can you please show how you're setting up Jackson?  Cause the Javadocs of the SerializationFeature.WRITE_DATES_AS_TIMESTAMP shows that there should be 3 x S, yyyy-MM-dd'T'HH:mm:ss.SSSZ
 /**
     * Feature that determines whether Date (and date/time) values
     * (and Date-based things like {@link java.util.Calendar}s) are to be
     * serialized as numeric timestamps (true; the default),
     * or as something else (usually textual representation).
     * If textual representation is used, the actual format is
     * one returned by a call to
     * {@link com.fasterxml.jackson.databind.SerializationConfig#getDateFormat}:
     * the default setting being {@link com.fasterxml.jackson.databind.util.StdDateFormat},
     * which corresponds to format String of "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
     * (see {@link java.text.DateFormat} for details of format Strings).
     *

     * Note: whether this feature affects handling of other date-related
     * types depend on handlers of those types, although ideally they
     * should use this feature
     *

     * Note: whether {@link java.util.Map} keys are serialized as Strings
     * or not is controlled using {@link #WRITE_DATE_KEYS_AS_TIMESTAMPS}.
     *

     * Feature is enabled by default, so that date/time are by default
     * serialized as timestamps.
     */
    WRITE_DATES_AS_TIMESTAMPS(true),

Can you create a simple sample that breaks with the latest Spring Cloud Contract release?

I think that comment is wrong (or maybe out-of-date).  I think it is also a little besides the point.  The real issue is that, as far as I know (based on web searches I did in researching this issue) the ISO 8601 spec does not require a fixed format of exactly 3 digits for the fractional seconds part of the date time specification.  It can have less precision; it can have more.
Below is a simple example that demonstrates the problem.  Sorry, I'm still running against the 2.1.2 version of spring cloud contract.  There is some Gradle issue I have yet to figure out that prevents me from moving to the latest version:
Sample:
Controller:
@RestController
public class Controller {

    @GetMapping("/api/v1/currentDateTime")
    public CurrentDateTime getCurrent() {
        return new CurrentDateTime(Instant.now().truncatedTo(ChronoUnit.MILLIS).atZone(ZoneOffset.UTC));
    }

    static class CurrentDateTime {
        private ZonedDateTime current;

        public CurrentDateTime(ZonedDateTime current) {
            this.current = current;
        }

        public ZonedDateTime getCurrent() {
            return current;
        }
    }
}

Main:
@SpringBootApplication(scanBasePackages = "isotest")
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

Test base:
public class IsoTestBase {

    @BeforeEach
    public void setUp() {
        ObjectMapper objectMapper = new ObjectMapper()
                .registerModule(new Jdk8Module())
                .registerModule(new JavaTimeModule())
                .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        StandaloneMockMvcBuilder b = MockMvcBuilders.standaloneSetup(new Controller())
                .setMessageConverters(new MappingJackson2HttpMessageConverter(objectMapper));
        RestAssuredMockMvc.standaloneSetup(b);
    }
}

Contract test:
package isoTest

import org.springframework.cloud.contract.spec.Contract

[
        Contract.make {
            request {
                headers {
                    contentType(applicationJsonUtf8())
                }
                method 'GET'
                urlPath '/api/v1/currentDateTime'
            }
            response {
                status 200
                headers {
                    contentType(applicationJsonUtf8())
                }
                body(
                        [
                                current : regex(iso8601WithOffset())
                        ]
                )
            }
        }
]

build.gradle:
buildscript {
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.6.RELEASE")
        classpath("org.springframework.cloud:spring-cloud-contract-gradle-plugin:2.1.2.RELEASE")
    }
}

apply plugin: 'org.springframework.boot'
apply plugin: 'spring-cloud-contract'

repositories {
    jcenter()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:2.1.2.RELEASE")

    // Use JUnit test framework
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.3.1")
    testCompile("org.junit.jupiter:junit-jupiter-params:5.3.1")

    // contract test framework
    testCompile("org.springframework.cloud:spring-cloud-starter-contract-verifier:2.1.2.RELEASE")
    testCompile("org.springframework.cloud:spring-cloud-starter-contract-stub-runner:2.1.2.RELEASE")
    testCompile("org.springframework.cloud:spring-cloud-contract-wiremock:2.1.2.RELEASE")
}

sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

contracts {
    packageWithBaseClasses = 'isotest.contracts'
    basePackageForTests = 'isotest.contracts.verifier.tests'
    generatedTestSourcesDir = project.file("${project.rootDir}/src/test/contractTests")
    testFramework = 'JUNIT5'
}

test {
    testLogging {
        events "passed", "skipped", "failed"
    }

    useJUnitPlatform()
}

bootRun {
}

Note that in our code, we are truncating the fractional seconds to milliseconds using Instant.now().truncatedTo(ChronoUnit.MILLIS).  As long as the generated milliseconds value has 3 digits, the test passes.  But intermittently it fails when the milliseconds has only 1 or 2 digits.  Also note that if you remove the truncatedTo(ChronoUnit.MILLIS) part, the fractional seconds will have microsecond resolution which will generate 6 digits.  This will cause the test to fail every time.

Can you show me where the iso format doesn't require 3 digits for mills? I couldn't find such information myself?
Also which comment str you referring to that is outdated?

I think the ISO 8601 spec itself is probably the only definitive source.  I don't have the latest since it costs money to get it.  Looks like someone posted a version from 2016 here though:
http://www.loc.gov/standards/datetime/iso-tc154-wg5_n0038_iso_wd_8601-1_2016-02-16.pdf
The language is very "spec-eze", but you can look at section <IP_ADDRESS> on page 18.  Also, here are a couple of other links about the format:
https://www.w3.org/TR/NOTE-datetime
(see Formats section)
https://stackoverflow.com/questions/25842840/representing-fraction-of-second-with-iso-86012004
(see first answer)
And, hopefully the code sample I provided shows the issue.  You may have to run a few times to see a failure (or remove the millisecond truncation to see consistent failures)


Add VS Code integration

VS Code does not work with git hooks. So after getting the shell version working I can look at making a vs code extension based on this one
https://github.com/benjaminadk/emojigit
I could even use my existing command as using the confirmation flow there is a terminal git commit command, but one gets there after using the extension UI. Also the confirmation in the terminal can be toggled. Maybe it is just behind the scenes

The extension uses quick pick.
Look at the VS Code library API in the docs for how to preview a message in the pane or command view, then ask user to accept or not override with own message.
Also maybe look at the semantic commit extension which mixes typing your message with choosing chore, docs etc.
I need to generate a commit message, maybe using git API is JS in the first emojicommit extension above or the shell to read the git status. And then give the user a choice to accept (y/n or just prepopulate a single file) or override with own message.
Then commit with terminal

I don't think this is one I used but it is related
https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits

Note from my testing that VS Code does actually respect the prepare-commit-msg hook, meaning that the hook can be used without writing a new VS Code extension (as I planned before).
But note that VS Code with this hook means just overwrites the message based on your input messange and hook logic. You don't get to confirm and you only see what was written when you check the log.
Also note that this flow does not actually use what you enter in the commit box - VS Code does not write to the .git/COMMIT_EDITMSG file and therefore there is nothing there for the hook to read. I found an issue on the VS Code repo about this that didn't get enough votes to get addressed.
Options are:

Create hook that is used on the terminal and also on VS Code but on every commit and it does not use the original message.
Create an extension based on the Emoji and Semantic commit ones

Also extension templates are easy enough to use but i need to see how to make my extension installed on VS Code locally

Also I don't know why the helloworld test sample downloads VS Code - the semantic commit one has a similar test setup without the download.
Also maybe the download is skipped on subsequent runs

Done with tag v0.7.0 !


Configuring api context path with property camel.context.rest-configuration.api-context-path does not work

While working on the openapi-java extension (#1281) I found a strange behaviour, so assuming  we have:
camel.context.rest-configuration.component = undertow
camel.context.rest-configuration.api-context-path=/openapi.json

Then the api context path is null on the rest configuration when running in native mode but works in jvm mode. Using main short-cuts like:
camel.rest.component = undertow
camel.rest.api-context-path=/openapi.json

works in both the modes.
We should definitively use the camel.rest prefix to configure the rest bits but camel.context.rest-configuration is also supposed to work so it should there should not be differences.

TL;DR - FastCamelContext needs to be registered for reflection for the camel.context.rest-configuration.* config style to work in native mode.
It comes down to how PropertyBindingSupport resolves the target object to bind the property value. When using the short cut, the property name seen by PropertyBindingSupport.setProperty is stripped of the camel.rest prefix. E.g like apiContextPath.
With the longer style, the property name is like restConfiguration.apiContextPath. This results in iterating over the '.' delimited parts in order to resolve each property. RestConfiguration belongs to FastCamelContext, and hence it gets looked up reflectively (there is no property configurer for RestConfiguration).
Currently this part fails, so a new RestConfiguration is instantiated for each rest configuration property that the user has chosen to set, effectively erasing any rest-configuration properties that were previously set.

I thought that the RestConfiguration was instantiated only once after the first property set.
Btw since we have now a single configuration for rest we could avoid the getter/setter and simply create the rest configuration the first time the getter is invoked

The style to configure rest is
camel.rest.*

And not
camel.context.rest-configuration.*

But we can look at a way to have a configurer generated for RestConfiguration as well.
https://github.com/apache/camel/blob/39cbd7f6866cb041d77f6fddc3c7c0721e4d0926/core/camel-core-engine/pom.xml#L135

I create a ticket in Camel
https://issues.apache.org/jira/browse/CAMEL-15247

btw you can see all the options you can set as properties here
https://camel.apache.org/components/latest/others/main.html

I think that either we remove the option to set camel context specific bits via the camel.context prefix or we have to fix it as it is true that we have main.rest for the rest bits but the mechanic of the issue that James described could apply as example to the stream caching configuration

Its really only the options listed on that page that are reflection free configurable and intended for configuration via properties.
When you do camel.context.xxx you go of the track, and you can end up calling any APIs down the context, and its children etc. We will never be able to source code generate for every possible combination here.
The stream caching configuration is already on camel.main as configurable

So IMHO we should remove the option to use camel.context.xxx

Quarkus is not the only one in the universe, and surely also not native mode. Camel Main is also used by camel kafka connector etc.

First level camel.context.xxx is possible as there is a configurer for that.
its when you do
camel.context.xxx.yyy.zzz
Where it depends what yyy.zzz are etc.

My only point is that if camel.context.xxx.yyy.zzz is allowed, then it has to work. If it is reflectively done or with a configurer, I don't mind and it is really not the point of my issue

Yes fair point, and to make camel.context.rest-configuration.xxx work in native mode is fixed by CAMEL-15247 and thus Camel 3.5 onwards.

@jamesnetherton says that this is fixed in Camel and that in Camel Quarkus master the issue does not occur. We might still want to add a tests.

Not needed as its tested in camel-core - and this is a issue in camel-core and not camel-quarkus


Improvements in the Calculator plugin

📝 Provide detailed reproduction steps (if any)
A few issues with the calculator plugin:

Following the refactoring of the calculator plugin, when the result is 0 it no longer shows up.
Eg: 1-1, sin(0) do not work because the result is 0.
Exceptions are thrown when the user is entering the input but it's not complete.
Eg: 1+2+3, an exception is thrown when the user has entered 1+2+ because according to the calculator helper this is a valid input.
Exceptions are also thrown when any functions are used.
eg: sin(0), an exception is thrown when sin is typed.

These exceptions can slow the performance of PT run.
The last set of exceptions can be thrown when a user is a searching for an app leading to a reduced speed while searching.

Somebody had the idea to use the Windows calculator core. Wouldn't that solved all (these and other) problems?

@Jay-o-Way  I'm not sure of the feasibility but that's a nice idea. Maybe create a new issue for that with an idea enhancement tag so that it can be prioritized accordingly.

Fist mentioning that I saw was https://github.com/microsoft/PowerToys/issues/3697#issuecomment-633835671 but #2265 is already an issue.

Added in 0.25.  https://github.com/microsoft/PowerToys/releases/tag/v0.25.0


feat: load session by path

Ref: #47
@akinsho let me know if this PR works for you. It adds a SessionLoadFromFile command allowing you to pass in the path to a session to load.
For example:
SessionLoadFromFile /Users/Oli/.local/share/nvim/sessions/%Users%Oli%Code%Shell%tmux-pomodoro@@main.vim

@olimorris just tried that out and it works very nicely to load sessions ❤ 🙌🏿


Auto-close PRs on subtree-splits

Q
A

Bug fix?
no

New feature?
no

Issues
n/a

License
MIT

Same as symfony/symfony#54653

Nice :) You should also borrow the script + CI I added to the root repo.
PR welcome on symfony/polyfill and on twig if you're up to ;)


split digit cut off fix

Details

When the cursor comes after coming back it already has the calculated width of text(also cursor width is 1px more causing the issue) from onlayout which is 1 px less than the actual width.
Adding + 1 in width isn't noticeable and fixes the issues

Fixed Issues

$ https://github.com/Expensify/App/issues/8158
Tests

[] Verify that no errors appear in the JS console

Login to app on mWeb.
Press on + icon and click split bill and add amount like 888.
Press Next and on next screen press back button from header(top-left)
First digit will be shown as expected without cut off(Broken)

PR Review Checklist

Contributor (PR Author) Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for Staging and/or Production testing in the QA steps section
[ ] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] iOS / native
[x] Android / native
[x] iOS / Safari
[x] Android / Chrome
[x] MacOS / Chrome
[x] MacOS / Desktop

[x] I verified there are no console errors (if there’s a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained “why” the code was doing something instead of only explaining “what” the code was doing.
[ ] I verified any copy / text shown in the product was added in all src/languages/* files
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named “index.js”. All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] Any functional components have the displayName property
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose and it is

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn’t already exist
[ ] The style can’t be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.

PR Reviewer Checklist

[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] iOS / native
[ ] Android / native
[ ] iOS / Safari
[ ] Android / Chrome
[ ] MacOS / Chrome
[ ] MacOS / Desktop

[ ] I verified there are no console errors (if there’s a console error not related to the PR, report it or open an issue for it to be fixed)
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained “why” the code was doing something instead of only explaining “what” the code was doing.
[ ] I verified any copy / text shown in the product was added in all src/languages/* files
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named “index.js”. All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] Any functional components have the displayName property
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose and it is broken down into smaller components in order to separate concerns and functions

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn’t already exist
[ ] The style can’t be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.

QA Steps

[x] Verify that no errors appear in the JS console
Login to app on mWeb.
Press on + icon and click split bill and add amount like 888.
Press Next and on next screen press back button from header(top-left)
First digit will be shown as expected without cut off(Broken)

Screenshots

cannot run app on my local machine as im getting error 403 by api's that's why cant upload screenshots unfortunately.
Web
Desktop
IOS
Android
Mweb

What do you mean by cannot run app on my local machine as im getting error 403 by api's that's why cant upload screenshots unfortunately.? You need to test your changes before we can approve the PR. Can you post in #expensify-open-source in Slack to see if someone has had this problem before and can help you?

Here's the slack thread for reference - https://expensify.slack.com/archives/C01GTK53T8Q/p1652066886829219
@aneequeahmad I'll see what I can do to help on the thread.

Ohh gotcha! Ok, that is tricky because I am not sure what's wrong either, I think there has been some movement on the thread, I am hoping tomorrow it gets resolved, otherwise not sure what's the best way to proceed, I will ask to the team.

Hmm, there isn't any movement on the thread.
To move things forward, I'll post the screenshots over the weekend.

@rushatgabhane Thats so nice of you 🙇♂. I have setup the linux on VM but would require another day to get the project up and running. If you can post screenshots over the weekend that would be great. I’ll also be available over the weekend. Let’s get it done. Let me know if there are any changes required in the PR. Thanks

@rushatgabhane also, what should i do to run the project on my macBook ? Should i re-install the the OS completely ? Maybe lower version of OS. It’s stoping me from the work :(

Hey @aneequeahmad just a gentle nudge to address the comments

@rushatgabhane Done, Thank you for pounting this out.

@rushatgabhane I pushed 1 commit that was unsigned. Rebased it pushed again but still it's appearing.

@rushatgabhane did force push but seems like unsigned commit wasn't removed

@aneequeahmad

git reset --hard unverifiedCommitHash
git push --force

@rushatgabhane unverified commit is not removed i think i should reset hard to one commit before unverfied commit and force push ? or should i open a new PR ?

@rushatgabhane Unverified commit removed and feedback changes applied. Thanks for guiding

iOS
https://user-images.githubusercontent.com/29673073/172488603-ebd9d358-4257-459b-8033-732204b3628c.mov
mWeb
https://user-images.githubusercontent.com/29673073/172488575-85d06f40-54d4-4cd2-bb4f-a628681ae861.mov

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by @pecanoro in version: 1.1.75-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by @roryabraham in version: 1.1.75-1 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Starfish with python 3.7 comple issues.

It seems that Starfish does not play nicely with python 3.7.
By that I mean the extensions have compilation issues....
> conda create -n py37starfishtest python=3.7 numpy cython h5py scikit-learn emcee
...
The following NEW packages will be INSTALLED:

    blas:            1.0-mkl
    bzip2:           1.0.6-h470a237_2      conda-forge
    ca-certificates: 2018.8.24-ha4d7672_0  conda-forge
    certifi:         2018.8.24-py37_1
    cython:          0.28.5-py37hfc679d8_0 conda-forge
    emcee:           2.2.1-pyh24bf2e0_4    conda-forge
    h5py:            2.8.0-py37h989c5e5_3
    hdf5:            1.10.2-hc401514_2     conda-forge
    intel-openmp:    2018.0.3-0
    libffi:          3.2.1-hfc679d8_5      conda-forge
    libgcc-ng:       8.2.0-hdf63c60_1
    libgfortran:     3.0.0-1               conda-forge
    libgfortran-ng:  7.3.0-hdf63c60_0
    libstdcxx-ng:    8.2.0-hdf63c60_1
    mkl:             2018.0.3-1
    mkl_fft:         1.0.4-py37h4414c95_1
    mkl_random:      1.0.1-py37h4414c95_1
    ncurses:         6.1-hfc679d8_1        conda-forge
    numpy:           1.15.1-py37h1d66e8a_0
    numpy-base:      1.15.1-py37h81de0dd_0
    openssl:         1.0.2p-h470a237_0     conda-forge
    pip:             18.0-py37_1           conda-forge
    python:          3.7.0-h5001a0f_1      conda-forge
    readline:        7.0-haf1bffa_1        conda-forge
    scikit-learn:    0.19.1-py37hedc7406_0
    scipy:           1.1.0-py37hfa4b5c9_1
    setuptools:      40.2.0-py37_0         conda-forge
    six:             1.11.0-py37_1         conda-forge
    sqlite:          3.24.0-h2f33b56_1     conda-forge
    tk:              8.6.8-0               conda-forge
    wheel:           0.31.1-py37_1         conda-forge
    xz:              5.2.4-h470a237_1      conda-forge
    zlib:            1.2.11-h470a237_3     conda-forge

Proceed ([y]/n)? y

 ❯ source activate py37starfishtest

~/Phd/Codes/Repos/Starfish master*
(py37starfishtest) ❯ python setup.py develop
running develop
running egg_info
writing Starfish.egg-info/PKG-INFO
writing dependency_links to Starfish.egg-info/dependency_links.txt
writing requirements to Starfish.egg-info/requires.txt
writing top-level names to Starfish.egg-info/top_level.txt
reading manifest file 'Starfish.egg-info/SOURCES.txt'
writing manifest file 'Starfish.egg-info/SOURCES.txt'
running build_ext
skipping 'Starfish/covariance.c' Cython extension (up-to-date)
building 'Starfish.covariance' extension
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -m64 -fPIC -m64 -fPIC -fPIC -I/home/jneal/anaconda3/envs/py37starfishtest/lib/python3.7/site-packages/numpy/core/include -I/home/jneal/anaconda3/envs/py37starfishtest/include/python3.7m -c Starfish/covariance.c -o build/temp.linux-x86_64-3.7/Starfish/covariance.o -Wno-declaration-after-statement -Wno-error=declaration-after-statement -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable
In file included from /home/jneal/anaconda3/envs/py37starfishtest/lib/python3.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1823,
                 from /home/jneal/anaconda3/envs/py37starfishtest/lib/python3.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:18,
                 from /home/jneal/anaconda3/envs/py37starfishtest/lib/python3.7/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                 from Starfish/covariance.c:435:
/home/jneal/anaconda3/envs/py37starfishtest/lib/python3.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
 #warning "Using deprecated NumPy API, disable it by " \
  ^~~~~~~
Starfish/covariance.c: In function ‘__Pyx_PyCFunction_FastCall’:
Starfish/covariance.c:12347:13: error: too many arguments to function ‘(PyObject * (*)(PyObject *, PyObject * const*, Py_ssize_t))meth’
     return (*((__Pyx_PyCFunctionFast)meth)) (self, args, nargs, NULL);
            ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Starfish/covariance.c: In function ‘__Pyx__ExceptionSave’:
Starfish/covariance.c:13926:21: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
     *type = tstate->exc_type;
                     ^~~~~~~~
                     curexc_type
Starfish/covariance.c:13927:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
     *value = tstate->exc_value;
                      ^~~~~~~~~
                      curexc_value
Starfish/covariance.c:13928:19: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
     *tb = tstate->exc_traceback;
                   ^~~~~~~~~~~~~
                   curexc_traceback
Starfish/covariance.c: In function ‘__Pyx__ExceptionReset’:
Starfish/covariance.c:13935:24: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
     tmp_type = tstate->exc_type;
                        ^~~~~~~~
                        curexc_type
Starfish/covariance.c:13936:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
     tmp_value = tstate->exc_value;
                         ^~~~~~~~~
                         curexc_value
Starfish/covariance.c:13937:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
     tmp_tb = tstate->exc_traceback;
                      ^~~~~~~~~~~~~
                      curexc_traceback
Starfish/covariance.c:13938:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
     tstate->exc_type = type;
             ^~~~~~~~
             curexc_type
Starfish/covariance.c:13939:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
     tstate->exc_value = value;
             ^~~~~~~~~
             curexc_value
Starfish/covariance.c:13940:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
     tstate->exc_traceback = tb;
             ^~~~~~~~~~~~~
             curexc_traceback
Starfish/covariance.c: In function ‘__Pyx__GetException’:
Starfish/covariance.c:13995:24: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
     tmp_type = tstate->exc_type;
                        ^~~~~~~~
                        curexc_type
Starfish/covariance.c:13996:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
     tmp_value = tstate->exc_value;
                         ^~~~~~~~~
                         curexc_value
Starfish/covariance.c:13997:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
     tmp_tb = tstate->exc_traceback;
                      ^~~~~~~~~~~~~
                      curexc_traceback
Starfish/covariance.c:13998:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
     tstate->exc_type = local_type;
             ^~~~~~~~
             curexc_type
Starfish/covariance.c:13999:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
     tstate->exc_value = local_value;
             ^~~~~~~~~
             curexc_value
Starfish/covariance.c:14000:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
     tstate->exc_traceback = local_tb;
             ^~~~~~~~~~~~~
             curexc_traceback
error: command 'gcc' failed with exit status 1

This is not a show stopper for me ( I am just documenting that it is an issue)

Might be resolved after #107

My regression tests with #113 show no issues with python 3.7 anymore


Is Hook thrown?

Hi @PaulMaly, what do you mean?

I mean that last release was about year ago and seems that Hook was thrown.

We don't have a new version release planned, as a matter of interest of the maintainers and the community. I do believe that this project has potential to achieve higher results and better standards.
I personally use hook for quick agency projects every now and then.
If you happen to find any bug or feature request just do it, we're here to help.
Cheers!


Problem with launching FASMA

alex@alex-System-Product-Name:~/Downloads/FASMA-synthesis-master$ fasma
Traceback (most recent call last):
  File "/home/alex/.local/bin/fasma", line 12, in <module>
    driver = FASMA.FASMA(cfgfile=cfgfile, overwrite=None)
  File "/home/alex/.local/lib/python3.8/site-packages/FASMA/synthDriver.py", line 50, in __init__
    self.synthdriver()
  File "/home/alex/.local/lib/python3.8/site-packages/FASMA/synthDriver.py", line 526, in synthdriver
    for (self.initial, self.options) in self._genStar():
  File "/home/alex/.local/lib/python3.8/site-packages/FASMA/synthDriver.py", line 110, in _genStar
    with open(self.cfgfile, 'r') as stream:
FileNotFoundError: [Errno 2] No such file or directory: 'config.yml'

It seems like you are trying to run fasma from a folder, where there is no config.yml. You can use this as an example: https://github.com/MariaTsantaki/FASMA-synthesis/blob/master/FASMA/config.yml

It seems like you are trying to run fasma from a folder, where there is no config.yml. You can use this as an example: https://github.com/MariaTsantaki/FASMA-synthesis/blob/master/FASMA/config.yml

Hi @AlexSokokoliuk, did you manage to make fasma run?

Hi @AlexSokokoliuk, did you manage to make fasma run?

Yes, now all is OK.

Yes, now all is OK.


Unable to use ProcessingInput and ProcessingOutput with Spark-based SageMaker ScriptProcessor (ProcessingJob)

@ChuyangDeng
I am trying to convert the following example...
https://github.com/awslabs/amazon-sagemaker-examples/blob/714652a4f96fd764a247a4cee30425293db86c59/sagemaker_processing/feature_transformation_with_sagemaker_processing/feature_transformation_with_sagemaker_processing.ipynb
...to use ProcessingInput and ProcessingOutput.
After several attempts, I realized the following:

ProcessingInput and ProcessingOutput are not efficient due to the excessive data copying involved
Spark tries to use HDFS which would require copying the data from /opt/ml/processing/input to HDFS (also very inefficient)
Spark supports s3a:// directly, but this by-passes the ProcessingInput and ProcessingOutput convention with SageMaker Processing Jobs.

I understand this is only a sample, but can you provide guidance on how to best use ProcessingInput and ProcessingOutput with Spark-based Processing Jobs?  This is a relatively-popular combination of technologies.
Should we just use Spark's native s3a:// support like you're using in this sample for the Spark reads and writes?  Is there anything in progress to improve this integration?
For reference, here is a list of errors that I found with this integration:
spark.write.csv(/opt/ml/processing/output/) is trying to use HDFS, but the file is not in HDFS.  SageMaker copied the file to the local filesystem.  This is easily fixed by prepending file://, but worth highlighting:
Path does not exist: hdfs://x.x.x.x/opt/ml/processing/input/raw/reviews/xxx.csv;

spark.write.csv(/opt/ml/processing/output/) is trying to write to the /opt/ml/processing/output directory with overwrite=False
org.apache.spark.sql.AnalysisException: path file:/opt/ml/processing/output already exists.;

spark.write.csv(/opt/ml/processing/output/) is trying to write to the /opt/ml/processing/output directory with overwrite=True
fs.FileUtil: Failed to delete file or dir [/opt/ml/processing/output]: it still exists.

I tried using hadoop fs -cp, but this proved very inefficient, so I skipped it.
Any suggestions?

Hey @cfregly ,

can you provide guidance on how to best use ProcessingInput and ProcessingOutput with Spark-based Processing Jobs

Our guidance is to use s3a:// for Spark-based processing jobs reads and writes to avoid the data copying between S3, storage volume, and HDFS you mentioned -- since Spark can read from and write to S3, ProcessingInput and ProcessingOutput aren't needed in this case.
I'm closing this issue for now, but please feel free to reopen if you have more questions or feedback. Thanks!