text:
There is a way to send a callback function onSubmit?

Im trying to send a callback function when submit the form, is it possible?

Hey @ManchaTudo could u describe more your use case?
You can pass a function when the form is submitted, like below:
    // handleSubmit is a function executed when form is submitted
    <Form onSubmit={handleSubmit}>
      <Input name="email" type="email" />
      <Input name="password" type="password" />
      <button type="submit">Sign in</button>
    </Form>

But if i want to pass a callback function like this?
` async function handleSubmitChangeCategoria(data, {reset}, callback){
try{
const schema = Yup.object().shape({
nome_categoria: Yup.string().notOneOf([stateName, null], "O nome da categoria tem que ser diferente do antigo").required("O nome é obrigatório"),
})
    await schema.validate(data,{
      abortEarly: false,
    })

    reset();
    formRef.current.setErrors([]);
    await api.put('/categoria/edit.php?id=' + id,{nome_categoria: data.nome_categoria},{
      headers: {
        'Authorization': `Bearer ${localStorage.getItem("token")}`
      },
    })
    .then(response => {
      setStateName(response.data.categoria[0].nome);
      alertify.success(response.data.message);
      callback()
    }).catch(error => {
      alertify.error(error.response.data.message);
    })
  }
  catch(err){
    if(err instanceof Yup.ValidationError){
      const errorMessages = {};

      err.inner.forEach(e => {
        errorMessages[e.path] = e.message;
      })

      formRef.current.setErrors(errorMessages);
    }
  }

}

function handleModalEdit(){
    confirmAlert({
        customUI: ({ onClose }) => {
          return (

Editar categoria

                    <Form ref={formRef} initialData={initialData} onSubmit={handleSubmitChangeCategoria(onClose())}>
                        <Input name="nome_categoria" label="Nome Categoria" type="text"/>
                        <button className="border border-green-400 bg-green-400 text-white rounded-md px-4 py-2 m-2 transition duration-500 ease select-none hover:bg-gray-800 focus:outline-none focus:shadow-outline" type="submit">Editar</button>
                    </Form>

Cancelar

          );
        }
      });
}

`

Hey @ManchaTudo, the signature for onSubmit is like function(data, { reset }, event). What u can do is just call the callback inside your on handleSubmit. See below:
async function handleSubmitChangeCategoria(data, {reset}, event){
  try{
    const schema = Yup.object().shape({
      nome_categoria: Yup.string()
        .notOneOf([stateName, null], "O nome da categoria tem que ser diferente do antigo")
        .required("O nome é obrigatório"),
    });

    await schema.validate(data,{
      abortEarly: false,
    })

    reset();
    formRef.current.setErrors([]);

    const response = await api.put(
      '/categoria/edit.php?id=' + id,
      { nome_categoria: data.nome_categoria },
      {
        headers: {
          'Authorization': `Bearer ${localStorage.getItem("token")}`
        },
      },
    );

    setStateName(response.data.categoria[0].nome);

    alertify.success(response.data.message);

    // Run the callback here
    // you can call here, without any problem.
    callback();
  } catch(err) {
    // handle axios errors 5xx and 4xx
    if (err.response) {
      alertify.error(err.response.data.message);
    }

    if(err instanceof Yup.ValidationError){
      const errorMessages = {};

      err.inner.forEach(e => {
        errorMessages[e.path] = e.message;
      })

      formRef.current.setErrors(errorMessages);
    }
  }
}

And your Form
{/* Change the onSubmit like below */}
<Form
  ref={formRef}
  initialData={initialData}
  onSubmit={handleSubmitChangeCategoria}
>
  <Input name="nome_categoria" label="Nome Categoria" type="text"/>
  <button
    className="border border-green-400 bg-green-400 text-white rounded-md px-4 py-2 m-2 transition duration-500 ease select-none hover:bg-gray-800 focus:outline-none focus:shadow-outline"
    type="submit"
  >
      Editar
  </button>
</Form>

But where you pass the function onClose() onSubmit?
``function handleModalEdit(){
confirmAlert({
customUI: ({ onClose }) => {
return (

Editar categoria
                    <Form ref={formRef} initialData={initialData} onSubmit={handleSubmitChangeCategoria}>
                        <Input name="nome_categoria" label="Nome Categoria" type="text"/>
                        <button className="border border-green-400 bg-green-400 text-white rounded-md px-4 py-2 m-2 transition duration-500 ease select-none hover:bg-gray-800 focus:outline-none focus:shadow-outline" type="submit">Editar</button>
                    </Form>

Cancelar

          );
        }
      });
}

@ManchaTudo, just call onClose inside your handleSubmitChangeCategoria after axios succeed.

Like This?
async function handleSubmitChangeCategoria(data, {reset}, callback){
      try{
        const schema = Yup.object().shape({
          nome_categoria: Yup.string().notOneOf([stateName, null], "O nome da categoria tem que ser diferente do antigo").required("O nome é obrigatório"),
        })

        await schema.validate(data,{
          abortEarly: false,
        })

        reset();
        formRef.current.setErrors([]);
        await api.put('/categoria/edit.php?id=' + id,{nome_categoria: data.nome_categoria},{
          headers: {
            'Authorization': `Bearer ${localStorage.getItem("token")}`
          },
        })
        .then(response => {
          setStateName(response.data.categoria[0].nome);
          alertify.success(response.data.message);
          callback();
        }).catch(error => {
          alertify.error(error.response.data.message);
        })
      }
      catch(err){
        if(err instanceof Yup.ValidationError){
          const errorMessages = {};

          err.inner.forEach(e => {
            errorMessages[e.path] = e.message;
          })

          formRef.current.setErrors(errorMessages);
        }
      }

    }

    function handleModalEdit(){
        confirmAlert({
            customUI: ({ onClose }) => {
              return (

Editar categoria

                        <Form ref={formRef} initialData={initialData} onSubmit={handleSubmitChangeCategoria(onClose())}>
                            <Input name="nome_categoria" label="Nome Categoria" type="text"/>
                            <button className="border border-green-400 bg-green-400 text-white rounded-md px-4 py-2 m-2 transition duration-500 ease select-none hover:bg-gray-800 focus:outline-none focus:shadow-outline" type="submit">Editar</button>
                        </Form>

Cancelar

              );
            }
          });
    }

Tente assim
async function handleSubmitChangeCategoria(data, {reset}, event){
  try{
    const schema = Yup.object().shape({
      nome_categoria: Yup.string()
        .notOneOf([stateName, null], "O nome da categoria tem que ser diferente do antigo")
        .required("O nome é obrigatório"),
    });

    await schema.validate(data,{
      abortEarly: false,
    })

    reset();
    formRef.current.setErrors([]);

    const response = await api.put(
      '/categoria/edit.php?id=' + id,
      { nome_categoria: data.nome_categoria },
      {
        headers: {
          'Authorization': `Bearer ${localStorage.getItem("token")}`
        },
      },
    );

    setStateName(response.data.categoria[0].nome);

    alertify.success(response.data.message);

    // Run the callback here
    // you can call here, without any problem.
    onClose();
  } catch(err) {
    // handle axios errors 5xx and 4xx
    if (err.response) {
      alertify.error(err.response.data.message);
    }

    if(err instanceof Yup.ValidationError){
      const errorMessages = {};

      err.inner.forEach(e => {
        errorMessages[e.path] = e.message;
      })

      formRef.current.setErrors(errorMessages);
    }
  }
}

Dont work because in that function onClose dont exist.

@jorgeferreira008,
if you want more help, create a snippet on codesandbox or share the code repo for a deep understand.

authors: ManchaTudo carlosallexandre

repo: Rocketseat/unform


text:
Incorrect type for password

First of - thanks a lot for your effort putting this together. It makes editing deploy.yml much more pleasant.
However when trying it out I had something along this lines defined:
registry:
  username: AWS
  password: <%= %x(aws ecr get-login-password) %>

and the error Incorrect type. Expected "array".. I think we'd need to change this line from array to string?
Similarly there's a string type requirement for port (under accessories) where number works just fine. And for host we need to use oneOf to allow either host object or list of IPs defined as an array named hosts.

Thank you!
Could you create a PR for this repo?

source: gharchive/issue

authors: imWildCat lenart

repo: RockieStar-Inc/kamal-json-schema

license: MIT

license_type: permissive

license_source: github-api


text:
Gitter.im provider

Having a Gitter.im provider would be pretty awesome

I will work on it, unless someone already started something.

:+1: Thanks @Lorac

@jerriep Can close this issue.

authors: Lorac jerriep tparnell8

repo: RockstarLabs/OwinOAuthProviders

license: mit

license_source: bigquery


text:
New fork/release - works on macOS Catalina

If anybody's interested I forked, updated and compiled it for macOS Catalina (and hopefully above).
https://github.com/anastasiuspernat/SoundflowerBed
Works pretty well on my end.

Oh just want to say thanks! I couldn't find Soundflower app after installed it and you save my live

If anybody's interested I forked, updated and compiled it for macOS Catalina (and hopefully above).
https://github.com/anastasiuspernat/SoundflowerBed
Works pretty well on my end.

Thank you! I am glad you took the time to let us know.

authors: amelluk anastasiuspernat ribilynn

repo: RogueAmoeba/Soundflower-Original


text:
Discord.Net 1.0.2 + Mono 4.6.2.7+dfsg-1

Hi, I got an exception when my command line discord bot start,
The used for the project is C#
Command used : xbuild TestBot.sln
When built everything is fine and when I execute : mono TestBot.exe
Here's the output :
13:17:14 Discord     Discord.Net v1.0.2 (API v6)
13:17:19 Gateway     Connecting
13:17:22 Gateway     System.Exception: WebSocket connection was closed ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Net.Sockets.NetworkStream'.
--- End of inner exception stack trace ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <8f2c484307284b51944a1a13a14c0266>:0
at Discord.ConnectionManager+d__33.MoveNext () [0x00070] in :0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult () [0x00000] in <8f2c484307284b51944a1a13a14c0266>:0
at Discord.WebSocket.DiscordSocketClient+d__93.MoveNext () [0x0040e] in :0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <8f2c484307284b51944a1a13a14c0266>:0
at Discord.WebSocket.DiscordSocketClient+d__93.MoveNext () [0x00592] in :0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult () [0x00000] in <8f2c484307284b51944a1a13a14c0266>:0
at Discord.ConnectionManager+d__30.MoveNext () [0x0019e] in :0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <8f2c484307284b51944a1a13a14c0266>:0
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult () [0x00000] in <8f2c484307284b51944a1a13a14c0266>:0
at Discord.ConnectionManager+<>c__DisplayClass28_0+<b__0>d.MoveNext () [0x000ce] in :0
13:17:22 Gateway     Disconnecting
13:17:22 Gateway     Disconnected
I already tried to import certs etc it didn't worked

Discord.Net doesn't exactly support mono, as was made clear in #909. I'd suggest looking into that person's project for proper Mono support.

Mono is not a supported runtime. Switch to .NET Core.


text:
When I change a different HDR, the engine cannot render

When I change a different HDR, the engine cannot render.

Do you mean different ToneMapping? what happens?

When I change a path,it will show this

don't render

Here is a quick workaround: (I'm adding and fixing stuff and I will update the source code when I finish :))
in the renderer.cpp, change the SetEnv_SkyCapture function:
void Renderer::SetEnv_SkyCapture(std::string path)
{
	if (SkyPath == path)
		return;

	ibl.Init(); // ADD THIS
	SkyPath = path;
	ibl.DeleteCapture(m_SkyCapture);
	glDeleteTextures(1, &envCubemap);
        ibl.LoadHDR(SkyPath.c_str(), envCubemap );
	ibl.CreateCapture(envCubemap, m_SkyCapture);
}
// ----------

And we don't want to load the shaders again so in IBL::Init function you add:
void IBL::Init()
{
	// pbr: Load baking shaders (independent from MaterialLibrary)
	// ---------------------------------------------
	if (!shadersLoaded) // this
	{
		equirectangularToCubemapShader.loadShader("core/shaders/iblBaking/E2Cubemap.rsh");
		irradianceShader.loadShader("core/shaders/iblBaking/irradiance.rsh");
		prefilterShader.loadShader("core/shaders/iblBaking/prefilter.rsh");
		shadersLoaded = true; // and this
	}
        .......
}

Also define shadersLoaded  in the IBL class as a boolean:
class IBL
{
public:
	IBL();
	~IBL();
         .........
private:
	bool shadersLoaded = false; // THIS
};

It's ready to run

authors: Ahaenhhhh RogyDev

repo: RogyDev/Rogy-Engine-


text:
Keep git tag/release and .zip file name predictable

Hi,
I would advise keeping release names and .zip file names predictable/in sync.
I wrote this ansible role to deploy/configure/upgrade Shaarli and have been using it for years. I recently added stack to the automatic deployment procedure, since I find it so nice. To keep it up-to-date, I've subscribed to releases in this repository via RSS feeds, and just bump the  shaarli_stack_version variable whenever there is a new release.
This used to work well for v0.2 and v0.3 since the release number and .zip file name can easily be constructed from the variable:

https://github.com/RolandTi/shaarli-stack/releases/download/0.2/stack-0.2.tar.gz
https://github.com/RolandTi/shaarli-stack/releases/download/0.3/stack-0.3.tar.gz

This matches the URL template defined here: url: "https://github.com/RolandTi/shaarli-stack/releases/download/{{ shaarli_stack_version }}/stack.{{ shaarli_stack_version }}.tar.gz"
However:

on v0.4 the version number in the git tag, and the one in the zip start to differ: https://github.com/RolandTi/shaarli-stack/releases/download/0.4/stack.0.4.1.tar.gz
v0.5 uses the previous/predictable file naming again https://github.com/RolandTi/shaarli-stack/releases/download/0.5/stack.0.5.tar.gz, no problems here.
on v0.6 the version number is gone from the file name: https://github.com/RolandTi/shaarli-stack/releases/download/0.6/stack.tar.gz

So I suggest sticking to a predictable file name that matches the git tag name like Shaarli does:

https://github.com/shaarli/Shaarli/releases/download/v0.13.0/shaarli-v0.13.0-full.tar.gz
https://github.com/shaarli/Shaarli/releases/download/v0.12.2/shaarli-v0.12.2-full.tar.gz
https://github.com/shaarli/Shaarli/releases/download/v0.12.1/shaarli-v0.12.1-full.tar.gz
https://github.com/shaarli/Shaarli/releases/download/v0.12.0/shaarli-v0.12.0-full.tar.gz
...

I agree it may be hard to remember to stick to a particular filename format when building the release zip - in which case I'd gladly contribute a simple Makefile (or build system of your choice) which you would just have to run every time there is a new release. How do you build the release archive?
Thanks again for your work on this template.

Hello @nodiscc !
If I understand the next release archive version should be named stack-0.7.tar.gz, stack-0.8.tar.gz… so it's keep working with your ansible role.
I don't use any build system as I still code on the long dead Espresso app, and I won't be able to fill the technical gap with all the npm/webpack… things.
But I will be careful when I will package the next version, thanks ! :-)

Good to me, thanks !

authors: RolandTi nodiscc

repo: RolandTi/shaarli-stack


text:
District Name as Prefix

Would be lovely if it it could also take the name of the district as a prefix.

I'll consider adding this feature in the future, but it won't be included in the next release yet.

authors: BenjaminHoegh Roll-W


text:
[Ars Magica 5th] Sheet broken after release on Roll20

Description
After release on the Roll20 website, the Ars Magica 5th sheet appears broken: fonts are not loaded in rolltemplate, causing the browser to use some kind of default.
In some setup, including my own, this is problematic as the fallback font is not legible:
Expected rolltemplate

Actual rolltemplate

There is no problem when setting a game to Custom sheet and pasting the HTML, CSS and translation JSON from this repository master branch, so I believe the problem comes from the release process.
Step to reproduce
Broken game using the released sheet:

Start a new Roll20 game, or use an existing one
Set the sheet to "Ars Magica 5th"
In the character sheet, click to the "Abilities" tab. Create a new, dummy ability on the right repeating section, and click the dice symbol to roll it
See that the chat result uses some default font, that varies from OS+browser combination to another (the leverage part is the easiest)

Functional game using a custom sheet with the same sources:

Start a new Roll20 game or use an existing one
Set the sheet to "Custom"
In the game settings, copy-paste the HTML, CSS and translation JSON found in the Ars_Magica_5th/ folder in this repo
Repeat the step 3 and 4 from the first listing, see the rolltemplate works properly

Additional context
I'm a maintainer of the Ars Magica 5th, and I couldn't reproduce the bug in either a custom sheet game or the Sheet Sandbox. Being unable to reproduce, I have no idea how to fix it.

Hi @Riernar
If I was going to make a guess, I would presume that the CSS validator on the VTT is rejecting, for some reason, your CSS font imports. For obscure, arcane, and frankly silly reasons, the Custom Sheet option in campaigns, and the sheet sandbox uses a slightly more permissive CSS validator in contrast with what is piped from github, through the microservice, and delivered to the VTT.
Things I would suggest:

Altering your font imports to use a single import.
Ensuring no fonts are being sourced from anywhere other than google fonts.
Ensuring that you're using the old google fonts reference methods.
Removing any comments or extraneous code from your css file.
Running your compiled CSS through a validator to ensure that nothing might be causing the error.

I will also note that often, but not always, CSS validation errors are thrown in the VTT, so I'd check your dev console when the sheet is loaded.

Hi Nic,
Thanks for the tips. I already checked the  dev console, and found no error. Though I just found the <style> element that contains rolltemplate's CSS and indeed only the first @import is there. I'll investigate further to see what is causing the other two to be removed.

Sadly #11954 didn't fix it. If someone would be so kind as to re-open this issue (for some reasons I can't), that would be great for tracking.
As far as I can tell,

[x] Ensuring no fonts are being sourced from anywhere other than google fonts.
[x] Ensuring that you're using the old google fonts reference methods.
Altering your font imports to use a single import.
Not possible with the kScaffold framework, but Scott C, the creator, never had issues due to that.
[ ] Removing any comments or extraneous code from your css file.
[ ] Running your compiled CSS through a validator to ensure that nothing might be causing the error.

I'm starting to think the Material+Symbol+Outline family contains a forbidden string, and cause its own line and the next line to be sanitized out.

Isn't the issue here that there can only be one font import statement? https://wiki.roll20.net/Character_Sheet_Development/CSS#Google_Fonts

That is indeed the case, and the K-Scaffold framework I used injected it's own import before mine, hence the problem.
I fixed that by re-ordering stuff and forgot to close this issue, sorry about the noise

authors: Anduh Riernar nmbradley


text:
Sentry v8 support

Just set this package up in my project and noticed a compilation error when I tried adding the v8 version of nodeProfilingIntegration() to my integrations array. Looks like bumping the @sentry/node version from v7 to v8 should resolve the issue with the incompatible types.

Hey @jonahsnider! 👋🏻
Yes it is planned, but first I need to ensure Sentry v8 works well.
Last time I checked they had multiple error and weird behavior when using Node.js loaders. So I forced the version to v7 at the moment.

hey @RomainLanz 👋 Sentry v8 appears to be pretty stable now - bumping the question from @jonahsnider 🙂

@RomainLanz awesome, sounds good! Happy to try the beta out and report back once available!

Hey! May you try with @rlanz/sentry@next?

@RomainLanz I can confirm that @sentry/profiling-node@8 works when using @rlanz/sentry@next 🚀
Sentry profiling

Project dependencies:

Other functionalities (like captureMessage, for example) seem to work a-okay as well!

Appreciate the update! ❤

Great! Are you able to see database queries too?

@RomainLanz yup, I can see all the queries, waterfalls, etc 👍

authors: RomainLanz jonahsnider zigcccc

repo: RomainLanz/sentry


text:
Working with Content

I'm submitting a ...

[x] feature request

Working with Content.

Resolved in https://github.com/RommelTJ/rn-hooks-starter/pull/11

repo: RommelTJ/rn-hooks-starter


text:
Add Conner Bondurant to the Contributors list

thank goodness things like this exist, I gotta say.

@cbondurant, I'm quite elated about your pull request. I wanna evolve this project to addresses various problems faced by first-time contributors. I'd love to learn about your journey in open source community, the problems, pain points you had etc.
Could you explain how you felt when you went through the tutorial, made a pull request and learned that I merged it?
We’ve recently added Facebook share and tweet feature to our web app. Could you please go to https://roshanjossey.github.io/first-contributions/#social-share and share your first contribution to open source?
Also, check out projects with easy issues while you’re there.

source: gharchive/pull-request

authors: Roshanjossey cbondurant

repo: Roshanjossey/first-contributions


text:
Repository Upgrade according to guide-open-source v22 version

https://github.com/MyPrivateRepositories/guide-open-source

https://github.com/Ruben-Arushanyan/private-event-emitter/releases/tag/v0.0.1

repo: Ruben-Arushanyan/private-event-emitter


text:
🛑 Website (rubenfixit.com) is down

In ece6d75, Website (rubenfixit.com) (https://rubenfixit.com) was down:

HTTP code: 503
Response time: 252 ms

Resolved: Website (rubenfixit.com) is back up in 0df5210 after 10 minutes.

repo: RubenFixit/upptime


text:
agentcore.version to agent.version

to align with 3.0.9 agent core changes

LGTM

For issue #199

authors: DanCunnington tobespc

repo: RuntimeTools/appmetrics


text:
ComboBox相关SelectedValuePath

在我原来的combobox中有DisplayMemberPath="Text" SelectedValuePath="Key"
1我应该如何使用pucombobox 他无法设置SelectedValuePath="Key"
2我的binding使用ItemsSource 与SelectedItem有自己的list

我的结构  public class ComplexInfoModel : ObservableObject
{
private String key;
    /// <summary>
    /// Key值
    /// </summary>
    public String Key
    {
        get { return key; }
        set { key = value; RaisePropertyChanged(() => Key); }
    }

    private String text;

    /// <summary>
    /// Text值
    /// </summary>
    public String Text
    {
        get { return text; }
        set { text = value; RaisePropertyChanged(() => Text); }
    }

    private String boxText;

    /// <summary>
    /// Text值
    /// </summary>
    public String BoxText
    {
        get { return boxText; }
        set { boxText = value; RaisePropertyChanged(() => BoxText); }
    }
}

BindingItems属性只能设置为ObservableCollection类型，不能像ItemsSource属性那样设置为其他类型的集合。
你需要将集合转化为ObservableCollection，Content设置为你的Text属性，Value设置为你的Key属性，并将PUComboBox的SelectedValuePath属性设置为Value即可。

如上图所示。
这时SelectedValue的值就是Value属性了。
今天（11.28日）修复了BindingItems属性的一些问题（与本问题无关），在使用之前建议先更新一下。

好的谢谢 但是我有三个以上属性时就需要修改 PUComboBox的cs文件是这样吗~

除了改cs文件之外，也可以选择把两个集合都保留下来——当用户点击确定按钮的时候，根据当前的SelectedValue去你原先的集合中找对应的条目，来获取内容。目前只有这两个方法，我说的这个方法更适合于扩展，当然直接修改cs也不是不行

啊对了，另一个可行的办法就是把Value属性设置为你的单个ComplexInfoModel对象，这样选择的实际SelectedValue就是你的对象了。

好的吧 我明天会进行尝试~谢谢~

authors: Nephalem-ZH Ruris

repo: Ruris/PanuonUI


text:
Add workaround for devices without a name

Fixes #279

Merged as 6e2c022b5da913aedd459b78d3e9d06302c57594 , thanks!

repo: RustAudio/rodio


text:
[Contributhon2019] Implement sys._git

sys._git is not implemented yet.
This feature can be easily implemented by using
`option_env!("RUSTPYTHON_GIT_HASH")``
>>> sys._git
('CPython', 'v3.7.2', '9a3ffc0492')

p.s  @coolreader18 @youknowone
This issue needs a contributhon 2019 label.

May I take this issue?

@ChJR Please go a head

You could also use the version module in rustpython_vm.

@ChJR
How is it going? I suppose this issue is little bit dragged, So may I take this issue?

The PR of this issue will be added today. I am working on some minor issues of this.

repo: RustPython/RustPython


text:
Content-Length should be a form parameter for IE mode requests

See https://github.com/adlnet/xAPI-Spec/pull/566

I don't think there is any change needed here for this request. If the client is using a 'Content-Length' header then it was explicitly set since the library itself doesn't ever set it automatically. In that case the library will automatically shove all headers it isn't doing itself into the form encoded body, and then the browser may add the actual request content length automatically, which is still within spec.

My understanding is that we should always be sending a content length header. This is something that is not a MUST, but is encouraged in 1.0.3 and very loosely implied in earlier versions (you explicitly MAY omit Content-Length in HEAD requests).
It doesn't generally matter that TinCanJS doesn't add a content-length header for normal requests because the browser adds it (I think all the main ones do?). It's more important for alt syntax requests because those never add the content length form parameter.
A complete solution would also ensure we're not relying on the browser adding the header too.

authors: brianjmiller garemoko

repo: RusticiSoftware/TinCanJS


text:
Stop Client.connected() emitting unnecessarily

I found that I was seeing values emitted on the Client.connected()
observable when a peer was connecting but not yet connected.
A connecting peer does not change the connectedPeers property of
the MCSession, but it does cause a call to the
session(_:peer:didChange:) method on the delegate. This means that the
delegate proxy will set the value of _connected even when there is no
change to the connectedPeers value it passes.
This change simply checks if the state of the peer is .connecting.
If it is not (ie. it is connected or disconnected) then we update
the value of _connected (and thus connected()).

Awesome, thanks @mootpointer!

authors: mootpointer nathankot

repo: RxSwiftCommunity/RxMultipeer


text:
Clean up Checkbox styles so firefox and chrome match

The checkboxes used in the recipe page and in the grocery list use different styles for chrome and firefox. We should make sure that they use the same style (idea the one that chrone is using).

Fixed with https://github.com/RyanNoelk/OpenEats/pull/288

repo: RyanNoelk/OpenEats


text:
Doc updates

Updated links to django database documentation.

Hey,
Thanks for the PR! But most (basically all) of the docs are super out of date. I've been working on moving most of the backend to Django DRF and all of the front end to react. The only think that's still in about the same condition are the models.
I'll go ahead and merge it since it will be one last thing I'll have to do later.
Thanks
-Ryan

authors: RyanNoelk rustymyers


text:
experimental detail

hello, I would like to confirm some experimental detail:
Input image is RGB image？
and PSNR and SSIM are calculated on y channel?
Thank you!

Hi yiyun
Thanks for your interest~
In our paper and programming, only Y channel is enhanced and accessed. That is, we measure and report the Y-PSNR.
The adopted RAISE dataset is in TIFF format. We first load TIFF images as RGB, transfer them into YCbCr 420P, and then compress them using HM. See here.
For JPEG compression, we directly compress these TIFF images, and then transfer them into YCbCr 420P.
Therefore, the input image for enhancement is actually in the form of YCbCr 420P frame.

authors: RyanXingQL yiyunchen

repo: RyanXingQL/RBQE


text:
Mux or no mux?

Hi.
Can you explain what is the difference between verions with MUX and without? I'm new to this. Thanks.

Hi!
MUX version is used in case you have a mux shield to expand the analogues ports of arduino

Olá, estou tentando usar a sua biblioteca para fazer uma bateria com arduíno Leonardo usando multiplexador 4067, porém mesmo com o exemplo pronto da biblioteca parece que o mux não está trabalhando corretamente.
Quando vc toca em um pad, o arduíno envia duas notas diferentes as vezes até 3.
Testei diversas vezes meu circuito com outros códigos que tenho e utilizando o mux, e todos funcionam corretamente.
Porém quando carrego o exemplo e deixo apenas os 9 pads, uns funcionam bem, outros enviam duas notas, se conseguir me ajudar ficarei grato!

authors: ardumidi assenheimer meekowai

repo: RyoKosaka/HelloDrum-arduino-Library


text:
chore: springboot-y to 0.0.1

chore: Promote springboot-y to version 0.0.1

Merged


text:
SAML Response not found, Only supported HTTP_POST Binding

Proposed Labels: [help wanted, question]
I am wondering if this is just a simple misconfiguration on my part. This is definitely my first SSO rodeo so I am just looking for some generic advice based on the data I supply below.
Specifically the exception I am hitting in onelogin's lib is here:
File "/opt/bitnami/python/lib/python3.10/site-packages/onelogin/saml2/auth.py", line 139, in process_response
raise OneLogin_Saml2_Error(
onelogin.saml2.errors.OneLogin_Saml2_Error: SAML Response not found, Only supported HTTP_POST Binding
This is decoded SAML response from our (internal) IdP:
<samlp:Response Version="2.0" ID="Redacted" IssueInstant="2023-10-13T18:32:14.503Z" InResponseTo="ONELOGIN_Redacted" Destination="https://service.com/saml"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">Redacted.UAT.SAML2.0</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
ds:SignedInfo
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="Redacted">
ds:Transforms
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
ds:DigestValueRedacted</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
ds:SignatureValueRedacted</ds:SignatureValue>
</ds:Signature>
samlp:Status
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester"/>
samlp:StatusMessageProtocolBinding: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect disallowed for transport of SSO response.</samlp:StatusMessage>
</samlp:Status>
</samlp:Response>
And here is my IdP configuration; as you can see, the IdP binding is set to HTTP-POST:
{
"strict": True,
"debug": True,
"idp": {
"entityId": "Redacted.UAT.SAML2.0",
"singleSignOnService": {
"url": "https://pf-uat.us.com/idp/SSO.saml2",
"binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
},
"x509cert": "Redacted"
},
"sp": {
"entityId": "https://service.com",
"assertionConsumerService": {
"url": "https://service.com/saml",
"binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
}
},
"security": {
"wantAttributeStatement": False
}
}

The error "SAML Response not found, Only supported HTTP_POST Binding" is raised when no SAMLResponse is sent at the POST of the request.
Maybe the IdP sent the SAMLResponse via HTTP_Redirect or maybe you directly accessed the ACS endpoint.


text:
Evaluate targeting more modern runtimes.

Instead of targeting ECMAScript 5.1 we should probably target a more modern runtime, e.g ES2017 / ES2018.
This means removing support legacy browsers such as IE11.

Note some workarounds now exist for exceptions and stack traces when TypeScript is targeting ES5.
These may be removed when we update the TypeScript compiler runtime target.

https://github.com/SAP/chevrotain/pull/1322#issue-552008653

Note some workarounds now exist for exceptions and stack traces when TypeScript is targeting ES5.
These may be removed when we update the TypeScript compiler runtime target.

https://github.com/SAP/chevrotain/pull/1322#issue-552008653

repo: SAP/chevrotain


text:
Spike captcha

We have a catpcha addon - see the Accelerator help document.
Let's implement same in Spartacus for registration and password reset (anywhere else?).

Do we need the addon?
There are configuration keys specified in the backend.
You can also turn off captcha using backend - should we follow that?
Backoffice > Base Commerce > Base Store > select your storefront
Properties tab > Captcha Widget Enabled
Do we need API updates?
Do we need threat modelling?

Captcha Pages

Login
Registration
Checkout
Product Reviews

Captcha Component
<cx-captcha
	()>

As discussed on other channels, this issue cannot be fully solved by Spartacus alone. This is because a reCaptcha must always be validated on the server-side. In this case it means that the underlying SAP Commerce OCC API needs to support reCaptcha validation first.
SAP Commerce OCC does not support that yet, but respective changes are planned. Progress can be tracked at RAY-405, but that is not publicly accessible.

authors: Xymmer Zeyber meeque

repo: SAP/cloud-commerce-spartacus-storefront


text:
Please export types

It'd be very useful if the library was set up to export types as described here https://www.typescriptlang.org/docs/handbook/declaration-files/dts-from-js.html
I'd like to use this in a typescript project, but at the moment I'm having some difficulty due to the lack of types

Hi,
I do not use typescript at all. I have checked the tsc to create the d.ts file from JSDoc, but I have not experienced to test it :( for testing.
If I will just generate the d.ts files for some API to separated branch are you able to test it from some branch?

Hi
Thanks for responding so quickly - I'm happy to send you a PR and contribute with this if that's ok with you as well - or test it if you prefer. This shouldn't change the logic of the package at all, only generate some additional descriptor files.
Let me know what you'd prefer.
Thanks
Akos

Hi Akos,
If you will create PR it will be nice. I think it is simpler then create types by me, because I have not experience with it.
Thanks
Norbert

Hi Norbert
I will do it next week, I should have a little bit of free time :-)
Thanks
Akos

apologies, I've been sick so I haven't been able to do it yet - I'm hoping to send a PR soon

I've created this PR https://github.com/SAP/odata-library/pull/91

apologies, I had the wrong email address on the previous merge, here's my correct PR https://github.com/SAP/odata-library/pull/92

Hi all,
I have released new version of odata-library 2.1.0 which contains support for typescript from Akos.
Thanks a lot to Akos

authors: norbertvolf szalayak

repo: SAP/odata-library


text:
setSelectedWorksetItem is not triggering the event worksetItemSelected

Hello All,
First of all thanks to a wonderful SHELL component in the framework :+1:
I had one requirement to change the current set work set item.
The setSelectedWorksetItem method works fine and I can see that after calling it with the desired workset id , the navigation cursor points to the worksetitem.
But my main problem is changing the selected work set item via this method is not invoking event "worksetItemSelected".
Due to this, it never comes to our logic of changing the content of the shell :(
I feel this might be a bug where even after changing the selected work set item , the relevant event is not triggered,
Can anyone please check on this . I tried to fix this problem by looking into SHELL js class but since I am new to JS, I am stuck :(

Hi,
this behavior is intentional,following the guideline that state changes triggered by the user does result in events, but state changes triggered by the application code does not. The rationale is that the application does not need to be informed when it triggers the change and hence already knows about the change.
So the recommendation is that when your own code sets the selected item (which is not the main use-case, as normally the user triggers the change), it also calls the same function that is normally triggered by the event.
Regards
Andreas

authors: adithyau akudev


text:
[Parsers] Check if common parser state interferes in migration / synchronising

When using the Hdbdd parser from the migration process, the state of the parser is saved with the parsing done on the delivery unit files inside the temporary directory, created during migration. This cached data might interfere with the parsing done on a later stage inside the workspace by the synchroniser.
Scenario:

Migrate application (with hdbdd)
Publish app (check in HANA Cloud that the tables are created)
Delete and unpublish
In HANA @ Neo change the hdbdd (e.g. have a second table)
Trigger a new migration
Publish again
Check if the new table exists in HANA Cloud

obsolete

authors: Fluctuationqt dpanayotov

repo: SAP/xsk


text:
How to run SAP Vora on Amazon Web Services

Good morning,
I have a suggestion. I followed all the steps of this tutorial a month ago and it mention in step 1 that it is a free developer edition, but in step 3 when they ask to select the instance type m4.2xlarge, this is not free,
please make a warning to users. I had the bad experience that I would be charged a few instances in AWS, so please highlight or warn people that it will generate a charge to credit card.
I expect an update of the tutorial with this warning. Thank you.

Hi Juan. Thank you for the comment. I'll let the original author to make it more clear in the next version of the tutorial for Vora 2.0. Best regards.

authors: Sygyzmundovych jpvelezv

repo: SAPDocuments/How-Tos


text:
SAP HANA XS Advanced, Creating an HTML5 Module

Tutorial URL: https://developers.sap.com/tutorials/xsa-html5-module.html
Please specify the step you are referring to
step 2 is different from what I see in my environment
in the Authorization and Trust management
where is choose New Instance is dont have option to select Plan= Space.
this is what i have.
what should i choose?

What environment is this?
You can choose application. This is the scope of the UAA service.

Thank you for your feedback. We haven't heard from you in a while, so we are closing the issue.
If you still have questions, feel free to reopen the issue.

authors: Lsubatin badichiniran thecodester

repo: SAPDocuments/Tutorials


text:
scons does not remove dangling link target before buid

Hi
According to https://scons.org/doc/3.1.2/HTML/scons-user/ch13.html, when SCons determines that an target file needs to be rebuilt and removes the existing version of the target before executing.
Unfortunately the above is not true, when the target file for some reason is a symbolic link to non-existing file. In such a case scons leaves the broken symlink as is, and then runs target build action, which then might try to create target file in the destination of the symlink (for example g++ works like this).
Is there any possibility to convince scons to remove the target's dangling symlink before starting  build?

Do you have a small test case to demonstrate this issue?

Yes, I'm attaching a simple test case with two broken symlinks, that are not removed by scons, what causes g++ to follow them.
test-case.tar.gz

In your test case the symlink isn't created by SCons..
Is that the actual situation you're working with? Or is SCons creating the symlink for you?

Hi,
What I am trying to do is using symlinks to files in cache instead of copying them. (I know hardlinks would be much better, but the cache is on separate storage, so they can't be used.) The aim is to have better performance and lower disk usage.
Anyway, I've already created my own versions of  SCons.CacheDir.CacheRetrieve & CacheRetrieveSilent actions, in which I create those symlinks. I even remove dangling symlinks from there as well.
I'm still testing this solution, but everything seems to work pretty well so far unless the --cache-disable option is used, after the link target had already been removed, for example by a cron job that clears old files from the cache. In such a case g++ happily creates new file via the symlink in the cache. That's why I am seeking for solution that would allow me to remove the broken symlinks  before g++ is run.
I've recently learnt about AddPreAction(), but I am not sure if is it possible to add such action for any target. I do not know scons so well yet to get a list of all targets. But maybe it would be simpler if scons could somehow  remove such broken links on its own? I think it must use os.path.exists() somewhere; maybe it would be easy to use to replace it with  os.path.lexists()?
Thanks,
Robert

authors: bdbaddog roblub

repo: SCons/scons


text:
Setting up the MongoDB Operator to interact with multiple DocumentDB or MongoDB instances?

Hello,
Thanks for setting up the MongoDB operator. I was wondering how would I set it up if I would need to interact with multiple DocumentDB clusters? The current solution I've setup is to have 2 kustomize projects with different nameSuffix applied on it. The kustomize projects will then have different mongodbConnectionString to authenticate to the different DocumentDB clusters. Following the usage kustomization guide, I noticed after applying it to the cluster it doesn't apply the suffix to the mongodb CRD itself. Which causes it to be shared by both projects.
How can I reference the mongodb kind to interact with a specific DocumentDB cluster, if so?
Current setup example:
Current working directory
├── documentdb1
│   ├── kustomization.yaml
│   ├── mongodb-configuration.yaml
│   └── resources
│       └── global-bundle.pem
└── documentdb2
    ├── kustomization.yaml
    ├── mongodb-configuration.yaml
    └── resources
        └── global-bundle.pem

documentdb1 kustomization.yaml
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: custom-namespace
nameSuffix: "-documentdb1"
configurations:
  - mongodb-configuration.yaml
resources:
  - https://github.com/SDA-SE/mongodb-operator//kustomize/release/no-namespace?ref=1.0.39
secretGenerator:
  - name: mongodb-operator
    literals:
      - mongodbConnectionString=mongodb://username:password@documentdb1.com:27017/?tls=true
configMapGenerator:
  - name: mongodb-operator-ca-pem
    behavior: merge
    files:
      - resources/global-bundle.pem

documentdb2 kustomization.yaml
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: custom-namespace
nameSuffix: "-documentdb2"
configurations:
  - mongodb-configuration.yaml
resources:
  - https://github.com/SDA-SE/mongodb-operator//kustomize/release/no-namespace?ref=1.0.39
secretGenerator:
  - name: mongodb-operator
    literals:
      - mongodbConnectionString=mongodb://username:password@documentdb2.com:27017/?tls=true
configMapGenerator:
  - name: mongodb-operator-ca-pem
    behavior: merge
    files:
      - resources/global-bundle.pem

The mongodb-configuration.yaml exact copy from the documentation

Hi @GamerM,
sorry for the late response. We have missed your issue.
Currently, connecting to two different MongoDB servers from one cluster is not in scope of the MongoDB Operator.
But it should be possible to deploy two instances of the MongoDB Operator connected to different clusters in separate namespaces.
To avoid that they interfere, they must be configured to watch distinct resources.
That distinction can't be based on the CRD, because it is not configurable to watch a different kind of resource.
Also, the CRD is not a namespaced resource and can be applied only once (or is updated from multiple kustomizations).
In case two Operators are deployed, only one should apply the CRD or it should be applied independently from the Operator deployments.
It has not be nested, but restricting access based on resource names by modifying the ClusterRole for each deployment to define a fixed set of database names for each namespace (the namespace will still be part of the database name).
It could also be an option to remove the ClusterRoleBinding and create a RoleBinding in each namespace that needs a MongoDB from a specific Operator instance.
I have not tried it, so you may need a deep dive into Kubernetes RBAC authorization.
Maybe this example can help you as a starting point. I have not tried it in a cluster, only checked the output of kustomize build:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: mongodb-operator-dev
nameSuffix: -dev

resources:
  # Use kustomization with namespace, patch name below
  - https://github.com/SDA-SE/mongodb-operator//kustomize/release?ref=1.0.39

secretGenerator:
  # Please use SealedSecret, ExternalSecret or similar
  - name: mongodb-operator
    literals:
      - mongodbConnectionString=mongodb://username:password@documentdb1.com:27017/?tls=true

patches:
  # Change the namespace resource to match the defined namespace
  - target:
      kind: Namespace
    patch: |
      - op: replace
        path: /metadata/name
        value: mongodb-operator-dev
  # Do not create the custom resource definition here
  - target:
      kind: CustomResourceDefinition
      name: mongodbs.persistence.sda-se.com
    patch: |
      $patch: delete
      apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      metadata:
        name: ignored
  # Restrict access to dev-db only
  # This has not been tested and there may be way more useful
  # ways to use RBAC authorization to use multiple DB servers.
  - target:
      kind: ClusterRole
      name: mongodb-operator
    patch: |
      - op: add
        path: /rules/1/resourceNames
        value:
          - dev-db

In the long term, supporting multiple database instances, effectively multiple MongoDB Operators in one cluster as you tried, would for sure be a nice feature for the MongoDB Operator.
Adding a configuration for the namespaces, a single MongoDB Operator instance watches, would be an option, that we had that in mind a while ago. I don't remember if we found some caveats that stopped us implementing it or if we just did not have enough time.
Another option could be to introduce a label selector configuration like other Kubernetes resources have.
Can you explain your case a little bit more detailed? Especially in which way you need databases on different database servers and which restrictions apply.
Unfortunately, new features for this project have a very low priority on our side at the moment, because „it works for us“. But we are open for contributions. If you are interested, I'm happy to assist and discuss options.

authors: GamerM JoergSiebahn

repo: SDA-SE/mongodb-operator


text:
Merge new Q-Learning algorithm

Add the assumptions for Q-Learning based on my proposal from a few weeks ago.
At the moment, this involves q-routing and core assignment.

Going to merge and create tests on another branch.


text:
Create dataset loader for PALITO Corpus

Dataloader name: palito/palito.py
DataCatalogue: http://seacrowd.github.io/seacrowd-catalogue/card.html?palito

Dataset
palito

Description
The PALITO Corpus is a compilation of multilingual written texts in four Philippine languages: Tagalog, Cebuano, Ilocano, and Hiligaynon. The categories of the corpus are mostly between literary or creative writing texts (such as novels and stories) and religious texts (such as the Bible). The overall corpus contains about 150,000 words from the literary texts and 100,000 words from the religious texts, with a total of 250,000. Previous works have used the corpus for language modeling and language identification.

Subsets
-

Languages
tgl, ceb, ilo, hil, pag, pam, war, bcl

Tasks
Language Modeling, Language Identification

License
GNU Lesser General Public License family (lgpl)

Homepage
https://github.com/imperialite/Philippine-Languages-Online-Corpora/tree/master/PALITO Corpus

HF URL
-

Paper URL
https://aclanthology.org/Y09-2024/

#self-assign

Hi @ilhamfp, may I know the current status of this dataloader creation? Feel free to discuss here if you have any difficulties. Thanks!

Currently drafting a PR for it :D

authors: SamuelCahyawijaya ilhamfp sabilmakbar

repo: SEACrowd/seacrowd-datahub


text:
Move .css import

fixes #554

Codecov Report

Merging #589 (e3bae65) into develop (8be362f) will not change coverage.
The diff coverage is n/a.

@@              Coverage Diff              @@
##             develop        #589   +/-   ##
=============================================
  Coverage   98.29222%   98.29222%
=============================================
  Files             86          86
  Lines           2108        2108
=============================================
  Hits            2072        2072
  Misses            36          36


text:
Usage of Dataset Series in INSPIRE community

As part of the GeoDCAT-AP alignment with DCAT 3 and DCAT-AP 3, Dataset Series is being investigated.
In the open data (DCAT-AP) community, Dataset Series is being used just as a grouping element for Datasets, which hold majority of the relevant metadata, and therefore only few metadata options for Dataset Series are available in DCAT-AP.
However, in the Technical Guidance on Implementation of INSPIRE Metadata, a Dataset Series can have the same metadata description as a dataset.
In order to keep the GeoDCAT-AP specification concise and to avoid unnecessary mappings, we are investigating, how Dataset Series is actually being used in the INSPIRE community. Whether it is too being used just as a group of datasets, or whether the full range of available metadata is being used meaningfully.
We therefore ask the INSPIRE community to contribute their experience with usage of Dataset Series metadata in this issue. Please state whether you use Dataset Series just as a group of datasets, or, if not, which metadata elements are being used and with what meaning to the Series and to the contained datasets.

Actually, in Lower Saxony (North Western Germany) we don't differentiate between dataset and series (hierarchyLevel in ISO). Originally, series was intended to describe time series of data, but here too there were always different opinions. Today in Lower Saxony we have 80 records series as opposed to 26712 records dataset (0.3%). In Germany, the ratio is 3396 to 226250 (1.5%) by the end of december last year. Metadata records with the hierarchyLevel series contain the same fields as metadata with the hierarchyLevel dataset. The difference is just in the hierarchyLevel.
If it comes to linking several metadata records (dataset, series) between each other, wie have an element parentIdentifier in child metadata. The parent metadata record shows the parentIdentifier as fileIdentifier. The parentIdentifier is not an idea of INSPIRE, but is in ISO and it can help to organize metadata.
People use the parentIdentifier to show that it can refer to the entirety of their data. This is done for services, but also for dataset/series. On the one hand, the parentIdentifier has a grouping function for the data-holding entity, but on the other hand, the function can also be used to sort certain frequently existing data into groups.
From my point of view, the parentIdentifier is much more important than the division into dataset/series.
But: In Lower Saxony we do not have any sensor data described so far. Maybe series is important for sensor data and up to now we are only using it in a wrong way. Who may know?!

We serve a large number of INSPIRE-compliant dataset series, primarily for regional governments reporting data that falls within the INSPIRE Planned Land Use  theme. According to the INSPIRE registry, the definition of a dataset series is "a collection of spatial data sets sharing the same product specification."
For our users, dataset series support efficient data management, enabling municipalities to collect and report their spatial planning data in a consolidated way.
In addition to @GDIAnja's important points on the hierarchyLevel and parentIdentifier, we also support TG Requirement 1.9: metadata/2.0/req/datasets-and-series/one-data-quality-element in our dataset series metadata, where we include a gmd:scope/gmd:DQ_Scope/gmd:level/gmd:MD_ScopeCode element referring to the value "series" of the ISO 19139 code list MD_ScopeCode.
If you require examples of INSPIRE-compliant dataset series metadata and the metadata of contained child datasets, please let me know. I can provide examples upon request.

@GDIAnja @Kate-Lyndegaard thank you for your feedback.
From @GDIAnja I take that in Lower Saxony, some recordes are marked as datasets, some are marked as dataset series, but other than that, they are treated equally. I will therefore refer to them as datasets/series. There are no requirements such as "a dataset series must be linked to datasets in that series", etc.
Independently of that, you have some datasets/series, but also services linked to others using parentIdentifier, forming a hierarchy of datasets/series/services independent of the exact type of each member of that hierarchy. You use this as the grouping element.
@Kate-Lyndegaard in your case, is there a requirement about a dataset series needing to be linked to datasets in that series? Please, if you have relevant examples, share them with us, e.g. as attachments to the issue comments here.

Here you can find published examples, where the data provider has chosen to use "Series" instead of "Dataset".
That is examples of:
gmd:hierarchyLevel
<gmd:MD_ScopeCode codeList="http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ScopeCode" codeListValue="series"/>
</gmd:hierarchyLevel>
They share the same information as a Dataset metadata.
Not sure if it matters, but we have the same apporach, where we have a description of a data management system (parent) and from that links to dataset metadata (as children) describing map layers of that data source.
To pass the INSPIRE validation the gmd:identifier cannot be identical, for example
For parent:
gmd:identifier
gmd:MD_Identifier
gmd:code
<gmx:Anchor xlink:href="http://paikkatiedot.fi/so/1000040/velho">http://paikkatiedot.fi/so/1000040/velho</gmx:Anchor>
</gmd:code>
</gmd:MD_Identifier>
</gmd:identifier>
For child:
gmd:identifier
gmd:MD_Identifier
gmd:code
<gmx:Anchor xlink:href="http://paikkatiedot.fi/so/1000040/aidat">http://paikkatiedot.fi/so/1000040/aidat</gmx:Anchor>
</gmd:code>
</gmd:MD_Identifier>
</gmd:identifier>
</gmd:CI_Citation>
Here's an example

However, in our examples both the parent and the child have been implemented as Dataset metadata.

authors: GDIAnja Kate-Lyndegaard hallinpihlatie jakubklimek

repo: SEMICeu/GeoDCAT-AP


text:
Figure out how to implement navigation of Observation objects

Mark has added a frame.navigation class to describe pointing corrections.  In the current implmentation, the observation object is wrapped in a navigation object by specifying a keyword to the from_file() method (which would need to be added to all hosts).  An alternative would be to add a navigate() method to the observation class that could be applied to an existing observation object.   Using that apporach, the hosts would not need to be modified.

I definitely support having the logic somewhere other than in the individual hosts.

authors: jnspitale rfrenchseti

repo: SETI/pds-oops


text:
Add Tab to Profiles

Critical Changes
Make OCC Help and Training visible for Admin and OCC Profiles.
Changes
Issues Closed
#131

@mkolodner give this branch a try.  I ran the customer_org flow and it worked.

@Nickers3 - PR approved. I'll leave it for you to merge and push into the other outstanding feature branches.

repo: SFDO-Community/OmbudsmanCloudCare


text:
Add installation info section to release notes

Currently we generate release notes and then manually add the installation info (push schedule, installation URL, and template ID). We should have options in the release notes generator to automatically generate this section.

This was added

authors: cpolcyn davisagli

repo: SFDO-Tooling/CumulusCI


text:
Use in-class member initializers

Description
Continuing the work from #2156 and #2275.

SFMLBuildMaster: Build this please.

SFMLBuildMaster: Build this please.

repo: SFML/SFML

license: Zlib


text:
Add EnumArray to implement enum-indexed arrays

In a few places, we have arrays indexed by enumerated types. When those enums are scoped enumerations, it means indexing those arrays becomes verbose with the required static_cast.
I suggest EnumArray template type which wraps an std::array and takes enumeration values as array index, doing the static_cast internally.
This allows to have less verbose code, more type safety and even add bounds checking for debug builds.
// Before:
std::array<T, EnumCount> array{};
T x = array[static_cast<std::size_t>(Enum::Value)]; // verbose
T y = array[42]; // danger!

// After:
EnumArray<Enum, T, EnumCount> array{};
T x = array[Enum::Value]; // pure bliss
T y = array[42]; // compilation error for scoped enumeration
                 // assertion failure for unscoped enumeration with too few values

In this PR, I use the EnumArray type to replace C-style arrays indexed by Joystick::Axis, Mouse::Button and Sensor::Type.
It could eventually also be used for arrays indexed by Keyboard::Key and Keyboard::Scan.
Note this change is only about internal SFML implementation, not the public API.
This is a follow-up of #2822.

SFMLBuildMaster: Build this please.


text:
Página de inicio	Ajustar los slides del banner Listas de referencia, contenidos, logo y mockups en el correo.

Página de inicio	Ajustar los slides del banner Listas de referencia, contenidos, logo y mockups en el correo.

Aparentemente se cumple con los logos, y funcionamiento. Respecto al contenido @javiesgm por favor contrastar con los muckups si se escapa algo.


text:
Add SIMBAD link

We should have a link to the SIMBAD entry for the source.  Not sure which table or to make a new table.

Thoughts on this @Will-Cooper, @dr-rodriguez, @arjunsavel ?  I think either a dedicated table or a column in the Sources table. What do y'all think?

It will be the most useful to have the link to Simbad displayed on the website somehow so we should do whatever makes that the easiest to implement.

How about a table of external links so like: ExternalLinks(sourcename, simbadurl, ultracoolsheeturl), then wherever else comes up in future?

We want to have a link, and not an identifier? Because another option could be to treat this like a DOI.

I thought we were aiming for the source name to be SIMBAD-resolvable already? If so, there wouldn't be a need to store a URL in the database.
In a UI you could just have a link to https://simbad.u-strasbg.fr/simbad/sim-basic?Ident=source_id&submit=SIMBAD+search and replace source_id with the name and that should be good enough.

Oh, that's pretty smart!!

authors: Will-Cooper arjunsavel dr-rodriguez kelle

repo: SIMPLE-AstroDB/SIMPLE-db


text:
🛑 DNS1.electro is down

In 1cd7e29, DNS1.electro (ns1.elteam.ir) was down:

HTTP code: 0
Response time: 0 ms

Resolved: DNS1.electro is back up in c995ab9 after 48 minutes.

repo: SIRMaxis/uptime-robot


text:
🛑 Website is down

In f0cd235, Website (ELTeam.ir) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Website is back up in ee2fa67 after 8 minutes.


text:
🛑 DNS1.electro is down

In b1d5689, DNS1.electro (ns1.elteam.ir) was down:

HTTP code: 0
Response time: 0 ms

Resolved: DNS1.electro is back up in dd0f2b9 after 49 minutes.


text:
🛑 Website is down

In bfa1b47, Website (ELTeam.ir) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Website is back up in a409709 after 38 minutes.


text:
how to create new scene

Thanks for your great contribution to the field of drone simulation !!!
I have read the official documentation of habitat-sim: https://aihabitat.org/docs/habitat-sim/attributesJSON.html and found that the way to create a new scene is to manually modify the JSON file. Is this the only way to create a scene? And how to simply visualize a new scene?

For me, I am used to write a simple script to generate scenes. It is too slow to manually modify JSON one by one.
Is this the only way to create a scene? Yes.
And how to simply visualize a new scene? Use habitat-sim built-in file viewer.py.

Thank you for your reply!

authors: Fanxing-LI WYJBIT

repo: SJTU-ViSYS-team/VisFly


text:
Enhancement: Paste from Clipboard

It would be helpful if DasherG could at least paste-in keyboard input from the system clipboard.
This will need to work on both Windows and Linux...

Fixed via commit https://github.com/SMerrony/DasherG/commit/b896f37c15b4d8ccbd2dee5a04ac890b5383e206

repo: SMerrony/DasherG


text:
soci::RowSet support for social::Blob

Hello everyone.
First, thanks for this very useful library. We are really looking to use this library on our company due the support to several backends.
However, I see some room for improvement where I hope I can help.
On our case, we have heavily use the soci::blob. Right now, I am in a situation where I have to use it with soci::rowset. However, when I do something like m_rowset.get<blob>("m_blob"), soci returns the error:
/usr/local/include/soci/row.h:70:11: error: no matching function for call to ‘soci::blob::blob()’
         T ret;
           ^~~

I do understand the nature of the problem and why soci::blob needs to be initialised with soci::session. I also can see that similar issues were raised in the past, with the same nature.
Since I can't see another way to retrieve soci::blob objects in a bulk way, I had to dig into it.
I believe that we have 3 main points to check when we are talking about retrieving information with blob:

soci::rowset
soci::into
ORM

For the first case, the solution seems to rely direct on the core, since soci::rowset has a pointer to soci:statement; and soci::statement has a public pointer to soci::session.
If we can rearrange soci::rowset and soci::row so the soci::session pointer can reach the final class,  we might solve the issue for the first case. (Ps: we also should be careful for the cases of soci::rowset<soci::blob>.
I would like to know what do you think about this solution. It seems to me that we are supposed to have a method to retrieve blob data in a bulk manner, since it is available to all other types and it seems to be a recurrent issue report here. If you agree with this implementation, I can work on that this week and submit a PR. Otherwise, I am open to other solutions.
Very likely I will dig into the case 2. in the near future.
Kind regards

Hello guys.
@vadz answered me on the PR:

Thanks for working on this!
I don't use rowset API myself, so I'm not too familiar with it and could be missing something here, but I'm a bit surprised by the need to modify the code not clearly related to rowsets to implement support for blobs there when they do work just fine with just use() and into() already (which I do use in my own code). It would be best if this could be avoided, i.e. if the backend files could remain unmodified.
Also, thank you for adding a test, but ideally the test should work for all backends, not just SQLite, and actually test that retrieving the blobs works, too.
Thanks again!

I will answer it here since the conversation seems to go beyond my initial expectations. I will explain what I mean.
First things first, thanks once again for your reply! It seems that everything is well connected inside the code, which is good, but sometimes takes a simple modification a long journey into the code. Which is good to learn the philosophy adopted here.
Yes, I want to implement these tests for the other backends. I need it working at very least on SQLite3 and Postgres (ideally on MySQL too). The remaining backends I will implement to keep the SOCI compatibility as it should. (See more on the "obs" section)
However, while I was reading the code related to blob, I realised that currently SOCI doesn't have a regular compatibility between different backends for this data type.
You said you are using use() and into() with blob, right? So I presume you are using or SQLite3 or Firebird, is that correct?
Currently, it seems that SQLite3 and Firebird are the only ones supporting use() with blob functions, as you can see in the tests for ORACLE and Postgres. (SOCI does not support blob for the others backends).
USE 1: SQLite3 and Firebird do use the function use() to save modifications as any other data type:
{ // For SQLite3 and Firebird
    blob b(sql);

    sql << "select img from soci_test where id = 7", into(b);
    CHECK(b.get_len() == 0);

    b.write(0, buf, sizeof(buf));
    CHECK(b.get_len() == sizeof(buf));

    b.append(buf, sizeof(buf));
    CHECK(b.get_len() == 2 * sizeof(buf));

    sql << "update soci_test set img=:blob where id = 7", use(b); // Save it on DB
}

a similar code can be seen here.
USE 2: While Postgres and ORACLE save the modifications on the database at the moment you call the function write.
{ // For Oracle and Postgres
    blob b(sql);

    sql << "select img from soci_test where id = 7", into(b);
    CHECK(b.get_len() == 0);

    b.write(0, buf, sizeof(buf)); // Save it on DB
    CHECK(b.get_len() == sizeof(buf));

    b.append(buf, sizeof(buf)); // Save it on DB
    CHECK(b.get_len() == 2 * sizeof(buf));
}

code copied from here.
Which forces the user to first create a dump empty blob inside the database with a SQL command:
{
    // Create a empty `blob` on `Postgres`
    sql << "insert into soci_test(id, img) values(7, lo_creat(-1))";

    // Create a empty `blob` on `Oracle`
    sql << "insert into soci_test (id, img) values (7, empty_blob())";
}

code copied from here and here.
Which doesn't make too much sense to me.... In order to insert a new information you have to run an insert, followed by a select, to only then insert your blob data.
The version implemented on SQLite3 and Firebird makes more sense to me. It is more similar to how we modify any other value on the database.
One could argue that blob data is saved as a string on SQLite3, where Postgres saves it in a file apart from the table itself. However, Firebird does a similar job as Postgres. Nevertheless, it is implemented as it is. Besides, imho, an ordinary user does not pay attention to these details on a regular use. Also, we could still provide a similar interface to an advanced user as it is today.
After digging the code, it seems to me that there is a confusion on the roles of class blob; and class blob_backend;. IMHO, the first should be a container into where the blob data navigates inside the code, similar to what class holder; does for the general use. The second one should be the backend functions to actually insert the data into the db. I believe this confusion came from the time when SOCI supported only Oracle and didn't use to need an abstract transport layer to support many backends. Just a guess.
USE 3: Also, for the other variable types, SOCI seems to support a "later evaluation" (or as you wanna call) to simplify the data input:
{
    statement st1 = (sql.prepare <<
        "insert into soci_test (id, name) values (:id, :name)",
        use(id), use(name));

    id = 1; name = "John"; st1.execute(1);
    id = 2; name = "Anna"; st1.execute(1);
    id = 3; name = "Mike"; st1.execute(1);
}

code copied from here.
Which currently will not work with blob data on any backend. I could try to implement something for this, but since it is not currently supported by SOCI, I will let it just as a comment for now.
Actually, the simple fact of re-using a blob class will yield errors:
{ // Another issue on Firebird (I believe that it doesn't affect SQLite3)
    blob b(sql);
    b.write(0, buf, sizeof(buf));
    CHECK(b.get_len() == sizeof(buf));
    sql << "insert into soci_test(id, img) values(1, :blob)", use(b); // Saves the blob on db.
    sql << "insert into soci_test(id, img) values(2, :blob)", use(b); // Saves an empty blob
}

I am adding this test on the tests batch and fixing where it is happening.
Only a suggestion: Talking about "later evaluation". It would be nice if we could have a blob function just to mark that a variable should be treated as blob by SOCI, and actually takes care for us of all necessary transformations.
{ // Only a suggestion
    std::vector<int> vec1 = {1, 2, 3, 4}

    statement st1 = (sql.prepare <<
        "insert into soci_test (id, m_list) values (:id, :blob)",
        use(id), use(blob(vec1)));

    id = 1; st1.execute(1);                    // Saves {1, 2, 3, 4}
    id = 2; vec1.push_back(5); st1.execute(1); // Saves {1, 2, 3, 4, 5}
}
{
    std::vector<int> vec2;
    sql << "select m_list from soci_test where id = 1", into(blob(vec2));

    print_vector(vec2); // Prints {1, 2, 3, 4}
}

I think it is doable, but it is out of scope of the discussion here and/or my initial motivation. I am letting it here just as a suggestion.

My initial goal was to support blob on rowset. So I can retrieve binary data on a table-like format, together with other informations, as I need for a current application we have here with SQLite3 that is migrating to Postgres and/or MySQL. I did have to change a thing or two to allow this use on Firebird and very likely I will need to change to allow on Oracle too. I am not going into details here, but the appropriated tests are going to be implemented on all backends too.

In short (or in tables). Current blob support:

Oracle
Firebird
Postgres
SQLite3
MySQL
DB2
ODBC

into()
✅
✅
✅
✅
🚫
🚫
🚫

use()
🚫
✅
🚫
✅
🚫
🚫
🚫

use() w/ later eval
🚫
🚫
🚫
🚫
🚫
🚫
🚫

rowset()
🚫
🚫
🚫
🚫
🚫
🚫
🚫

Where I am aiming:

Oracle
Firebird
Postgres
SQLite3
MySQL
DB2
ODBC

into()
✅
✅
✅
✅
❓
🚫
🚫

use()
✅
✅
✅
✅
❓
🚫
🚫

use() w/ later eval
🚫
🚫
🚫
🚫
🚫
🚫
🚫

rowset()
✅
✅
✅
✅
❓
🚫
🚫

OBS 1: If you wanna follow the CI tests, I am running them here. This repo has a good CI pipeline implemented for GitHub Actions, idk why it is not running on my PR here. So I forked the project to run it there.
OBS 2: Just so you know, I wanna work on the final backend (Oracle) tonight or tomorrow. If everything goes fine, a PR will be ready to evaluation on Monday's morning.

Hello guys.
@vadz answered me on the PR:

Thanks for working on this!
I don't use rowset API myself, so I'm not too familiar with it and could be missing something here, but I'm a bit surprised by the need to modify the code not clearly related to rowsets to implement support for blobs there when they do work just fine with just use() and into() already (which I do use in my own code). It would be best if this could be avoided, i.e. if the backend files could remain unmodified.
Also, thank you for adding a test, but ideally the test should work for all backends, not just SQLite, and actually test that retrieving the blobs works, too.
Thanks again!

I will answer it here since the conversation seems to go beyond my initial expectations. I will explain what I mean.
First things first, thanks once again for your reply! It seems that everything is well connected inside the code, which is good, but sometimes takes a simple modification a long journey into the code. Which is good to learn the philosophy adopted here.
Yes, I want to implement these tests for the other backends. I need it working at very least on SQLite3 and Postgres (ideally on MySQL too). The remaining backends I will implement to keep the SOCI compatibility as it should. (See more on the "obs" section)
However, while I was reading the code related to blob, I realised that currently SOCI doesn't have a regular compatibility between different backends for this data type.
You said you are using use() and into() with blob, right? So I presume you are using or SQLite3 or Firebird, is that correct?
Currently, it seems that SQLite3 and Firebird are the only ones supporting use() with blob functions, as you can see in the tests for ORACLE and Postgres. (SOCI does not support blob for the others backends).
USE 1: SQLite3 and Firebird do use the function use() to save modifications as any other data type:
{ // For SQLite3 and Firebird
    blob b(sql);

    sql << "select img from soci_test where id = 7", into(b);
    CHECK(b.get_len() == 0);

    b.write(0, buf, sizeof(buf));
    CHECK(b.get_len() == sizeof(buf));

    b.append(buf, sizeof(buf));
    CHECK(b.get_len() == 2 * sizeof(buf));

    sql << "update soci_test set img=:blob where id = 7", use(b); // Save it on DB
}

a similar code can be seen here.
USE 2: While Postgres and ORACLE save the modifications on the database at the moment you call the function write.
{ // For Oracle and Postgres
    blob b(sql);

    sql << "select img from soci_test where id = 7", into(b);
    CHECK(b.get_len() == 0);

    b.write(0, buf, sizeof(buf)); // Save it on DB
    CHECK(b.get_len() == sizeof(buf));

    b.append(buf, sizeof(buf)); // Save it on DB
    CHECK(b.get_len() == 2 * sizeof(buf));
}

code copied from here.
Which forces the user to first create a dump empty blob inside the database with a SQL command:
{
    // Create a empty `blob` on `Postgres`
    sql << "insert into soci_test(id, img) values(7, lo_creat(-1))";

    // Create a empty `blob` on `Oracle`
    sql << "insert into soci_test (id, img) values (7, empty_blob())";
}

code copied from here and here.
Which doesn't make too much sense to me.... In order to insert a new information you have to run an insert, followed by a select, to only then insert your blob data.
The version implemented on SQLite3 and Firebird makes more sense to me. It is more similar to how we modify any other value on the database.
One could argue that blob data is saved as a string on SQLite3, where Postgres saves it in a file apart from the table itself. However, Firebird does a similar job as Postgres. Nevertheless, it is implemented as it is. Besides, imho, an ordinary user does not pay attention to these details on a regular use. Also, we could still provide a similar interface to an advanced user as it is today.
After digging the code, it seems to me that there is a confusion on the roles of class blob; and class blob_backend;. IMHO, the first should be a container into where the blob data navigates inside the code, similar to what class holder; does for the general use. The second one should be the backend functions to actually insert the data into the db. I believe this confusion came from the time when SOCI supported only Oracle and didn't use to need an abstract transport layer to support many backends. Just a guess.
USE 3: Also, for the other variable types, SOCI seems to support a "later evaluation" (or as you wanna call) to simplify the data input:
{
    statement st1 = (sql.prepare <<
        "insert into soci_test (id, name) values (:id, :name)",
        use(id), use(name));

    id = 1; name = "John"; st1.execute(1);
    id = 2; name = "Anna"; st1.execute(1);
    id = 3; name = "Mike"; st1.execute(1);
}

code copied from here.
Which currently will not work with blob data on any backend. I could try to implement something for this, but since it is not currently supported by SOCI, I will let it just as a comment for now.
Actually, the simple fact of re-using a blob class will yield errors:
{ // Another issue on Firebird (I believe that it doesn't affect SQLite3)
    blob b(sql);
    b.write(0, buf, sizeof(buf));
    CHECK(b.get_len() == sizeof(buf));
    sql << "insert into soci_test(id, img) values(1, :blob)", use(b); // Saves the blob on db.
    sql << "insert into soci_test(id, img) values(2, :blob)", use(b); // Saves an empty blob
}

I am adding this test on the tests batch and fixing where it is happening.
Only a suggestion: Talking about "later evaluation". It would be nice if we could have a blob function just to mark that a variable should be treated as blob by SOCI, and actually takes care for us of all necessary transformations.
{ // Only a suggestion
    std::vector<int> vec1 = {1, 2, 3, 4}

    statement st1 = (sql.prepare <<
        "insert into soci_test (id, m_list) values (:id, :blob)",
        use(id), use(blob(vec1)));

    id = 1; st1.execute(1);                    // Saves {1, 2, 3, 4}
    id = 2; vec1.push_back(5); st1.execute(1); // Saves {1, 2, 3, 4, 5}
}
{
    std::vector<int> vec2;
    sql << "select m_list from soci_test where id = 1", into(blob(vec2));

    print_vector(vec2); // Prints {1, 2, 3, 4}
}

I think it is doable, but it is out of scope of the discussion here and/or my initial motivation. I am letting it here just as a suggestion.

My initial goal was to support blob on rowset. So I can retrieve binary data on a table-like format, together with other informations, as I need for a current application we have here with SQLite3 that is migrating to Postgres and/or MySQL. I did have to change a thing or two to allow this use on Firebird and very likely I will need to change to allow on Oracle too. I am not going into details here, but the appropriated tests are going to be implemented on all backends too.

In short (or in tables). Current blob support:

Oracle
Firebird
Postgres
SQLite3
MySQL
DB2
ODBC

into()
✅
✅
✅
✅
🚫
🚫
🚫

use()
🚫
✅
🚫
✅
🚫
🚫
🚫

use() w/ later eval
🚫
🚫
🚫
🚫
🚫
🚫
🚫

rowset()
🚫
🚫
🚫
🚫
🚫
🚫
🚫

Where I am aiming:

Oracle
Firebird
Postgres
SQLite3
MySQL
DB2
ODBC

into()
✅
✅
✅
✅
❓
🚫
🚫

use()
✅
✅
✅
✅
❓
🚫
🚫

use() w/ later eval
🚫
🚫
🚫
🚫
🚫
🚫
🚫

rowset()
✅
✅
✅
✅
❓
🚫
🚫

OBS 1: If you wanna follow the CI tests, I am running them here. This repo has a good CI pipeline implemented for GitHub Actions, idk why it is not running on my PR here. So I forked the project to run it there.
OBS 2: Just so you know, I wanna work on the final backend (Oracle) tonight or tomorrow. If everything goes fine, a PR will be ready to evaluation on Monday's morning.

Sorry, I didn't have time to look at this in details yet, but we do use BLOBs (or at least CLOBs, for XML storage, but I think they are very similar) with Firebird, Oracle and PostgreSQL, so I am not sure what the problem is. I don't think we ever reuse them, however, so there could be bugs when doing it.
Another question I have is what exactly do you mean by "good CI pipeline", i.e. how is it better than what we have? If you have any improvements to suggest for our CI workflow, please don't hesitate to make (another) PR for it, TIA!

I mean your CI pipeline, the GitHub actions one.  For some reason, yours GitHub actions is not running on that PR, so I created a fork just to run yours GitHub Actions CI pipeline.
In my case here, we need a library that runs the exactly same code on different backends, which is not the case for blob right now. When you would have a time, please check it.
If you think it is not from SOCI's interest to normalize this use, I will keep that code on my fork and use from there.

The CI should run now, it just had to be manually authorized for the first run by a new contributor.
And of course all the backends should work the same, ideally. Anyhow, let's wait until your PR is finalized and discuss the final version when it's ready.

looking forward to this!

Hello Gabriel.
It is almost done for all engines. I am missing just oracle. But I work got me and I ended letting it aside for a time.
If you would like to help finish and/or would like to use to another backend, be my guest to checkout on my branch.
Kind regards

I think all of the mentioned features here (except for the "tell soci to use arbitrary objects as blob-like data") are implemented in #992

@schvarcz  Have all these suggestions been implemented? Thanks

authors: Krzmbrzl gtnardy schvarcz vadz zenggl

repo: SOCI/soci


text:
PHP version name as string

Magically fixed the error.
https://github.com/Endermanbugzjfc/ChoosePlayer/actions/runs/3073759113

Partial success? Does accessing a cache consume it? Or triple asynchronous access caused memory problems?

It must be one of the persisted caches in your repository fk them up. They run without a single problem in my repository.
I got what I wanted anyway, the PHAR is in my repo. Not going to continue bothering with these.


text:
🛑 CAOS is down

In df8c462, CAOS (http://caos.ayi-asociados.com/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: CAOS is back up in 09b645d after 24 minutes.

repo: SOPORTEAYIGROUP/AYIGROUP


text:
🛑 Gitlab Ayigroup is down

In 53fc296, Gitlab Ayigroup (https://gitlab.ayi-asociados.com/) was down:

HTTP code: 503
Response time: 171 ms

Resolved: Gitlab Ayigroup is back up in 9db4b15 after 2 days, 11 hours, 7 minutes.


text:
TC 5

Refer to this link for test case specifications. Attach a recording of the execution to this ticket. Report immediately if issues are encountered in the dev environment. Thanks!

link to recording

repo: SPARCS-UP-Mindanao/TechTix


text:
🛑 SSRQ PersonsDB is down

In 0ae393b, SSRQ PersonsDB (https://www.ssrq-sds-fds.ch/persons-db-edit/) was down:

HTTP code: 502
Response time: 487 ms

Back online.

repo: SSRQ-SDS-FDS/ssrq-uptime


text:
Soundness issue with msg_send!

So, during my work on objc2 I decided to test some things in Miri, to try to get a feel for how sound everything is, and found this issue (which is currently present in both crates).
Below is a piece of code that tries to mutate an ivar on an object, resembling fairly closely something that is quite commonly done in winit. Try placing it under objc/examples/msg_send_unsound.rs, and running cargo miri run --example msg_send_unsound.
#[macro_use]
extern crate objc; // v0.2.7

use objc::runtime::{Object, Sel};

// Assume this is registered to the object with `ClassDecl::add_method`
extern "C" fn my_selector(obj: *mut Object, _sel: Sel) {
    let obj = unsafe { &mut *obj };
    let a = unsafe { obj.get_mut_ivar::<i32>("a") };
    *a += 1;
}

fn main() {
    let ptr: *mut Object = new_object(42); // ivar a = 42
    let obj: &mut Object = unsafe { &mut *ptr };

    // Get an immutable reference to the instance variable
    let a = unsafe { obj.get_ivar::<i32>("a") };

    unsafe {
        // Uses `obj` mutably, but the signature says it's used immutably
        let _: () = msg_send![obj, my_selector];
    }

    // So the compiler can't catch that we're not allowed to access `a` here!
    assert_eq!(*a, 43);

    free_object(ptr);
}

// ------------------------------------
//
// HACKY STUBS BELOW TO MAKE MIRI WORK!
//
// ------------------------------------

use std::ffi::CStr;
use std::os::raw::c_char;
use std::ptr;

use objc::runtime::{Class, Ivar};

#[repr(C)]
struct MyObject {
    isa: *const Class,
    a: i32,
}

fn new_object(a: i32) -> *mut Object {
    let obj = Box::new(MyObject {
        isa: ptr::null(),
        a,
    });
    Box::into_raw(obj) as *mut Object
}

fn free_object(obj: *mut Object) {
    unsafe { Box::from_raw(obj as *mut MyObject) };
}

#[no_mangle]
extern "C" fn sel_registerName(name: *const c_char) -> Sel {
    unsafe { Sel::from_ptr(name.cast()) }
}

#[no_mangle]
extern "C" fn objc_msgSend(obj: *mut Object, sel: Sel) {
    my_selector(obj, sel)
}

#[no_mangle]
extern "C" fn object_getClass(obj: *const Object) -> *const Class {
    // Must be a valid pointer, so don't return isa
    obj.cast()
}

#[no_mangle]
extern "C" fn class_getInstanceVariable(cls: *const Class, _name: *const c_char) -> *const Ivar {
    cls.cast()
}

#[no_mangle]
extern "C" fn ivar_getTypeEncoding(_ivar: *const Ivar) -> *const c_char {
    CStr::from_bytes_with_nul(b"i\0").unwrap().as_ptr()
}

#[no_mangle]
extern "C" fn ivar_getOffset(_ivar: *const Ivar) -> isize {
    // isa is 64 bits
    8
}

You should see the following miri error, which makes sense as explained in the code comments:
error: Undefined Behavior: trying to reborrow <6300> for SharedReadOnly permission at alloc1621[0x8], but that tag does not exist in the borrow stack for this location
   --> examples/msg_send_unsound.rs:26:5
    |
26  |     assert_eq!(*a, 43);
    |     ^^^^^^^^^^^^^^^^^^
    |     |
    |     trying to reborrow <6300> for SharedReadOnly permission at alloc1621[0x8], but that tag does not exist in the borrow stack for this location
    |     this error occurs as part of a reborrow at alloc1621[0x8..0xc]
    |
    = help: this indicates a potential bug in the program: it performed an invalid operation, but the rules it violated are still experimental
    = help: see https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/stacked-borrows.md for further information
help: <6300> was created by a retag at offsets [0x8..0xc]
   --> examples/msg_send_unsound.rs:18:22
    |
18  |     let a = unsafe { obj.get_ivar::<i32>("a") };
    |                      ^^^^^^^^^^^^^^^^^^^^^^^^
help: <6300> was later invalidated at offsets [0x8..0xc]
   --> src/runtime.rs:510:9
    |
510 |         &mut *ptr
    |         ^^^^^^^^^
    = note: inside `main` at $TOOLCHAIN/lib/rustlib/src/rust/library/core/src/macros/mod.rs:38:16
    = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)

A bit more info

The problem is that you have to somehow specify that the object is mutated by the message send, which you can't really do properly.
Just to illustrate that this is indeed an issue with how msg_send! works, try applying the following quick patch which changes msg_send! to always require mutable objects (obviously not a real fix):
diff --git a/src/macros.rs b/src/macros.rs
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -130,7 +130,7 @@ macro_rules! msg_send {
     ($obj:expr, $name:ident) => ({
         let sel = sel!($name);
         let result;
-        match $crate::__send_message(&*$obj, sel, ()) {
+        match $crate::__send_message(&mut *$obj, sel, ()) {
             Err(s) => panic!("{}", s),
             Ok(r) => result = r,
         }
@@ -139,7 +139,7 @@ macro_rules! msg_send {
     ($obj:expr, $($name:ident : $arg:expr)+) => ({
         let sel = sel!($($name:)+);
         let result;
-        match $crate::__send_message(&*$obj, sel, ($($arg,)*)) {
+        match $crate::__send_message(&mut *$obj, sel, ($($arg,)*)) {
             Err(s) => panic!("{}", s),
             Ok(r) => result = r,
         }

Then you'll get the expected rustc error:
error[E0502]: cannot borrow `*obj` as mutable because it is also borrowed as immutable
  --> examples/msg_send_unsound.rs:22:21
   |
18 |     let a = unsafe { obj.get_ivar::<i32>("a") };
   |                      ------------------------ immutable borrow occurs here
...
22 |         let _: () = msg_send![obj, my_selector];
   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
...
26 |     assert_eq!(*a, 43);
   |     ------------------ immutable borrow later used here
   |
   = note: this error originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)

This is similar to the problem with nulls I noted in https://github.com/SSheldon/rust-objc/pull/102, and probably requires some kind of change in msg_send!, though I don't actually know how to do this yet (suggestions appreciated).

@madsmtm would it help anything if we stopped trying to have &/&mut references to Object? I've been thinking that in practice it's probably never truly safe to have a Rust reference to an Objective-C object given how strict Rust's reference rules are and how lax Objective-C is. Like, autorelease an object? Well, somewhere now an autorelease pool is probably holding onto a pointer to the object and will mutate its retain count later, and this means technically an &mut reference to it is invalid.
Maybe instead of trying to treat pointers to Objective-C objects like Rust references, we should just be honest about the safety and have more unsafe and take *mut Object everywhere. get_ivar could take an object pointer and return a pointer and leave it to the developer to determine when it's safe to dereference or not.
Or, less drastic but maybe we should at least have get_mut_ivar take &self and return *mut T (and probably change get_ivar to also return a pointer for consistency).

A first step would be to add UnsafeCell somewhere in https://github.com/SSheldon/rust-objc/blob/0.2.7/src/runtime.rs#L43 or similar places - that would as far as I know make it so that internal things that Object may hold are allowed to be mutated (of course ideally we'd just mark Object as an extern type, but that's beside the point).

get_mut_ivar take &self and return *mut T

I think this would now behave similar to UnsafeCell::get, which would probably be fine (though of course that still doesn't save the user from creating two overlapping &mut T, but UnsafeCell doesn't do that either). Could improve this using ideas from Cell::get and Cell::set.

autorelease an object? Well, somewhere now an autorelease pool is probably holding onto a pointer to the object and will mutate its retain count later, and this means technically an &mut reference to it is invalid.

Huh, never considered that. Actually it may not even be possible to soundly implement autoreleasepools in Rust (under Stacked Borrows) - I'll look into that at some point, if it is, then this is a non-issue, if not, it's probably an issue that the UCG WG would like to know about.

@madsmtm would it help anything if we stopped trying to have &/&mut references to Object?

I don't think this is a clear "either is better" situation - On one hand, doing this would ensure that objc is sound, on the other I think it would make it harder for downstream users to ensure that their code is sound.
A reasonable middle ground would maybe be to use &Object everywhere. E.g. an implementation of NSArray could be mutated using fn push(&self, obj: &Object) { msg_send![self, addObject: obj] }, and that would probably still be safe (as long as NSArray contains UnsafeCell). Of course, such an implementation wouldn't be thread safe, but that's probably not that important.
Anyhow, as you know, I'd like to see more (safe) Objective-C code in the wild, so I believe the trade-off in increased complexity on our end to accommodate this is worth it, but I recognize the very real possibility that I'll change my mind on this at some point.

authors: SSheldon madsmtm

repo: SSheldon/rust-objc


text:
Bug string_util/split.hpp

1. split a string with token_compress_mode::off
call split a string
std::vector<std::string> result;
hpx::string_util::split(result,
	"a-b-",
	[](auto ch) {return ch == '-'; },
	hpx::string_util::token_compress_mode::off);

Expected size of result: 2
Actual size of result: 3

2. split a string above with token_compress_mode::on
Error at  pred(int(*token_begin)).
Cannot dereference string iterator because it is out of range (e.g. an end iterator)
while (token_end != std::end(str) && pred(int(*token_begin)))
{
	++token_begin;
}

Specifications

HPX Version: master
Platform (compiler, OS): Windows

Thanks @pvthuyet for the report!

This is expected behaviour. The separator - separates three tokens in your input, which I've wrapped in square brackets here: [a]-[b]-[]. split takes no special action for empty tokens. With token_compress_mode::on it may remove empty tokens, but that's because it compresses consecutive separators, not because it inherently removes empty tokens. The implementation is based on https://www.boost.org/doc/libs/1_74_0/doc/html/boost/algorithm/split.html and has the same behaviour. Perhaps token_compress_mode is somewhat confusingly named...
Very nice catch, thank you! This is a plain mistake in the code. I'll fix this.
I know we've done a terrible job of communicating this, but you shouldn't rely on this functionality to be stable; it's mainly meant for internal use (it's not listed here https://hpx-docs.stellar-group.org/tags/1.5.1/html/api/public_api.html, although that list is also not complete...). You are of course free to use it as long as you accept that we may change things at any time. In practice this functionality is unlikely to change, but we make no guarantees. If you're looking for something slightly more comprehensive and better supported I recommend you use https://www.boost.org/doc/libs/1_74_0/doc/html/string_algo.html instead.

authors: msimberg pvthuyet

repo: STEllAR-GROUP/hpx


text:
Simplify packaged task

Simplify packaged_task. Split future_factory into its own header.

LGTM, thanks!

authors: K-ballo hkaiser