[Feature Suggestion/Request] Python library

First of all, nice work here. :smiley:
Are there currently any plans for this to be used as a library?
That is, in a way the text effects can be easily embedded into applications or even other libraries.
If there's any interest, I may have some ideas or even be able to help with API design or implementation (though the latter largely depends on my availability).
Thank you.

Looking into that is on my todo list. I'm thinking of at least allowing the effects to be imported and passed strings to run against. Something like the following:
from terminaltexteffects import effects

rain_effect = effects.rain()
rain_effect.run('your string')

In addition, I'm working on better documenting the API so others can more easily write effects.

Well done @ChrisBuilds!
Do you think this issue would be completely resolved once #5 is fully implemented across the code base?

Noted. Thanks for the clarification.

A new branch has been published with a first draft implementation of library features.
TTE as a library should provide two primary features:

Provide the effect frames as a string to enable the user to do whatever they want.
Provide the necessary functionality to display the effect so the user does not have to reimplement terminal handling and timing.

In the spirit of limiting scope creep and keeping things simple, use cases beyond these two are unlikely to be supported. That being said, compelling cases with general applicability will be considered.
All effects have been refactored into generator functions which yield frames as a string.
Basic usage is as follows:
from terminaltexteffects.effects import effect_rain

input_data = "Your String Here"
effect = effect_rain(input_data)
for frame in effect:
    # do something with the frame string
    ...

The Terminal class has been refactored to enable outputting the animation should the user of the library desire.
e = effect_rain.RainEffect(test_input)
e.terminal.prep_outputarea() # adds space for the effect and hides the cursor
for frame in e:
    e.terminal.print(frame)
e.terminal.restore_cursor()

Configuration changes which were previously passed as arguments though the CLI are available through TerminalConfig and EffectConfig objects which should be built and passed to the effect.
from terminaltexteffects.effects import effect_rain
from terminaltexteffects.utils.terminal import TerminalConfig

term_conf = TerminalConfig()
effect_conf = effect_rain.EffectConfig()

term_conf.no_wrap = True
term_conf.xterm_colors = True

effect_conf.rain_colors = ("ff0000", "00ff00")
effect_conf.movement_speed = (0.1, 0.9)

rain = effect_rain.RainEffect(test_input, effect_config=effect_conf, terminal_config=term_conf)
rain.terminal.prep_outputarea()
for frame in rain:
    rain.terminal.print(frame)
rain.terminal.restore_cursor()

Some effects may require longer build times. To enable the library user some control over when the effect is built, all effects implement a build() method. After an effect has been exhausted, it must be rebuilt. If an effect is iterated over without an explicit call to build(), it will build itself.
rain = effect_rain.RainEffect(test_input)
rain.build()
rain.terminal.prep_outputarea()
for frame in rain:
    rain.terminal.print(frame)
rain.terminal.restore_cursor()

Check out the branch and provide any comments/suggestions for improvements. GLHF.

This looks great and promising already. Well done and thank you for your hardwork. :tada:

Quick Suggestion
Just one quick comment/suggestion while I'm yet to check/test it out.
I think a method on the effect base class would be very appropriate to encapsulate:
rain.terminal.prep_outputarea()
for frame in rain:
    rain.terminal.print(frame)
rain.terminal.restore_cursor()

as it seems to be a potential common pattern in code using the library.
By the way, a try... finally would be appropriate there in order to ensure the cursor is alwsys restored particularly when and exception is raised (for whatever reason) or the process is terminated by some signal or Ctrl-C is hit.
If there's already such a method, please ignore this and forgive my ignorance. :smiley:

I'll check and test it out very soon and give my feedback.
Thank you very much.

I noticed the config class for every effect is named EffectConfig. Might be more convenient for users importing/using different effects within the same or overlapping namespace(s) if they were named <EffectName>EffectConfig (e.g RainEffectConfig)  or so. I reckon this might've been an oversight since the classes were previously named <EffectName>EffectArgs i.e included the effect name.

I also noticed effect iterators (returned by Effect.__iter__()) use and mutate instance state. This disallows the simultaneous use of multiple iterators for the same effect instance (use cases are primarily in non-scrolling-output TUIs).
This (i.e modifying instance state) isn't typical of iterators returned by an iterable (see any built-in or stdlib iterable). I feel any state/data unique to or modified by an iterator should be local to the iterator; after all, an effect instance's private state (attributes) is only used for effect iteration (at least for the effects I checked).
Yes, this behaviour can be worked around by creating new instances of the effect but that's less desirable and would result in extra code for the user of effect classes.
If this behaviour will be changed i.e iterators will be made standalone and to allow simultaneous use, the Effect.build() method and Effect.built property wouldn't be necessary anymore. A couple possibilities:

.build()'s code can be merged into __iter__() and the private attributes currently used turned into local variables.
the build() method can be made private (-> ._build()), the private attributes currently used turned into local variables and returned. The method can then be called at the start of __iter__(). (NB: This is merely a modularised version of the previous alternative)

As for effect classes (such as BlackholeEffect) that have other methods (such as .prepare_blackhole(), .rotate_blackhole(), etc) called only during effect iteration, the methods can be moved into __iter__() (i.e as nested functions) and made to work with enclosing scope variables (via nonlocal). From what I can see, such methods aren't actually meant to be called on their own by a user of the class; they're only used for the effect iteration. Hence, they're not actually meant to be public.
Anyways, if this behaviour will be kept, I think it's worth documenting so it won't catch users by surprise.

For what it's worth...
I had actually anticipated this. That was why I suggested having separate effect iterator classes in my original proposal above. If these were to be used, then the extra methods and modifying the iterator's state would be okay. Please, note that I'm not suggesting going this route now; the suggestions above (in this comment) will also achieve the goal, albeit less tidy.

In relation to (2), the use of ._built and instance state for/with iteration results in an iterator continuing from where a previous one stopped if the previous one wasn't exhausted. To repoduce

Create an iterator via iter(effect).
Iterate over it a couple times but don't exhaust it.
Create a new iterator via iter(effect). (Note that the effect isn't rebuilt since ._built is still True)
Iterate over it.
Observe that the first frame yielded is the one that should've been after the last

To observe this visually, run your sample code (without the explicit build) above in an REPL session. Hit Ctrl-C at any point during the animation, then run the code again.
This behaviour is not typical of (non-iterator) iterables but instead of iterators.

EffectConfig (for every effect) and TerminalConfig are both mutable, yet their instances are used as default argument values of effect class initializers. As a result, modifying the .config or .terminal attribute of any effect instance created with the default argument values will affect all other such instances of the same effect.
Typically in this case, None is used as the default value and a new instance is created within the function or method i.e something like:
def __init__(..., config: EffectConfig | None = None, ...):
    self.config = config or EffectConfig()

On the hand, the instances of these classes can be made "immutable", if they aren't actually intended to be mutable.
For what it's worth, I think this was just an oversight which really wouldn't have come to light until now when the package is to be used as a library.

Aside these points (for now), I believe everything else is great including the format of the frames (though I might have something to note about the way SGR sequences are used but not in this issue).

Side note
I'm not sure but I don't think this is related to the changes on the branch, but I guess it's worthy of note:

I noticed there's an _animate_chars() method defined on every effect class I checked. Why not define this as an animate_chars(characters) function in the tte.base_character module and import it into the effect modules, instead of the repetition? The proposed function will accept, as an argument, an iterable of characters to be animated.

So sorry for the very long (finally done after hours :weary:) feedback. :smiling_face_with_tear:
Thank you very much. :smiley:

For what it's worth... I'm willing to submit PR(s) addressing any or all of the changes I suggested above, if it's okay by you.
Thank you.

I noticed the config class for every effect is named EffectConfig. Might be more convenient for users importing/using different effects within the same or overlapping namespace(s) if they were named <EffectName>EffectConfig (e.g RainEffectConfig)  or so. I reckon this might've been an oversight since the classes were previously named <EffectName>EffectArgs i.e included the effect name.

This was done for consistency assuming the user would import the effect and access the config within the effect namespace such as conf = effect_rain.EffectConfig() rather than something like from effect_rain import RainEffect, EffectConfig. The user would always know the name of the config class. I'm open to returning the config to the previous style.

2. I also noticed effect iterators (returned by `Effect.__iter__()`) use and mutate instance state. This disallows the simultaneous use of multiple iterators for the same effect instance (use cases are primarily in non-scrolling-output TUIs).
   This (i.e modifying instance state) isn't typical of iterators returned by an iterable (see any built-in or stdlib iterable). I feel any state/data unique to or modified by an iterator should be local to the iterator; after all, an effect instance's private state (attributes) is only used for effect iteration (at least for the effects I checked).

Yeah, I'm not satisfied with the current implementation and will be addressing this in the next few days.

   As for effect classes (such as `BlackholeEffect`) that have other methods (such as `.prepare_blackhole()`, `.rotate_blackhole()`, etc) called only during effect iteration, the methods can be moved into `__iter__()` (i.e as nested functions) and made to work with enclosing scope variables (via `nonlocal`). From what I can see, such methods aren't actually meant to be called on their own by a user of the class; they're only used for the effect iteration. Hence, they're not actually meant to be public.

Your assessment is correct. Methods such as those do not need to be exposed. Some of them were refactored into iter already and the rest will be handled in the coming updates to the branch.

3. In relation to (2), the use of `._built` and instance state for/with iteration results in an iterator continuing from where a previous one stopped if the previous one wasn't exhausted.

I noticed this but left the behavior in while testing ideas for the interface. As you've indicated, this will be fixed by refactoring iter as is the current plan.

4. `EffectConfig` (for every effect) and `TerminalConfig` are both mutable, yet their instances are used as default argument values of effect class initializers. As a result, modifying the `.config` or `.terminal` attribute of any effect instance created with the default argument values will affect all other such instances of the same effect.

Oops, haha. Unintended.

I noticed there's an _animate_chars() method defined on every effect class I checked. Why not define this as an animate_chars(characters) function in the tte.base_character module and import it into the effect modules, instead of the repetition? The proposed function will accept, as an argument, an iterable of characters to be animated.

The _animate_chars() methods are really just a personal decision that I (as a the user of the engine, rather than engine dev, in this case) made while writing effects early on. This method is not necessary, which is why it's not in base_effect. It's actually a vestigial method at this point. Prior to base_character.tick() existing, there was more that needed to be done to update the state of each character's motion/animation handlers for each frame. All of that was refactored into the animation/motion handlers and ultimately simplified into a single call to tick(). The _animate_chars() method could be removed and the loop over self._active_chars could be dropped straight into place over any calls to _animate_chars().
You could argue the loop itself could be made a part of base_effect but, at this time, I have left most of the effect design choices open to the effect writer. Effects only follow a consistent pattern because I am the only one writing them. Ultimately, you could write an effect which does not contain _animate_chars() or, for that matter, self.active_chars at all. Once the engine is fully documented, I would bet people are going to write effects that follow a completely different design from mine altogether.
As always, thanks for your hard work. I appreciate the suggestions and will be implementing some version of them in the near future. Time is the primary challenge for me at the moment, but this whole endeavor is for fun/learning, so I don't mind handling the refactors myself, though it will take at least a few days. Stay tuned for updates to this branch.

As always, thanks for your hard work.

It's a pleasure. :smiley:

I appreciate the suggestions and will be implementing some version of them in the near future.

Glad to hear that. :+1:

Time is the primary challenge for me at the moment, but this whole endeavor is for fun/learning, so I don't mind handling the refactors myself, though it will take at least a few days. Stay tuned for updates to this branch.

Totally understandable.
For the record, I'm in no rush. Currently, I don't even have any particular use case but since the moment I came across the project, I saw the potential it held and wanted to help drive it beyond being just a command-line utility.
Well done. :+1:

I've had a few hours to work on this, here's an update.
I have two goals, at this time, for the library refactor.

Keep the code required for effect development simple and free from library boilerplate.
Keep the code required to use the library simple and intuitive.

For the first goal, the current approach is the following:
Effects now subclass two abstract classes found in terminaltexteffects.base_effect. The abstract classes implement most of the boilerplate for an effect and provide some concrete helper functions to keep effect development free from repetitive code and accomplish the iterable -> iterator relationship.
BaseEffect is an iterable which creates new instances of effect iterators and provides a context manager to handle terminal setup/teardown. The effect developer does not need to provide an __iter__ method in their effect class. They must only provide the configuration class and iterator class as class attributes and a signature which accepts the input data.  Just subclass BaseEffect, drop in the two attributes and init the superclass with the input data.
Here's an example using the RandomSequence effect:
class RandomSequence(BaseEffect[EffectConfig]):
    """Prints the input data in a random sequence, one character at a time."""

    _config_cls = EffectConfig
    _iterator_cls = RandomSequenceIterator

    def __init__(self, input_data: str) -> None:
        super().__init__(input_data)

BaseEffectIterator is an iterator which should contain all of the effect logic. When BaseEffect.__iter__() is called, it instantiates a new instance of the BaseEffectIterator subclass which the effect dev provides as the _iterator_cls attribute seen above. The subclass of BaseEffectIterator must simply implement a __next__ method, a signature which accepts the effect subclass and init the superclass. On initialization, BaseEffectIterator creates a deep copy of the EffectConfig and TerminalConfig from the BaseEffect instance and creates a local Terminal instance at self._terminal. This prevents any state sharing between iterators.
Here's an example using the RandomSequence effect:
class RandomSequenceIterator(BaseEffectIterator[EffectConfig]):
    def __init__(self, effect: "RandomSequence") -> None:
        super().__init__(effect)
	# add any other attributes

    # add any other methods

    def __next__(self) -> str:
	if some_condition:
	    # do effect logic to progress the effect state
	    next_frame = self._terminal.get_formatted_output_string()
            return next_frame
        raise StopIteration

For the second goal, keeping library usage simple, the current approach is the following:
The effect and terminal configuration classes do not need to be imported or instantiated separate from the effect. That is handled by the BaseEffect class. Users of the library need only deal with the configurations within the effect object.
from terminaltexteffects.effects import effect_random_sequence

effect = effect_random_sequence.RandomSequence(test_input)

effect.effect_config.speed = 0.1
effect.terminal_config.tab_width = 2

for frame in effect:
    ...

The effect/terminal configuration can be changed at any time without impacting existing iterators. If the user needs multiple configurations, they can instantiate multiple effect objects.
Finally, here is an example of the context manager handling terminal setup/teardown.
from terminaltexteffects.effects import effect_random_sequence

effect = effect_random_sequence.RandomSequence(test_input)
with effect.terminal_output() as terminal:
    for frame in effect:
        terminal.print(frame)

As a note, I will be making significant changes to the Terminal class to separate out functionality that actually deals with the terminal from character handling. The Terminal class has grown to include too much disparate functionality and needs a refactor to enable additional library features involving the dimensions of the output area independent of the actual terminal device.
As always, I welcome suggestions and feedback as some of this is new territory for me.

The library refactor branch has been merged and published in version 0.8.0. I'm sure there are plenty of improvements to be made, but it's working well enough to start getting feedback. A few additions beyond my last message:
The Terminal now supports custom dimensions and ignoring terminal device dimensions.
For instances where you want to ignore terminal dimensions altogether, such as working with a TUI library or outputting in any other unpredictable method:
effect.terminal_config.ignore_terminal_dimensions = True

This will set the output area dimensions based solely off the input text. Nothing will be wrapped or cut off.
For instances where you want to limit the output area to a specific size manually.
effect.terminal_config.terminal_dimensions = (80, 24) # width, height

If this value is set to the default (0, 0), terminal auto-detection will occur, otherwise the dimensions provided will be used.
I'm going to leave this issue open for feedback to keep everything organized in here until the library matures and more specific issue are being raised.


pip install botbuilder-integration-aiohttp fails

Hi there,
I'm trying to setup this locally, but the requirements fail to install. It's the botbuilder-integration-aiohttp package that fails. See below. Any suggestion for this?
C:\GitHub\Azure-Cognitive-Search-Azure-OpenAI-Accelerator>pip install botbuilder-integration-aiohttp
Collecting botbuilder-integration-aiohttp
  Using cached botbuilder_integration_aiohttp-4.14.4-py3-none-any.whl (18 kB)
Collecting botbuilder-schema==4.14.4 (from botbuilder-integration-aiohttp)
  Using cached botbuilder_schema-4.14.4-py2.py3-none-any.whl (35 kB)
Collecting botframework-connector==4.14.4 (from botbuilder-integration-aiohttp)
  Using cached botframework_connector-4.14.4-py2.py3-none-any.whl (96 kB)
Collecting botbuilder-core==4.14.4 (from botbuilder-integration-aiohttp)
  Using cached botbuilder_core-4.14.4-py3-none-any.whl (114 kB)
Collecting yarl<=1.4.2 (from botbuilder-integration-aiohttp)
  Using cached yarl-1.4.2.tar.gz (163 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: aiohttp==3.8.4 in c:\python\lib\site-packages (from botbuilder-integration-aiohttp) (3.8.4)
Requirement already satisfied: attrs>=17.3.0 in c:\python\lib\site-packages (from aiohttp==3.8.4->botbuilder-integration-aiohttp) (22.2.0)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in c:\python\lib\site-packages (from aiohttp==3.8.4->botbuilder-integration-aiohttp) (3.1.0)
Requirement already satisfied: multidict<7.0,>=4.5 in c:\python\lib\site-packages (from aiohttp==3.8.4->botbuilder-integration-aiohttp) (6.0.4)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in c:\python\lib\site-packages (from aiohttp==3.8.4->botbuilder-integration-aiohttp) (4.0.2)
Requirement already satisfied: frozenlist>=1.1.1 in c:\python\lib\site-packages (from aiohttp==3.8.4->botbuilder-integration-aiohttp) (1.3.3)
Requirement already satisfied: aiosignal>=1.1.2 in c:\python\lib\site-packages (from aiohttp==3.8.4->botbuilder-integration-aiohttp) (1.3.1)
Collecting botframework-streaming==4.14.4 (from botbuilder-core==4.14.4->botbuilder-integration-aiohttp)
  Using cached botframework_streaming-4.14.4-py3-none-any.whl (41 kB)
Collecting jsonpickle<1.5,>=1.2 (from botbuilder-core==4.14.4->botbuilder-integration-aiohttp)
  Using cached jsonpickle-1.4.2-py2.py3-none-any.whl (36 kB)
Collecting msrest==0.6.* (from botbuilder-schema==4.14.4->botbuilder-integration-aiohttp)
  Using cached msrest-0.6.21-py2.py3-none-any.whl (85 kB)
Requirement already satisfied: urllib3<2.0.0 in c:\python\lib\site-packages (from botbuilder-schema==4.14.4->botbuilder-integration-aiohttp) (1.26.15)
Requirement already satisfied: PyJWT>=2.4.0 in c:\python\lib\site-packages (from botframework-connector==4.14.4->botbuilder-integration-aiohttp) (2.6.0)
Requirement already satisfied: msal==1.* in c:\python\lib\site-packages (from botframework-connector==4.14.4->botbuilder-integration-aiohttp) (1.21.0)
Requirement already satisfied: requests<3,>=2.0.0 in c:\python\lib\site-packages (from msal==1.*->botframework-connector==4.14.4->botbuilder-integration-aiohttp) (2.28.2)
Requirement already satisfied: cryptography<41,>=0.6 in c:\python\lib\site-packages (from msal==1.*->botframework-connector==4.14.4->botbuilder-integration-aiohttp) (39.0.2)
Requirement already satisfied: requests-oauthlib>=0.5.0 in c:\python\lib\site-packages (from msrest==0.6.*->botbuilder-schema==4.14.4->botbuilder-integration-aiohttp) (1.3.1)
Requirement already satisfied: isodate>=0.6.0 in c:\python\lib\site-packages (from msrest==0.6.*->botbuilder-schema==4.14.4->botbuilder-integration-aiohttp) (0.6.1)
Requirement already satisfied: certifi>=2017.4.17 in c:\python\lib\site-packages (from msrest==0.6.*->botbuilder-schema==4.14.4->botbuilder-integration-aiohttp) (2022.12.7)
Requirement already satisfied: idna>=2.0 in c:\python\lib\site-packages (from yarl<=1.4.2->botbuilder-integration-aiohttp) (3.4)
Requirement already satisfied: cffi>=1.12 in c:\python\lib\site-packages (from cryptography<41,>=0.6->msal==1.*->botframework-connector==4.14.4->botbuilder-integration-aiohttp) (1.15.1)
Requirement already satisfied: six in c:\python\lib\site-packages (from isodate>=0.6.0->msrest==0.6.*->botbuilder-schema==4.14.4->botbuilder-integration-aiohttp) (1.16.0)
Requirement already satisfied: oauthlib>=3.0.0 in c:\python\lib\site-packages (from requests-oauthlib>=0.5.0->msrest==0.6.*->botbuilder-schema==4.14.4->botbuilder-integration-aiohttp) (3.2.2)
Requirement already satisfied: pycparser in c:\python\lib\site-packages (from cffi>=1.12->cryptography<41,>=0.6->msal==1.*->botframework-connector==4.14.4->botbuilder-integration-aiohttp) (2.21)
Building wheels for collected packages: yarl
  Building wheel for yarl (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for yarl (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [54 lines of output]
      C:\Users\pstrengholt\AppData\Local\Temp\pip-build-env-0y5swes6\overlay\Lib\site-packages\setuptools\config\setupcfg.py:293: _DeprecatedConfig: Deprecated config in `setup.cfg`
      !!

              ********************************************************************************
              The license_file parameter is deprecated, use license_files instead.

              By 2023-Oct-30, you need to update your project and remove deprecated calls
              or your builds will no longer be supported.

              See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
              ********************************************************************************

      !!
        parsed = self.parsers.get(option_name, lambda x: x)(value)
      **********************
      * Accellerated build *
      **********************
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-311
      creating build\lib.win-amd64-cpython-311\yarl
      copying yarl\quoting.py -> build\lib.win-amd64-cpython-311\yarl
      copying yarl\__init__.py -> build\lib.win-amd64-cpython-311\yarl
      running egg_info
      writing yarl.egg-info\PKG-INFO
      writing dependency_links to yarl.egg-info\dependency_links.txt
      writing requirements to yarl.egg-info\requires.txt
      writing top-level names to yarl.egg-info\top_level.txt
      reading manifest file 'yarl.egg-info\SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.cache' found anywhere in distribution
      warning: no previously-included files found matching 'yarl\_quoting.html'
      warning: no previously-included files found matching 'yarl\_quoting.*.so'
      warning: no previously-included files found matching 'yarl\_quoting.pyd'
      warning: no previously-included files found matching 'yarl\_quoting.*.pyd'
      no previously-included directories found matching 'docs\_build'
      adding license file 'LICENSE'
      writing manifest file 'yarl.egg-info\SOURCES.txt'
      copying yarl\__init__.pyi -> build\lib.win-amd64-cpython-311\yarl
      copying yarl\_quoting.c -> build\lib.win-amd64-cpython-311\yarl
      copying yarl\_quoting.pyx -> build\lib.win-amd64-cpython-311\yarl
      copying yarl\py.typed -> build\lib.win-amd64-cpython-311\yarl
      running build_ext
      building 'yarl._quoting' extension
      creating build\temp.win-amd64-cpython-311
      creating build\temp.win-amd64-cpython-311\Release
      creating build\temp.win-amd64-cpython-311\Release\yarl
      "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IC:\Python\include -IC:\Python\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" /Tcyarl/_quoting.c /Fobuild\temp.win-amd64-cpython-311\Release\yarl/_quoting.obj
      _quoting.c
      yarl/_quoting.c(196): fatal error C1083: Cannot open include file: 'longintrepr.h': No such file or directory
      error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for yarl
Failed to build yarl
ERROR: Could not build wheels for yarl, which is required to install pyproject.toml-based projects

C:\GitHub\Azure-Cognitive-Search-Azure-OpenAI-Accelerator>

Try using a linux shell. Or AZML Compute instance. Not sure about that error in Windows. You are the first to report it.

I'm having same issues on windows.

For me it solved when not using Python 3.11 but Python 3.10.8  based on https://github.com/aio-libs/aiohttp/issues/6600


Remove useActionsResult

We have stores now and can set data in one action and get it inside another, useActionsResult is used to get actions result from previous actions, it's rudiment and should be removed

@jifeon could you clarify that issue a bit more?

Now it looks like:
{
  actions: [],
  name: 'blah',
  useActionsResult: true
}

so in last action you return a promise which resolves with value, which will saved as blah. It imposes limitations:

You should have actions beside the property which you wanna parse to
Last action should return desired result

In the same time we have stores and can use action { type: 'any_type', set: 'key_name_in_storage' } at any place in parsing process and use saved value in a rule { get: 'key_name_in_storage' }
That's why I think useActionsResult is redundant and must be removed


Reloading the integration deletes the storage file with settings

When you reload the integration from the 'Integrations' page the alarmo.storage files gets deleted from the .storage folder.
Thus deleting all the configuration done in Alarmo.
Why not write the config to a YAML file in the custom_component/alarmo root folder?

HI, great integration, but when I reload the integration, all my settings are gone and I have to redo all the setting again. Is this a know bug, or is this normal behavior when reloading?

HI, great integration, but when I reload the integration, all my settings are gone and I have to redo all the setting again. Is this a know bug, or is this normal behavior when reloading?

What would you expect to happen by clicking this reload button?
I cannot influence the behaviour as far as I know.
I will try to hide this button.

What would you expect to happen by clicking this reload button?
I cannot influence the behaviour as far as I know.
I will try to hide this button.

May be reloading the integration without losing all the data! But never mind, now I know it, I won't use it! Keep up the good work! 👍🏻

May be reloading the integration without losing all the data! But never mind, now I know it, I won't use it! Keep up the good work! 👍🏻

Is there a way to copy this .file?

Is there a way to copy this .file?

This is fixed by https://github.com/nielsfaber/alarmo/commit/00e159078195f3d520b35c95063c87fc39bf62cf (will be released in v1.6.1).
Reloading will only reset the entities, not longer remove the configuration.


[EventRequest] Table 37 "Sales Line" [External] HasTypeToFillMandatoryFields

We requested this back in septemper #4199, but we are missing some of the parameters
From a newly pulled docker base app we can see the publisher is there but not with the parameters needed (see Screenshot)

Can we request does parameters so it looks like the following

Handled event is not needed in this case, you simply assign ReturnValue in OnAfter event.


Image built from Dockerfile does not run, image download from Docker Hub does...

When I rebuild the image using Dockerfile, "sessman" indicates that there is a security error when attempting to connect to VNC.  This error is not present, however, when I simply run the image in Docker Hub.  In both cases, I am using exactly the same "docker run" command parameters.
Is there anything that you added to the image on Docker Hub that is not represented in github?
Many thanks for making this available.  Of all the docker images available with xrdp on Docker Hub this is by far the most useful.
Thanks again,
Jim W.

Hi,
The image on Docker Hub is directly built from this repository by Docker Hub itself, so everything there is here.
Maybe a package update since the last time the image was built broke something, I'll need to have a look.

Okay, thanks for checking.  Let me know if I can help.
On Thu, Mar 5, 2020, 10:31 AM Jérémy WALTHER<EMAIL_ADDRESS>wrote:

Hi,
The image on Docker Hub is directly built from this repository by Docker
Hub itself, so everything there is here.
Maybe a package update since the last time the image was built broke
something, I'll need to have a look.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/frxyt/docker-xrdp/issues/1?email_source=notifications&email_token=AK6BMBK5PCI3UMAYXMSFPP3RF7VZBA5CNFSM4LCAIEB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEN6MLDA#issuecomment-595379596,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AK6BMBNPFW3Q7IZFQ6TCYGLRF7VZBANCNFSM4LCAIEBQ
.

Hello,
I just found some time to test it on my side. Everything works fine, from the local build to the execution & use of the image. But I only test with cinnamon desktop.
Which variant do you use ? Can you please paste here the logs of the error (docker output should be enough). Can you also give me the command you use to build it locally ?
Best regards,
Jeremy.

Will do.  I was using the xfce desktop.  I will test cinnamon as well.
It wasn't clear to me how to select different desktops at build time.  Is
this another environment variable.
On Sat, Mar 7, 2020, 4:55 AM Jérémy WALTHER<EMAIL_ADDRESS>wrote:

Hello,
I just found some time to test it on my side. Everything works fine, from
the local build to the execution & use of the image. But I only test with
cinnamon desktop.
Which variant do you use ? Can you please paste here the logs of the error
(docker output should be enough). Can you also give me the command you use
to build it locally ?
Best regards,
Jeremy.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/frxyt/docker-xrdp/issues/1?email_source=notifications&email_token=AK6BMBIMBPY6Y67KBHCSS5DRGI73XA5CNFSM4LCAIEB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEODYVZA#issuecomment-596085476,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AK6BMBLKDGPA33QFV6L4EULRGI73XANCNFSM4LCAIEBQ
.

You can use:
docker build -f Dockerfile -t frxyt/xrdp:cinnamon --build-arg DOCKER_TAG=cinnamon .
docker build -f Dockerfile -t frxyt/xrdp:lxde --build-arg DOCKER_TAG=lxde .
docker build -f Dockerfile -t frxyt/xrdp:mate --build-arg DOCKER_TAG=mate .
docker build -f Dockerfile -t frxyt/xrdp:xfce --build-arg DOCKER_TAG=xfce .

Any news ? Can I close this issue?

Sorry that I took so long to reply.  I will go ahead and close the issue.
I found that I was failing to map in a home directory from the host.  This caused sessman to fail whenever I restarted the image from a previously committed container.  The first run of the newly built image always succeeded, however, which was very confusing at first.
Thanks for your help!


refactor(Checkbox): use server render instead of client render

use server render instead of client render
Summary of the changes (Less than 80 chars)
简单描述你更改了什么, 不超过80个字符；如果有关联 Issue 请在下方填写相关编号
Description
fixes #4722
Regression?

[ ] Yes
[ ] No

[If yes, specify the version the behavior has regressed from]
[是否影响老版本]
Risk

[ ] High
[ ] Medium
[ ] Low

[Justify the selection above]
Verification

[ ] Manual (required)
[ ] Automated

Packaging changes reviewed?

[ ] Yes
[ ] No
[ ] N/A

☑ Self Check before Merge
⚠ Please check all items below before review. ⚠

[ ] Doc is updated/provided or not needed
[ ] Demo is updated/provided or not needed
[ ] Merge the latest code from the main branch

Summary by Sourcery
Refactor the Checkbox component to utilize server-side rendering, replacing client-side rendering logic. Update associated unit tests to align with the new rendering approach.
Enhancements:

Refactor Checkbox component to use server-side rendering instead of client-side rendering.

Tests:

Update unit tests to reflect changes in Checkbox component's rendering logic.

@sourcery-ai review

@sourcery-ai review


Pre-generate several view IDs to send with initial RPC

Background
We've encountered several instances where the logUserID and viewID found in delivery RPCs don't match up with any logged client events. This is more common for viewID. This could be caused by the mobile client failing to send some events, but we have no way of knowing if this is the case in prod right now.
Currently, the initial delivery RPC includes one pre-generated ID for each of logUserID, sessionID, and viewID. Given the number of missing viewID events, we can probably cut down on this number by pre-generating more than one of these IDs for sending with initial delivery RPC.
Proposal
Instead of the current data being passed to the delivery RPC, ie.
{
  "logUserId": "<log-user-id>",
  "sessionId": "<session-id>",
  "viewId": "<view-id>",
}

We pass the next n pre-generated IDs that the mobile client will use in sequence.
{
  "logUserId": ["<log-user-id-1>", ..., "<log-user-id-n>"],
  "sessionId": ["<session-id-1>", ..., "<session-id-n>"],
  "viewId": ["<view-id-1>", ..., "<view-id-n>"],
}

In each case "<view-id-1>" will be equivalent to the currentOrPendingViewID as currently being passed. That is, if there is currently a view ancestor ID set, this will be that ID. Otherwise, it will be the ID that will be set the next time a view is logged.
Because these IDs depend on the state of the mobile client, there may be overlaps between these IDs as the session progresses.
This should provide backends with more chances to match against an ID in logged events. This is also more of a stopgap solution until we figure out why we're missing view IDs.
Also, since the problem is worse with view IDs, we could increase only the number of pre-generated view IDs (leaving log user and session IDs as before, at one each).
{
  "logUserId": "<log-user-id>",
  "sessionId": "<session-id>",
  "viewId": ["<view-id-1>", ..., "<view-id-n>"],
}

Sign off
Work begins when sign-off is received from all of the following:

[ ] Andrew
[ ] Dan
[ ] Jin
[ ] YW

What happens if the view with view-id-1 item isn't logged, so the item is joined with view-id-2 which is logged, but view-id-2 is not related to the joined item?

There's no guarantee that the item in the delivery RPC is actually related to view-id-1 either, since at the time the delivery RPC is made, no view may exist.

Maybe I’m going about this the wrong way. Instead of logging the pending future IDs, maybe I should consider logging a view history with each batch. Like:
message MobileViewHistory {
  repeated event.View view = 1;
  int32 total_views_logged = 2;
}

message LogRequest {
  MobileViewHistory mobile_view_history = ...;
}

We can log the latest n views as a window.
This would give more context around each view and allow us to figure out which views might not be related to the RPC.

I'm going to close this issue out and open a new one to track ancestor ID history.


how to add another "start" button for another function

Gooey works well for me, I really appreciate it! thx a lot!
Now I wanna add another "start" button for another "main" function?
what should I do ? Thx !

Question is unclear, my friend.


Refactor subscribe invoices code in squeak core into a separate client class

https://github.com/yzernik/squeaknode/pull/851


[Sunshine] Installed version doesn't match running version?

Describe the bug
It appears the installed version of sunshine doesn't match the running version.
Installed:
$ rpm -q sunshine
sunshine-2024.713.205505-1.fc40.x86_64
$ ls -la /usr/bin/ | grep sunshine
lrwxrwxrwx.   2 root root           29 Jul 14 02:53 sunshine -> sunshine-2024.713.205505.copr
-rwxr-xr-x.   1 root root     21846256 Jul  8 02:11 sunshine-2024.713.205505.copr

Running:
$ sunshine --version
[2024:07:14:03:05:33]: Info: Sunshine version: 2024.629.13903.copr
$ /usr/bin/sunshine --version
[2024:07:14:03:05:47]: Info: Sunshine version: 2024.629.13903.copr
$ /usr/bin/sunshine-2024.713.205505.copr --version
[2024:07:14:03:05:51]: Info: Sunshine version: 2024.629.13903.copr

Screenshot of the web interface showing the version

The running version indeed appears to be 2024.629.13903, as that version has an issue with AMD GPUs that's been fixed on the later versions, but I can still reproduce.
It's also worth noting that the previous version, between the latest and the one it appears to be stuck in, suffered from the same problem:
$ ls -la /usr/bin/ | grep sunshine
lrwxrwxrwx.   2 root root           29 Jul 12 09:50 sunshine -> sunshine-2024.710.151651.copr
-rwxr-xr-x.   1 root root     21846256 Jul  8 02:11 sunshine-2024.710.151651.copr
$ /usr/bin/sunshine-2024.710.151651.copr --version
[gamepad] -- [xone]
[2024:07:13:02:40:10]: Info: Sunshine version: 2024.629.13903.copr

(also notice how the binary size is unchanged)
I reviewed the build logs for both versions over on Copr and they look correct.
I suspect I'm missing something fairly obvious. How can this be?
What did you expect to happen?
I expect the installed version of sunshine to match the runtime version.
Output of rpm-ostree status
$ rpm-ostree status
State: idle
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bazzite:stable
                   Digest: sha256:3c0bf8b0e58a578e34d8af30e3da10f547c782d9d3a971502948889388c51883
                  Version: 40.20240713.0 (2024-07-14T00:57:44Z)
          LayeredPackages: sunshine
            LocalPackages: lact-0.5.4-0.x86_64

  ostree-image-signed:docker://ghcr.io/ublue-os/bazzite:stable
                   Digest: sha256:406696eac5e410baa5cd9524922551c5bfa177639cdb506180926d14323d9f76
                  Version: 40.20240712.0 (2024-07-12T04:55:54Z)
          LayeredPackages: sunshine
            LocalPackages: lact-0.5.4-0.x86_64

Hardware
Standard desktop, with a Ryzen 3950X and an AMD 6900XT. Bazzite is a very recent install, with no customizations except installing LACT and Sunshine using ujust.

This behavior seems specific to Bazzite, or better, my installation of Bazzite.
On a regular Fedora 40 install everything works as expected:
$ dnf copr enable matte-schwartz/sunshine
...
$ dnf install sunshine
<installs 2024.713.205505-1.fc40 + dependencies>
$ sunshine --version
[2024:07:14:22:57:17]: Info: Sunshine version: 2024.713.205505.copr

I coincedently came across this issue and as I was installing sunshine anyway, was checking my versions.
Seeing the outputs, it is working correctly on my end, which is new-ish install (removed a month ago, so some user files may have lingered) with ujust setup-sunshine.
$ rpm -q sunshine
sunshine-2024.713.205505-1.fc40.x86_64

$ ls -la /usr/bin/ | grep sunshine
lrwxrwxrwx.   2 root root           29 17 jul 12:45 sunshine -> sunshine-2024.713.205505.copr
-rwxr-xr-x.   1 root root     22367680 17 jul 12:54 sunshine-2024.713.205505.copr

$ sunshine --version
[address_family] -- [both]
[output_name] -- [0]
[2024:07:17:12:55:58]: Info: Sunshine version: 2024.713.205505.copr

$ /usr/bin/sunshine --version
[address_family] -- [both]
[output_name] -- [0]
[2024:07:17:12:56:16]: Info: Sunshine version: 2024.713.205505.copr

$ /usr/bin/sunshine-2024.713.205505.copr --version
[address_family] -- [both]
[output_name] -- [0]
[2024:07:17:12:56:30]: Info: Sunshine version: 2024.713.205505.copr

And the web interface mentions "Version 2024.713.205505.copr" in the homepage.

This issue may stem from my misunderstanding of how Universal Blue. Could it be that layered packages are only updated when the base image is?
Regardless, I found a convoluted way to make it work, by using rpm-ostree override replace <copr url> followed by rpm-ostree apply-live --alow-replacement and restarting sunshine.
Rebooting the system immediately reverts to the previous state.

I still can't get sunshine to work on current Bazzite. It immediately core demps on startup now, and I have to run a 6 months' old snapshot. I wonder if it's actually being maintained.

I still can't get sunshine to work on current Bazzite. It immediately core demps on startup now, and I have to run a 6 months' old snapshot. I wonder if it's actually being maintained.

Should be working, definitely is on my end. The version that we ship is built on copr from source. Can you provide more details on the crash and your current hardware?

Same hardware as #1350. I just get an instant core dump, and the user systemd unit reports that but there is no more info.

I can't reproduce #1710, but the problem described in the OP persists, assuming it's not a misunderstanding on my part.
Currently, I am stuck on v2024.729.24508, which is multiple versions behind. The latest is v2024.1002.214 (released today) and the latest available on Copr is v2024.911.215654 (released a couple of weeks ago). I can get it updated if I follow the steps I described before, but as soon as I reboot, it lists v2024.1002.214, but it is actually running v2024.729.24508 per sunshine's webui.
The latest versions are more performant on my particularly setup (Linux + AMD) so I always end up doing this dance.


TypoScript format is not kept

I have a file called typoscript-lint.yml in my root directory with the following content:
paths:
  - packages/my_extension/Configuration/TypoScript
filePatterns:
  - "*.typoscript"
sniffs:
  - class: Indentation
    parameters:
      useSpaces: false
      indentPerLevel: 1
      indentConditions: true

and when running Fractor, the indentation is not kept as is. The whole file gets changed. Right now it can be configured for XML but is it also possible to configure it for TypoScript? I like to use tabs for TypoScript files

Do you mean that the typoscript-lint.yml should be read to get a configuration for this? Or do you just want some configuration options for the TS processor?
The latter should not be too hard, we just need to think about a clever structure for this config. If we just have a generic "parameter bag", this might lead to name clashes pretty soon; the option names need to have some kind of namespacing IMO.
FractorConfiguration::configure()
  ->withOptions([
    a9f\FractorTyposcript\Options::IndentationStyle => 'tabs'/'spaces',
    a9f\FractorTyposcript\Options::IndentationSize => 4,
  ]);

And I imagine the values of IndentationStyle/IndentationSize to be something like "typoscript/indentationSize" (i.e. with "typoscript" as the package prefix)

I think we should have our own config for that. Yes, the namespaced version is great. Go for it!

Hi. I agree that the options for indentation would be great, in order to allow for everyone's style (the TYPO3 Core has 2 spaces for example).

It would be great to be able to use an existing .editorconfig file as described in https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/CodingGuidelines/Index.html#cgl


Old ansible-role-oracle-java dependency

Hi,
Is there any special reason why both this role and the ansible-role-unifi-video have a dependency on ansible-role-oracle-java 0.1.21 and 0.1.20 respectively? I see that there's already version 0.5.2

no reason, can/should be updated :) - you can always override that behaviour though

Thanks. I switched to a Docker based solution, but definitely good to know it can be overridden.

fixed in latest version


updated website name from daily journal to wordnook wherever needed

What is the change?
Changed the name of website wherever needed
Related issue?
close: #744
How was it tested?
Remove this line and tell us how the code was tested.
Checklist:
Before you create this PR, confirm all the requirements listed below by checking the checkboxes [x]:

[x] Have you followed the Contribution Guidelines while contributing.
[x] Have you checked there aren't other open Pull Requests for the same update/change?
[x] Did you lint your code before making the Pull Request?
[] Have you made corresponding changes to the documentation?
[x] Your submission doesn't break any existing feature.
[x] Have you tested the code before submission?

Screenshots or Video:

/gssoc/

/level2/


add tags to turbo tasks

Description

Testing Instructions

Closes TURBO-2878

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#8038  👈
#8037
#7675
#7674
#7673
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @arlyon and the rest of your teammates on  Graphite

@arlyon Did you mean to tag Nick and I as reviewers for this PR?

No, oops. I tagged you on the other one but I swear I didn't do it twice ... Sorry 😂

Merge activity

Jul 24, 3:11 PM EDT: @arlyon merged this pull request with Graphite.


"summary" for object widget #4291

Summary
fixes #4291

display summary in ObjectWidgetTopBar when object is collapsed

when an object is collapsed, display a summary like when the object is collapsed in a list widget
Test plan
tested manually
fields:
      - label: "an object"
        name: "anobject"
        widget: "object"
        summary: '{{fields.heading}}-{{fields.content}}'
        fields:
          - {label: Heading, name: heading, widget: string, required: false}
          - {label: Content, name: content, widget: markdown }

collapsed:

A picture of a cute animal (not mandatory but encouraged)

rebased and resolved conflict


Remove admin mode aka the (reverse of the) read_only flag

This is the converse of issue #9 which we won't "fix" so we need to simplify the byu.hr.oit ruleset removing the notion of read-only.

This is also a streamline and simplify issue.


test: skip poll_duplex and poll_unidirectional on PASE

Issuing a shutdown() on IBM i PASE with parameter SHUT_WR
also sends a normal close sequence to the partner program.
This leads to timing issues and ECONNRESET failures in the
test poll_duplex and poll_unidirectional.
https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/apis/shutdn.htm
We may skip these two tests until we found alternative solutions.
Related issue -> ibmi: failed test case poll_duplex & poll_unidirectional

CI: https://ci.nodejs.org/job/libuv-test-commit/1863/

Landed in f52786b4badf82e1bfad06b52ade0397b61cd14e.


feat: Mapper stream_name glob syntax

Feature scope
Other
Description
Came across this use case today for stream_maps.
Example stream map today
    config:
      start_date: '2023-02-20'
      stream_maps:
        "employer_stats_report":
          "client_id": "config['client_id_inject']"
        "campaign_performance_stats":
          "client_id": "config['client_id_inject']"
      stream_map_config:
        client_id_inject: $TAP_INDEED_CLIENT_ID

In production we have to do this for >7 streams. Ideally this would look something like
    config:
      start_date: '2023-02-20'
      stream_maps:
        "*":
          "client_id": "config['client_id_inject']"
      stream_map_config:
        client_id_inject: $TAP_INDEED_CLIENT_ID

There's other fixes here for this problem that don't involve stream_maps but thought it was a good idea!

Also want this. I feel like the docs say it is allowed.
https://sdk.meltano.com/en/latest/stream_maps.html#applying-a-mapping-across-two-or-more-streams
I tried to apply a change based on the docs. But I do not see acc_num in the outputted model 🤷
        stream_maps:
          "*":
            acc_num: account_number
            account_number: __NULL__

What I actually want is.
        stream_maps:
          "*":
            created_at:
              record['created_at'] if record.get('created_at') and '0000'
              not in record['created_at'] and '-00' not in record['created_at'] else
              '1970-01-01 00:00:00'
            updated_at:
              record['updated_at'] if record.get('updated_at') and '0000'
              not in record['updated_at'] and '-00' not in record['updated_at'] else
              '1970-01-01 00:00:00'

But this doesn't work. I'm doing a tap mysql -> postgres. The source mysql db has a load of invalid postgres date / timestamps that I need to accomidate.
Disgustingly I have to put
        stream_maps:
          mydatabase-my_table_name:
            created_at:
              record['created_at'] if record.get('created_at') and '0000'
              not in record['created_at'] and '-00' not in record['created_at'] else
              '1970-01-01 00:00:00'
            updated_at:
              record['updated_at'] if record.get('updated_at') and '0000'
              not in record['updated_at'] and '-00' not in record['updated_at'] else
              '1970-01-01 00:00:00'

Manually for each and every table 😢 .

@visch did you ever get a good solution for this?
The docs suggest it is possible but it doesn't appear to work.

@gruckion

But this doesn't work.

Can you elaborate? I can confirm the following works:
plugins:
  loaders:
  - name: target-postgres
    variant: meltanolabs
    pip_url: meltanolabs-target-postgres
    config:
      database: postgres
      port: 5433
      host: localhost
      user: postgres
      stream_maps:
        "*":
          acc_num: account_number
          account_number: __NULL__

when piping some sample data to the loader:
cat tap.jsonl | meltano invoke target-postgres

and I do get the property mapped across all streams.
Input data
{"type": "SCHEMA", "stream": "bbva", "schema": {"properties": {"id": {"type": "integer"}, "account_number": {"type": "string"}}}, "key_properties": ["id"]}
{"type": "RECORD", "stream": "bbva", "record": {"id": 1, "account_number": "123456789"}, "time_extracted": "2024-01-01T00:00:01Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 2, "account_number": "987654321"}, "time_extracted": "2024-01-01T00:00:02Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 3, "account_number": "456123789"}, "time_extracted": "2024-01-01T00:00:03Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 4, "account_number": "321654987"}, "time_extracted": "2024-01-01T00:00:04Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 5, "account_number": "789123456"}, "time_extracted": "2024-01-01T00:00:05Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 6, "account_number": "654987321"}, "time_extracted": "2024-01-01T00:00:06Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 7, "account_number": "147258369"}, "time_extracted": "2024-01-01T00:00:07Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 8, "account_number": "963852741"}, "time_extracted": "2024-01-01T00:00:08Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 9, "account_number": "258147963"}, "time_extracted": "2024-01-01T00:00:09Z"}
{"type": "RECORD", "stream": "bbva", "record": {"id": 10, "account_number": "741369852"}, "time_extracted": "2024-01-01T00:00:10Z"}
{"type": "SCHEMA", "stream": "banamex", "schema": {"properties": {"id": {"type": "integer"}, "account_number": {"type": "string"}}}, "key_properties": ["id"]}
{"type": "RECORD", "stream": "banamex", "record": {"id": 11, "account_number": "852963741"}, "time_extracted": "2024-01-01T00:00:01Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 12, "account_number": "369147258"}, "time_extracted": "2024-01-01T00:00:02Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 13, "account_number": "159753486"}, "time_extracted": "2024-01-01T00:00:03Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 14, "account_number": "486231579"}, "time_extracted": "2024-01-01T00:00:04Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 15, "account_number": "753159624"}, "time_extracted": "2024-01-01T00:00:05Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 16, "account_number": "624897531"}, "time_extracted": "2024-01-01T00:00:06Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 17, "account_number": "531246879"}, "time_extracted": "2024-01-01T00:00:07Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 18, "account_number": "798512346"}, "time_extracted": "2024-01-01T00:00:08Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 19, "account_number": "246835791"}, "time_extracted": "2024-01-01T00:00:09Z"}
{"type": "RECORD", "stream": "banamex", "record": {"id": 20, "account_number": "135792468"}, "time_extracted": "2024-01-01T00:00:10Z"}

Closing (via #1888), refer to https://github.com/meltano/sdk/issues/2602 or create a new issue.


[RFC]: add @stdlib/math/base/special/nanmax

Description
This RFC proposes adding the package @stdlib/math/base/special/nanmax. If one operand is NaN, the other operand is always returned; otherwise, perform normal maximum (e.g., by calling @stdlib/math/base/special/max).
var m = nanmax( 3.0, 4.0 );
// returns 4.0

m = nanmax( NaN, 4.0 );
// returns 4.0

m = nanmax( 3.0, NaN );
// returns 3.0

m = nanmax( NaN, NaN );
// returns NaN

Package: @stdlib/math/base/special/nanmax
Alias: nanmax
Related Issues
None.
Questions
No.
Other
No.
Checklist

[X] I have read and understood the Code of Conduct.
[X] Searched for existing issues and pull requests.
[X] The issue name begins with RFC:.

I'd like to work on this. @kgryte

@RidamGarg I suggest first submitting a PR for #2318 and getting that merged, before moving on to work on this one.

I generated the PR for #2318 issue. Can you please review that?

@kgryte Should I start working on this now?

Yes, go for it!

@kgryte Generated The PR https://github.com/stdlib-js/stdlib/pull/2358


nginx: Tweak nginx settings to customize 5xx page.

Tweaked the nginx.conf to map error status with their error message and
enabled ssi (server side include) to pass variables to the resulting page.
Included the imports into the 5xx.html to print error code and it's
message. Tweaked the webpack config to preserve comment in the error page
to preserve the ssi.
Fixes #14611.
Testing Plan:
Manually add a location in puppet/zulip/files/nginx/zulip-include-frontend/app
to return either 502/503/504 error.
Eg:-
location /test-path.html {
    return 502;
}

Or visit my test instance here.
GIFs or Screenshots:

So, an important part of our goals for this was to have a JSON format response for the 500/502 errors under /api/v1/... URLs, so that our API always returns JSON-format responses even if the server is down.  I guess for that, we'd just enter the JSON response in the nginx configuration file?

I guess https://blog.adriaan.io/one-nginx-error-page-to-rule-them-all.html is a helpful resource; we should compare what we're doing to that.  But it doesn't address the JSON-format issue.

Maybe https://aaronparecki.com/2014/09/03/28/custom-json-503-error-page-nginx-http-content-type-headers covers how to do what we're imagining here for the API.

@timabbott Yeah, I have referred to the "one page to rule them all" blog post and to address the json requirement, I guess we can send a json response along with error code like here - https://gist.github.com/weapp/99049e69477f924dafa7 ?

Just as a reminder, the main goal is to provide JSON format 500/502 errors for the API URLs (/api/v1/), which I don't think should require the SSI piece here.

@timabbott Oh okay, I guess I'll have to reset the branch. Can you point me where to look for API testing especially 5xx?

I think if you run a Zulip production server (so that nginx is running) and then just supervisorctl stop all, you'll get 502 requests everywhere from nginx.  You can then make API requests using python-zulip-api or perhaps better, the curl instructions on our website.


feat: Add Uncountable

Adds the Uncountable class to Countable/Defs and some basic API.

More to follow, but I'd like to get feedback on the way of writing first!

Do you have a link to the other things you want to add?

Thanks, I’ll make the adjustments soon.
short background:
the reason why I’m implementing this is that I’m working on Lindelöf spaces in #9107. I’d like to introduce the cocountable filter (analogous to the way the cofinite filter is used for Compact spaces) and it came up in discussions on Zulip that, rather than writing \neg Countable at some points in the definitions, it might be nicer to have Uncountable.
As such I’ll mirror the contents from Countable/Basic for Uncountable, but after that I’ll probably only add whatever comes up that I need to define cocountable filters (but I’ll try to prove and add sufficiently general versions of whatever I’m using).

I'm done working on this branch. I think that this PR needs the instance for functions I posted on Zulip and the docstring fix suggested by Alex; otherwise it's ready. The instance should probably go to Data/Fintype/Card, because you'll need Infinite.natEmbedding.

Great, will try to do this in a few days; if anyone has time and wants to add them, feel free of course! I’ll send a heads-up when I continue working on.

@urkud Do you mean the instance
[Uncountable α] : NeBot (cocountable α)
that you suggested in Zulip, or do you mean another one? This one requires the definition of the cocountable filter from #9200 which is still pending, and requires filters, so I think Data/Fintype/Card may be too far upstream (as I'll need to get NeBot, which comes from Filter/Basic). Perhaps I should include it in the PR for Filter/Cocountable when this PR gets merged?

Thanks! :tada:
bors merge


Adds keycloak deployment (playbook, role)

Playbook and role to support deployments of keycloak in HA mode on 2 (or more) servers

Closed and replaced with #76


Add Branding to Tenant Level Email Templates

Is your feature request related to a problem? Please describe.
Currently, branding related content are hardcoded in the email templates even though the backend supports dynamically applying branding configs to email templates. Therefore, we need to add branding capability to the tenant level email templates in product-IS.
Describe the solution you would prefer

Email templates should be updated with branding related placeholders.
Default branding configs should be provided to be used when no branding preferences have been published.
Email template preview in the Identity Server Console App should be updated to resolve the branding related placeholders when displaying.

Weekly update summary - 31-08-2022
Current Status

Implementation - Done
PR for the email preview is sent.

Next Steps

PRs to be reviewed and approved

Status: On Hold


Internal - Refactor AstRunner to support parsing more than classes

Right now the whole AstRunner part of the codebase presumes that we are parsing classes only. This assumption runs deep across the codebase.
Right now we have an issue requesting support for parsing function https://github.com/qossmic/deptrac/issues/331
Also, there is another issue requesting support for parsing global variables/superglobals https://github.com/qossmic/deptrac/issues/473
After a Slack discussion with @dbrumann, I created this issue, where we can discuss what/how needs to be changed.
cc @smoench, @slde-flash we would welcome your input on this, as you are more familiar with this part of the codebase.

In theory it shouldn't be that hard. The analyzing part always starts with a file (AstFileReference) where all class references (AstClassReference) are being added. We could add also additional information to the AstFileReference such as functions or global variables. PHPParser gives us the information we just need to collect them. We probably have to add two visitors  for analysing functions and global variables. The FileReferenceBuilder needs to be extended to adapt those information.

From what I saw this would be exactly my approach as well. My biggest issuer right now is with Qossmic\Deptrac\AstRunner\AstMap\ClassLikeName. It is heavily used in defining dependencies and also in processing output. This would need to change and dependencies would have to be more agnostic about the types. Only then I think we can add the new visitors and have them properly propagated into the rest of the package. As since it would be quite a big change a @dbrumann took over the maintenance only recently, he wanted for you @smoench to weigh in on this.

I would even argue that already we should have 2 visitors. The ClassReference we have now and UseReference.
Counting use statements is another chapter in and of itself.

The implementation is problematic as mentioned https://github.com/qossmic/deptrac/pull/571#issuecomment-862087004. It is also bundled with ClassReferenceVisitor while having absolutely nothing to do with the class. It only affects the scope. I could see at most  - FileA depends on ClassB (from FileB) via use statement
It is "near impossible" to resolve correctly  - even Nikic/PHPParser does not make the distinction between namespace and class use https://github.com/nikic/PHP-Parser/blob/master/lib/PhpParser/Node/Stmt/Use_.php#L15. This resulted in the issue  https://github.com/qossmic/deptrac/issues/536
It is not intuitive for users as demonstrated by https://github.com/qossmic/deptrac/issues/569, where I completely understand that if I have exactly 1 dependency, I would expect it to be fully qualified usage of another class and not unused use statement.

These are just examples. I would therefore never argue for not ever counting use statements.  That would be a breaking change though.
All of the issues (about use statements and others) be IMHO resolved following steps:

using dedicated *Visitors.

ClassReferenceVisitor - remove counting use statements
UseReferenceVisitor - count use statements separately
FunctionReferenceVisitor - function definitions
SuperglobalReferenceVisitor - usage of superglobals.

Expanding AstFileReference to include the result of these Visitors.
Rewrite DependencyInterface and BasicEmitter to work with general "name tokens" instead of ClassLikeName

I just noticed Tim is probably no longer using his old handle, so another friendly ping to @timglabisch for your thoughts on this

as far as I remember this is not so trivial. but quite feasible. if I remember correctly you would have to exchange AstClassReference for something that works with the FQN.
For example if you would have a file like:
<?php

namespace foo\Bar;

function abc() {

}

you could map this to foo\Bar\abc().
this get ultra complicated if you would like to support something like this:
`
<?php

namespace foo\Bar;

return function() {

}

// or

return $someVar;

any good examples why this feature is important?

you could map this to foo\Bar\abc().
This is exactly how I imagine the "name token" would look like for the function

this get ultra complicated if you would like to support something like this:
I agree. But I don't think this behaviour is supported even for (anonymous) classes. IMHO there is no reason for functions to be exceptional in that regard.

any good examples why this feature is important?
For variables, I think superglobals are quite an important use case. For functions:

Functional programming paradigm written applications in general
named function are also often created to substitute missing language features.

@patrickkusebauch can you give me an example for the superglobal case?

@timglabisch Sure. For example, in a "traditional" MVC/MVP architecture, I might want to constrain the usage of GET/POST/COOKIE/FILES/REQUEST superglobals to Presenters only. While I might not mind if ENV or SERVER are accessed in the Model.

i am not sure if we really need support for superglobals, deptrac is primary written for well structured codebases to keep an eye on the layers in larger projects. for ages i didn't saw a superglobal in the wild, most times frameworks just make sure you don't access them. From my perspective i would try to use tools like psalm to make sure that really no one is using superglobals at all.

I tend to agree. I only use superglobals in the bootstrap file of the framework, when I need to change configuration base on (mostly) ENV values. Otherwise, I am accessing via the framework. I am just being the devil's advocate for the open issue here.

but supporting functions and constants would be a great addtion.
here are some examples:
const FooXXXXX = "bar";

class FooXXXXX {

}

function A() {
    function B() {

    }
}

trap: FQN for the Class and the Constant could overlap.

Either way, if we want to support anything else other than classes, it requires rewriting DependencyInterface and BasicEmmiter as outlined above. Then it can be added to AstFileReference

Anyways, to move this forward a little bit. Does anybody see anything wrong with this approach?

Create new TokenLikeName interface for ClassLikeName
Make DependencyInterface and BasicEmmiter use this interface instead of ClassLikeName
For each new supported type add:

class (Function/Constant/Superglobal)LikeName implements TokenLikeName
{
  public function toString():string {
    return ''; //text representation of the token for console output
  }
}

class (Function/Constant/Superglobal)ReferenceVisitor extends NodeVisitorAbstract
{}

and add the result of the visitor to AstFileReference?
I think this could work quite nicely. WDYT?

I think, we are all in agreement that supporting functions/constants would be nice and if superglobals easily come with and then I won't mind.
My only requirement is, that we do this in at least 2 steps:

Introduce the new interface and use that
Introduce the functionality one by one (in any order):

function
constant
superglobals

As far as I can tell, introducing the interface should not have any BC impacts, at least not for what we consider BC, e.g. changing the commands in any user facing way (input, output) or changing the depfile. It would not be the end of the world, but that is something I would like to avoid with such a big change to make it easier to compare when we notice any side effects.

Just chiming in to say: I would use this heavily as well! View files are "procedural" but (in my case) should have some of the tightest restrictions. I'm just getting started with deptrac and a refactor seems like it would be over my head, but let me know how I can help!

@MGatner I am already working on this heavily, so don't worry it is coming. To me, the biggest help would be unintuitively you picking up other issues. If I can focus solely on this, I would finish it faster than me working on several issues simultaneously.

@patrickkusebauch Loud and clear! Still digging in over here but once I have my head around it I will take a peek at what is out there. Thanks for your work, I look forward to what you've got!

Suggested token names to avoid confusion in the output:
class     - as is
function  - functionName()      <-- note the bracket at the end
variable  - $variableName       <-- note the dollar sign at the beginning


How to / best practice pattern for calling async behavior when already in a reducer?

Sorry to log this as an issue, but I cannot find an explanation in the guide.
In a reducer:
function reducer(){
  if (foo !== null) {
    state.message = 'foo loaded'
  } else {
    doSomethingAsync(state, send)
    state.message = 'loading foo'
  }
  return state
}

This is where doSomethingAsync would otherwise be under effects and then call another reducer to update the message when foo is loaded, but I would need to

call it directly from this point (eg model.effects.doSomethingAsync) and
somehow pass it send so that it could notify when finished (not an option since the main difference between reducers and effects seem to be that reducers are not supplied with send.

I could move this logic into the view and then if foo is not loaded, send an action to call a reducer specifically to indicate loading -and- another to call an async function, but this just moves the logic into and doubles the length of the code in my view versus a single action when a button is clicked...
Would love a little guidance on this, thanks!

Hello! If I'm understanding you correctly, you want to show a loading indicator, execute asynchronous logic, and turn off the loading indicator when it's finished. This is a common use case and I agree we should have more examples of it. I could probably find some examples in the wild but I'm on my phone so I may have to come back to do that.
What you want to do is use an effect, and have the effect call reducers using send. The final argument you give send is a callback that's executed when whatever action you're sending is completed. Usually you just pass this the done callback but you can also write your own callback function. For instance (pardon typos):
effects: {
  fetch: (data, state, send, done) => {
    send('setLoading', () => {
      http('/url', (err, response, body) => {
        send('receive', body, done)
      }
    }
  }
},
reducers: {
  setLoading: (data, state) => ({ isLoading: true }),
  receive: (data, state) => ({ items: data, isLoading: false })
}

Might make sense to use a separate send to turn off the reducer, at which point you enter callback hell, and something like run-series from the async library can help. Hope this helps!

OK that helps a lot, thanks!
On Tue, Aug 9, 2016, 15:04 Tim Wisniewski<EMAIL_ADDRESS>wrote:

Hello! If I'm understanding you correctly, you want to show a loading
indicator, execute asynchronous logic, and turn off the loading indicator
when it's finished. This is a common use case and I agree we should have
more examples of it. I could probably find some examples in the wild but
I'm on my phone so I may have to come back to do that.
What you want to do is use an effect, and have the effect call reducers
using send. The final argument you give send is a callback that's executed
when whatever action you're sending is completed. Usually you just pass
this the done callback but you can also write your own callback function.
For instance (pardon typos):
effects: {
fetch: (data, state, send, done) => {
send('setLoading', () => {
http('/url', (err, response, body) => {
send('receive', body, done)
}
}
}
},
reducers: {
setLoading: (data, state) => ({ isLoading: true }),
receive: (data, state) => ({ items: data, isLoading: false })
}
Might make sense to use a separate send to turn off the reducer, at which
point you enter callback hell, and something like run-series from the async
library can help. Hope this helps!
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/yoshuawuyts/choo/issues/218#issuecomment-238706744,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AHC8CnqgZS4Bd7-O1-d2_TFiGfiDvwx7ks5qePlmgaJpZM4JgWWa
.

@timwis So if I want to tween a style like opacity from 0 to 1, I can use an effect?   Since choo use real dom diff, I think I cannot use TweenMax outside of choo.

@xialvjun I'm not familiar with "TweenMax," but if you'd like to change the opacity of an element during "loading," the approach above should work. In your view, you would have something like:
const view = (state, prev, send) => {
  const opacity = state.isLoading ? 1 : 0
  return html`<div style="opacity: ${opacity}"></div>`
}

You could also render the <div> only if isLoading is true.

Closing because choo@5 will introduce a new API. See #425 for the merged PR. Thanks!


I wonder if this collision detection is equivalent to assigning all_agents_positions_matrix all values to 0I wonder if this collision detection is equivalent to assigning all_agents_positions_matrix all values to 0

collisions = [all_agents_positions_matrix[self.pursuer_layer.get_position(agent_id)[0],
self.pursuer_layer.get_position(agent_id)[1]] - 1
for agent_id in range(self.n_pursuers)]
in
def get_collision_reward(self):
"""
Added in Version-SOP.
"""
pursuer_position_matrix = self.pursuer_layer.get_state_matrix()
    if self.surround:
        # No collisions are allowed
        evader_position_matrix = self.evader_layer.get_state_matrix()
        all_agents_positions_matrix = pursuer_position_matrix + evader_position_matrix
    else:
        # Collisions with evaders are allowed, while that with other pursuers are prevented.
        all_agents_positions_matrix = pursuer_position_matrix

    collisions = [all_agents_positions_matrix[self.pursuer_layer.get_position(agent_id)[0],
                                              self.pursuer_layer.get_position(agent_id)[1]] - 1
                  for agent_id in range(self.n_pursuers)]

    self.n_agents_collide_with_others_per_multiagent_step = np.count_nonzero(collisions)
    self.n_collision_events_per_multiagent_step = np.count_nonzero(np.maximum(all_agents_positions_matrix - 1, 0))

    collision_rewards = self.collision_reward * np.asarray(collisions)

    self.n_collision_with_obstacles = np.sum([pursuer.collide_with_obstacle for pursuer in self.pursuers])

    return collision_rewards

The agent-agent collision is defined as that more than one agents exist in one position of the matrix (grid world). And the total number of collisions occur in one time step is the summation of all collisions in all positions.

The agent-agent collision is defined as that more than one agents exist in one position of the matrix (grid world). And the total number of collisions occur in one time step is the summation of all collisions in all positions.


My Telegram Is @Solisune Or Solis Une

When I first used this I had no troubles, worked perfectly well and levelled up my pokemon by 60 levels, (also upped my Mee6 level ;3) but sadly the next day I couldn’t run it for more than a minute without getting interrupted by Mee6...is there a way to slow down the script?
5* Would Recommend @Qwerty-Space
Edit: I’m using Hotkey

Yup. There's two ways to slow it down, the hi or in between messages, and the timer in between loops. It should be commented, so open up the script in your text editor (notepad++, sublime, VSCode) and change those values

Much Appreciated! My laptop lags at times so it builds up the default emoji message meaning it comes out with like 20 at once! I managed to find an alternative way to slow it down, but will go into the script if I need to in the end :3


Feature request: assign new trains to group with same schedule

Often I want to bulk add trains with the same schedule. It would be nice if, like the feature that auto-creates groups for trains with the same schedule, there was a way to bulk-assign these new trains to the existing group with that same schedule. Either automatically, or with a button that bulk assigns all trains with a schedule to a specified group.

There is a button to create groups based on schedule when you don't have any groups in the overview GUI, but that functionality is not available when there are already existing groups. I will look into making it usable at any time.

So, reading this again, I'm not sure exactly what you're looking for. You can get this already by using shift right-click and shift left-click to copy/paste the schedules, which also copy/pastes the group. You can set the group on one of the trains, then copy/paste it to the others.

You are right, this is a minor convenience feature for a fairly niche scenario: where you have several existing trains in the network with the same schedule. For new trains you can copy/paste them into groups. I simply forgot to do this for a handful of trains and then had to track them down, which is annoying when you have dozens of trains with the same schedule.


Cleanup polygon clipping

[x] Fix/cleanup/remove PolygonNichollLeeNichollNicol
[ ] Fix/cleanup/remove PolygonQuickClip

https://github.com/zellige/zellige/commit/680832c82ea60ff75c33362fa387d134452e72a6


remove "who am I" slide from best-practises deck?

When using the best-practices deck for my own presentations as a teacher, the "Who am I" slide is misleading as that's not me. :)
Any reason, it is in there? If not, I can make a PR to remove it.

Oh, I left that in, my mistake, I'll replace it with a template.

Fixed by https://github.com/ansible/lightbulb/pull/343, thanks!


Issue with k8s.io/docs/tasks/configure-pod-container/migrate-from-psp/

This page would be more helpful if it listed actual PodSecurityPolicy YAML corresponding (to the extent possible) to the new baseline and restricted levels.

@jglick maybe if that page linked to the example PSP list in https://kubernetes.io/docs/concepts/security/pod-security-standards/#policy-instantiation? Would that help?
(BTW, those “levels” aren't entirely new - the 3 pod security standards have been in Kubernetes docs since May 2020)

Yes, that is exactly what I was looking for. Adding a link would be helpful.

/sig docs
/sig security
/triage accepted
/language en
/priority backlog

There is https://kubernetes.io/docs/reference/access-authn-authz/psp-to-pod-security-standards/ which is probably good enough. I still find it somewhat clearer to just see stock PSP YAML examples so that you can check whether an existing PSP resources was simply copied from one of these. Unfortunately the link you referenced in https://github.com/kubernetes/website/issues/30823#issuecomment-1006141653 is no longer useful because the links to the PSP example files (though not the files themselves) was deleted: https://github.com/kubernetes/website/pull/33512#discussion_r875029058

There's a technical blocker to having example PodSecurityPolicies in the current docs: we validate the example manifests, and PSP is no longer part of Kubernetes.


How to use Option<String> as an Interface field type?

Hello,
I'm trying to use Interface to abstract a group of objects which all a nullable string field. This is what I tried:
#[derive(SimpleObjecct)]
struct MyObjectA {
    my_string: Option<String>,
}

#[derive(SimpleObjecct)]
struct MyObjectB {
    my_string: Option<String>,
}

#[derive(Interface)]
#[graphql(
    field(name = "my_string", ty = "Option<String>")
)]
enum MyInterface {
    MyObjectA(MyObjectA),
}

However, the compiler complained:
error[E0277]: the trait bound `std::option::Option<std::string::String>: From<&std::option::Option<std::string::String>>` is not satisfied
   --> graphql_schema/src/types.rs:356:10
    |
356 | #[derive(Interface, Serialize)]
    |          ^^^^^^^^^ the trait `From<&std::option::Option<std::string::String>>` is not implemented for `std::option::Option<std::string::String>`, which is required by `&std::option::Option<std::string::String>: Into<std::option::Option<std::string::String>>`
    |
    = note: required for `&std::option::Option<std::string::String>` to implement `Into<std::option::Option<std::string::String>>`
    = note: this error originates in the derive macro `Interface` (in Nightly builds, run with -Z macro-backtrace for more info)

Is there anything I missed? or is this not supported?

#[derive(Interface)]
#[graphql(
    field(name = "my_string", ty = "&Option<String>") /// <-------- &Option<String>
)]
enum MyInterface {
    MyObjectA(MyObjectA),
}


Add Brad Johnson to websites as a judge

Info has been added to CityCamp but I can't make the page any better without using page builder

. I made a quick and dirty table for it. Looks decent. I can make it 3 rows
if you want.
On Wed, Sep 27, 2017 at 12:38 PM, Chris Mathews<EMAIL_ADDRESS>wrote:

Info has been added to CityCamp but I can't make the page any better
without using page builder
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/codeforraleigh/NCOpenPass/issues/754#issuecomment-332581746,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADgoVx-9mgnOddsosM-jBLU6rIFulNClks5smnoGgaJpZM4Pi4DD
.


How to calculate the model's flops when I use tensorflow?

Click to expand!
Issue Type
Support
Source
source
Tensorflow Version
tf 2.8
Custom Code
Yes
OS Platform and Distribution
No response
Mobile device
No response
Python version
No response
Bazel version
No response
GCC/Compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
No response
Current Behaviour?
I don't find a good way to calculate the model's flops by tensorflow.

Standalone code to reproduce the issue
I don't find a good way to calculate the model's flops by tensorflow.

Relevant log output
I don't find a good way to calculate the model's flops by tensorflow.

Check:
https://github.com/keras-team/keras/issues/16699
https://github.com/keras-team/keras/issues/17273

@ljw-struggle
Could you please find the gist of work around here and refer to the above comment and similar issue. Let us know if it helps.
Thank you!


Enable students to view the grades

User Story
As a student, I want to view my grades on the platform so that I can track my academic performance and identify areas where I need improvement.

User Story
As a student, I want to view my grades on the platform so that I can track my academic performance and identify areas where I need improvement.
Detailed Description
The feature should allow students to access their grades through their dashboard on the platform. This should include grades for all their courses, along with relevant statistics like average grades, highest and lowest grades, and perhaps a comparison with class average. The grades should be updated in real-time as they are entered by instructors or administrators.
Task List

[ ] Implement a 'Grades' section in the student dashboard.
[ ] Develop backend logic to fetch student grades from the database.
[ ] Ensure grades are updated in real-time.
[ ] Create a UI component displaying individual course grades, overall average, and other statistics.
[ ] Implement access control to ensure students can only view their own grades.
[ ] Write unit tests for new backend functions.
[ ] Conduct UI tests to ensure the grades page is responsive and user-friendly.
[ ] Document the feature for user help guides.

Acceptance Criteria

Student can navigate to the 'Grades' section from their dashboard.
Student can see a list of all their courses along with the grades for each.
Student can see an overall average grade calculated from all their courses.
The 'Grades' section should update in real-time after grades are posted or changed.
The feature complies with all relevant privacy and security regulations.

Acceptance Tests

Log in as a student and navigate to the 'Grades' section. All current courses with corresponding grades should be listed.
Update a grade as an instructor/admin, then verify that the change is reflected in the student's 'Grades' section immediately.
Check responsiveness and clarity of the grades display on different devices and screen sizes.
Attempt to access another student's grades to ensure proper access control is enforced.

Labels

Enhancement
User Experience
Backend
Frontend
Testing
Documentation


Adding Birthday CountDown Timer

Project title
Birthday CountDown Timer
Project Description
A CountDown Timer will be set for every dates and it wishes you Happy birthday.
Please assign this to me. Im a contributor at GSSoC'22.
Stack:
And in order to tick the check box just but x inside them for example - [x] like this. Please delete options that are not relevant.

[x] Html
[x] CSS
[x] JavaScript
[ ] ReactJS

@Nanshi29 you can start working on this issue.


subcommand help did show global options.

My urfave/cli version is
V2.27.1
Checklist
Dependency Management

Describe the bug
Help for subcommand does not show global options, this can lead to confusion if global flag is required because when call subcommand, it always show help of subcommand instead of running it. And you will never know why it does not run subcommand and always show subcommand help.
To reproduce
package main

import (
	"fmt"
	"os"

	"github.com/urfave/cli/v2"
)

func main() {
	app := &cli.App{
		Flags: []cli.Flag{
			&cli.StringFlag{
				Name: "s",
				Required: true,
			},
		},
		Commands: []*cli.Command{
			{
				Name:  "add",
				Usage: "add a task to the list",
				Flags: []cli.Flag{
					&cli.IntFlag{
						Name: "i",
					},
				},
				Action: func(cCtx *cli.Context) error {
					fmt.Println("add")
					return nil
				},
			},
		},
	}
	app.Run(os.Args)
}

Observed behavior
go run main.go add
NAME:
   main.exe add - add a task to the list

USAGE:
   main.exe add [command options] [arguments...]

OPTIONS:
   -i value    (default: 0)
   --help, -h  show help

If run subcommand, it will show help of add instead of running it. Because no global option in the subcommand help output, you never know that is caused by missing a required global option "s". If I set global option to not required, then subcommand add will be executed.
Expected behavior
When run help subcommand, it should show global options.

@yorkz1994 This is a duplicate of #734 . We dont have support for this in v2. If you want to push a PR onto v3 with this support I will be glad to review.


TDLib version 1.6.0

Please, can you update TDLib version to 1.6.0.
Thank you!

i spent alot, alot of hours trying to make this lib work..  some attributes are declared as INT, and now they are STRING...
i gave up =(

new release based on the last version of TDLib after #7


Update Byte Buddy to 1.9.11

Codecov Report

Merging #545 into master will increase coverage by 0.57%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master     #545      +/-   ##
============================================
+ Coverage     62.98%   63.55%   +0.57%
  Complexity       68       68
============================================
  Files           180      178       -2
  Lines          6775     6687      -88
  Branches        773      765       -8
============================================
- Hits           4267     4250      -17
+ Misses         2248     2180      -68
+ Partials        260      257       -3

Impacted Files
Coverage Δ
Complexity Δ

...co/elastic/apm/agent/report/ApmServerReporter.java
51% <0%> (-8%)
0% <0%> (ø)

...gent/okhttp/OkHttp3ClientAsyncInstrumentation.java

...agent/okhttp/OkHttpClientAsyncInstrumentation.java

...java/co/elastic/apm/agent/bci/ElasticApmAgent.java
75.47% <0%> (+1.88%)
0% <0%> (ø)
:arrow_down:

...c/apm/agent/bci/MatcherTimerLifecycleListener.java
93.75% <0%> (+18.75%)
0% <0%> (ø)
:arrow_down:

.../elastic/apm/agent/bci/bytebuddy/MatcherTimer.java
93.75% <0%> (+31.25%)
0% <0%> (ø)
:arrow_down:

Continue to review full report at Codecov.

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


tests: workq: Add timeout multiplier parameter

Add TEST_WORK_ITEM_WAIT_MS and TEST_SUBMIT_WAIT_MS config parameters
instead of hardcoded timeouts at kernel.workqueue test to allow its customization on slow simulated platforms.

Can we get some clarity on what the requirement is here and add that to the commit message?
What "slow platforms" need to be supported?

The proposed change currently is not bound to some specific platform, it was discovered on one of our internal simulated platforms where it runs slower than the hardcoded timeouts, so this fix might help to enable the test wherever it fails the same way.

Can't we do that in a more generic way, maybe by making the general timeout longer, by doing less work in the timeouts, or for extra credit maybe by auto-detecting CPU-vs-tick speed and selecting a dynamic rate value.

I thought the simple parametrization would be enough and backward compatible.


x/build: build.golang.org and farmer.golang.org are unavailable

We're aware of a known issue that https://build.golang.org/ and https://farmer.golang.org/ are unresponsive right now, and I'm looking into it.
CC @golang/release.

This should be mitigated now. The health checks became unhappy, but they're happy in the latest coordinator version.
I'll look a bit more, but otherwise close this after some time to be revisited if this problem reoccurs.

It's been stable; nothing more to do for this for now.


Disable linter vet --composites=false

I am trying to disable --composites=false for vet so trying to run with something like --linter=vet:vet:--composites=false but I'm getting

gometalinter WARNING: exec: "vet": executable file not found in $PATH

--linter=errcheck:errcheck:-ignore=Write works for example. If I use --linter=vet:go tool vet:--composites=false it panics.
Thanks for your help.

Have a look right down the bottom of the README, there's an example:
gometalinter --linter='vet:go tool vet -printfuncs=Infof,Debugf,Warningf,Errorf {paths}:PATH:LINE:MESSAGE' .

Arg sorry about that, I missed that one.
Thanks