dep not work in shared folder between windows and virtualbox

What version of dep are you using (dep version)?
dep:
 version     : devel
 build date  :
 git hash    :
 go version  : go1.9.2
 go compiler : gc
 platform    : linux/amd64

What dep command did you run?
# dep init
waiting for lockfile /vagrant_data/workspace/wigo/pkg/dep/sm.lock: Lockfile created, but doesn't exist

What did you expect to see?
I need to output normally, it can't work
What did you see instead?
I see the error output to show something goes wrong. I doubt if it's about the shared folder to cause path error or something. please fix it

I confirm that I have the same problem.
dep works on the host machine, but waits for the lock on the VM (vagrant + virtualbox):
waiting for lockfile /home/vagrant/host/go/pkg/dep/sm.lock: Lockfile created, but doesn't exist

In my Vagrantfile, I have the following config line for the share folder:
  config.vm.synced_folder ENV["HOME"] + '/go', "/home/vagrant/host/go",
      owner: 1000, group: 1000

I tried removing all the dep generated files and redo a dep init from the VM, but I get the same waiting message even for initialization.

i meet the same wrong： lockfile /home/www/gowork/pkg/dep/sm.lock: Lockfile created, but doesn't exist ，i can not handle it。
does any one solve this trouble。please leave a message. thanks a lot。i am run in vagrant

I have same problem
vagrant@vagrant-ubuntu-trusty-64:/go/src/github.com/tendermint/tendermint$ dep ensure waiting for lockfile /go/pkg/dep/sm.lock: Lockfile created, but doesn't exist waiting for lockfile /go/pkg/dep/sm.lock: Lockfile created, but doesn't exist
dep version:
vagrant@vagrant-ubuntu-trusty-64:/go/src/github.com/tendermint/tendermint$ dep version dep:  version     : devel  build date  :   git hash    :   go version  : go1.9.2  go compiler : gc  platform    : linux/amd64  features    : ImportDuringSolve=false

Same problem when trying to use a shared folder as DEPCACHEDIR (Docker toolbox on MacOS X). Maybe the problem is due to the fact dep tries to create an hard link (see here and that's not supported by VBox (see https://www.virtualbox.org/ticket/818).
For my use case the solution was to avoid setting DEPCACHEDIR to a shared folder.

Anyone found solution for this issue?
I am also using shared folder on mac and ubuntu and am getting the same error while doing dep ensure

Any fixes? I hit same issue with shared folders between macOS and Linux on VMWare Fusion 10.

@davide-romanini So you solve it on MacOS?

i fix this problem with follows command：
env DEPNOLOCK=1 dep init-v

Same problem here with an Ubuntu 18.04 VM on top of Win10. GOPATH is in a VirtualBox shared folder.
dep is in an inifinite loop of waiting for the lockfile to be created.
$ dep ensure -v waiting for lockfile /vagrant/go/pkg/dep/sm.lock: Lockfile created, but doesn't exist waiting for lockfile /vagrant/go/pkg/dep/sm.lock: Lockfile created, but doesn't exist ...
`$ dep version
dep:
version     : v0.4.1
build date  : 2018-01-24
git hash    : 37d9ea0a
go version  : go1.9.1
go compiler : gc
platform    : linux/amd64
`
I found that dep automatically deletes the lockfile (/vagrant/go/pkg/dep/sm.lock) even if it is manually created beforehand, or even if it is created manually from another terminal while dep is waiting in its loop.

I tried to use the @kispaljr command but I got command not found regarding init-v, so I used env DEPNOLOCK=1 dep ensure -v.

Dep was officially deprecated earlier this year, and the proposal to archive this repository was accepted. As such, I'm closing outstanding issues before archiving the repository. For any further comments, please use the proposal thread on the Go issue tracker. Thanks!


Issues With Sign up

Can't sign up it may be because of server issues.

me too i am getting the problem also

me too same problem

Just put the secure to false when running it on your localhost. It will work, same with signUp.
export const signIn = async ({ email, password }: signInProps) => {
    try {
      const { account } = await createAdminClient();
      const session = await account.createEmailPasswordSession(email, password);

      cookies().set("appwrite-session", session.secret, {
        path: "/",
        httpOnly: true,
        sameSite: "strict",
        secure: false,
      });

      return parseStringify(session);
    } catch (error) {
      console.error('Error', error);
    }
  }


Is TimeRange [start, end)?

If I have a number of TimeRanges that I wish to abut on a timeline perfectly adjacently, at a frame rate of 1.0, I assume this is conceptually legit:
start = TimeRange(RationalTime(0, 1), 0.2)
a = TimeRange(RationalTime(0.2, 1), 1)
b = TimeRange(RationalTime(1.2, 1), 1)
c = TimeRange(RationalTime(2.2, 1), 1)
...
That's good, right?

A TimeRange is made of two RationalTimes (start_time and duration), like this:
r = TimeRange(RationalTime(0,1), RationalTime(0.2,1))

You can access the inclusive or exclusive end time from a TimeRange via end_time_inclusive and end_time_exclusive.
To make two TimeRanges adjacent do this:
r1 = TimeRange(RationalTime(0,1), RationalTime(0.3,1))
r2 = TimeRange(r1.end_time_exclusive(), RationalTime(0.4,1))

See the examples in the test_opentime.py test case for details:
https://github.com/PixarAnimationStudios/OpenTimelineIO/blob/master/tests/test_opentime.py

@meshula, I added a test case that illustrates adjacent TimeRanges: https://github.com/PixarAnimationStudios/OpenTimelineIO/pull/159
Does that help?
Also, we'd like to find the point where you were led astray with the 2nd parameter to the TimeRange constructor so we can fix the documentation or something to help others in the future. Do you recall when/why you made that assumption?

This new test case totally helps!
https://github.com/PixarAnimationStudios/OpenTimelineIO/pull/159/commits/862629db78464c4c90e6064e86e764a3efe71f4b
As to what led me astray, I think I wrote that code before I read the OTIO implementation, and it happened to work (or did what I expected it to do, for the wrong reasons). I think it simply didn't occur to me that duration on the TimeRange would also be a RationalTime. It is obvious in retrospect, my only excuse is coding with a beer in hand and/or after midnight :)


[StarTrekAdventures] damageCalc() update

Changes / Comments
Star Trek Adventures by Roll20.html
Removed code to add Security stat with Damage dice to align with game rules. Cited by Eric Albion (https://app.roll20.net/forum/post/10600448/star-trek-adventures-weapon-roll-issue).
Added upgrade to version 1.6 function to recalculate both character/npc and ship weapons and remove their respective security stat from weapon rolls.
Roll20 Requests
Comments are very helpful for reviewing the code changes. Please answer the relevant questions below in your comment.

[x] Does the pull request title have the sheet name(s)? Include each sheet name.
[x] Is this a bug fix?
[ ] Does this add functional enhancements (new features or extending existing features) ?
[ ] Does this add or change functional aesthetics (such as layout or color scheme) ?
[x] If changing or removing attributes, what steps have you taken, if any, to preserve player data ?
[ ] If this is a new sheet, did you follow Building Character Sheets standards ?

If you do not know English. Please leave a comment in your native language.

Character Sheet Info Roll20 Internal Use only.

Hi @Darth-John
Many thanks for your submission.
Unfortunately, this is legacy sheet code that is no longer maintained here, but is instead maintained in a different, private repository. I'm going to make arrangements for these changes to be migrated to that repo, but for now it's going to sit here a little while until that happens.

You bet, Nic.  And thank you!  :)
On Tue, Jan 18, 2022 at 10:03 AM Nic Bradley @.***>
wrote:

Hi @Darth-John https://github.com/Darth-John
Many thanks for your submission.
Unfortunately, this is legacy sheet code that is no longer maintained
here, but is instead maintained in a different, private repository. I'm
going to make arrangements for these changes to be migrated to that repo,
but for now it's going to sit here a little while until that happens.

—
Reply to this email directly, view it on GitHub
https://github.com/Roll20/roll20-character-sheets/pull/10023#issuecomment-1015674375,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASRGKBOQR4ZIX2X3TQJJBU3UWWTOVANCNFSM5L25PFTA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>


added sub_title localization for SettingController,updated translatio…

added sub_title localization for SettingController
fixed translations of zh-CN for human friendly

Thanks buddy 🍻


Diffusive Approximation

Version 0.9.0 actually applied the diffusive approximation, setting \epsilon_r=0.
Now, the results are controversial. Slightly less RAM is used, and it looks like it is faster on some examples (example-notebooks 1X, for instance), but slower on others (2a). This needs more investigation.
Todo:

Move eta, zeta, vol out of Model, Model only contains res and mu.
New function to get eta, zeta, taking Model(=>res,mu), SourceField (=> freq), and TensorMesh (=>vol).

The problem was not the diffusive approximation, but a bug that existed until 0.8.1. Updates like
model.res_x[:, :, :5] = 1e10

did not re-calculate model.eta_x. This is resolved. All good now.


Disabling breakpoints is not correctly work

When in the debugger, and disabling a breakpoint, this is not correctly reflected in the execution. Instead, the debugger will still trigger at those breakpoints.

Fixed with https://github.com/smarr/SOMns-vscode/commit/f586e24e4710dd889d70357bcd1a8c867526c715


docs(v2): make double nested sidebar entry thinner and smaller

Motivation
Sidebar currently has a consistent appearance on menu items on different levels. This makes it look a bit messy on the 2nd nested items:

This PR makes it looks like this:

Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
NA
Related PRs

i think for infinitely nested sidebar, we might consider rendering only certain levels when it becomes very deep, with a “back” and “forward extend” behavior? The idea is such that we still render a max level at any time, what do u think?
alternatively, maybe we render all layers, in which case i actually prefer it to be consistent cross layers, but with a clearer distinction between “directories” and menu items

I prefer smaller as the nesting gets deeper?


Having trouble making new VFX swaps because they won't leave? Can VFX editor be reset?

So, I'm not sure what I did (*obvious) but somehow, when I try to make new VFX swaps, they don't change. AND when I turn all of my mods off... they persist. I don't know what it is, but I can't try to make new mods, because when I check to see if it works, it "doesn't" work because the other mods I previously made are just... still there??? I've been trying to fix my old mods so that they work to begin with, but now that they DO work... I can't check them. Because when I try to add options, make new colors, etc. all of a sudden EVERY option is the same. BTW, all the options being the same always correlates with the last VFX swap I did (If blue, every option for the mod and every prev iteration of it I've ever made all become blue.) Is there a way to like... reset VFX editor so I can just start from scratch with my mods again??? Its very annoying and all I want to do is move forward. (Example shown here [If I knew how to take picture with Penumbra on screen I would] But the option currently picked is Red, but the vfx is just... not.)

it's highly recommended to ask this sort of thing in the appropriate dalamud discord thread first, as githubs are less for general support and more for technical/coding problems. however, as you're here now, you have a few options available for reset:

if you have any files active in the editor, those changes will take precedence over mods or may conflict with them erratically. use file > new to clear the editor of all changes. some file types don't respond to this due to how they're cached by the game.
refresh your character, either through penumbra or by changing zones. some files are cached differently and will stick until you do that.
make it so you're replacing the vanilla file with the vanilla file in the editor. click update, then remove the files from loaded and replaced. refresh your character again if you want.
restart your game. this shouldn't be necessary, but will solve the problem regardless, as the editor will never retain changes when you do that. if it's still there, it's a penumbra problem or a mod problem.


Return Uri With /api/meta

Summary

Currently api/meta returns a bunch of info, but not the uri
eg, "misskey.xyz"

I think I can do this one


Pre-trained models

Hi,
Hope all is well and thank you for a well-written paper!
Are you planning to open-source your pre-trained models as well?
Thanks,
Johannes

Uploaded.


Figured out the inconsistency space/tab problem is my editor

Emacs/mg believes that programmers should use spaces.[1] So, I have to figure out how to make it do tabs when I'm in python-mode. I have a few example configurations, but they don't seem to be solving the problem. I'll get it figure out, so it isn't a problem anymore.
https://www.emacswiki.org/emacs/IndentingPython

Figured it.


Update go-restful to include emicklei/go-restful#197

ProxyRoute return "406: Not Acceptable" when not include "*/*" in Accept request header.
https://github.com/GoogleCloudPlatform/kubernetes/blob/cfb6f1199bae1c0c7968c7322dd1f0037624236c/pkg/apiserver/api_installer.go#L637

lgtm.  merging.


west_commands: pyocd: issue a warning when falling back to binary file

Signed-off-by: Connor King<EMAIL_ADDRESS>

1: UC2 Signed-off-by: must have a full name

yes it does!

1: UC2 Signed-off-by: must have a full name
yes it does!

My guess is the "SIGSTACKFAULT" is causing the issue; try removing that maybe?

gotta wait for all the checks to pass before I can read gitlint's output, grumble grumble.

@mbolivar I've fixed the line length stuff.

Looks like you need a rebase now that https://github.com/zephyrproject-rtos/zephyr/pull/18310 is merged

gotta wait for all the checks to pass before I can read gitlint's output, grumble grumble.

You can run it locally. See the Contribution Guidelines in the documentation.

@sigstackfault ping

Welp, I guess this is just redundant.
I should check my email more often.


Allow Hetzner LB to point at schedulable controlplane nodes

This PR introduces the LegacyNodeRoleBehavior=false feature gate to the CCM to allow the Hetzner loadbalancer to point at schedulable controlplane nodes. I'm guarding the feature gate behind the allow_scheduling_on_control_plane setting, but if you feel that this is not necessary, I can drop the guard and set it as default for all new clusters.
Resolves https://github.com/kube-hetzner/terraform-hcloud-kube-hetzner/issues/55.

It's perfect the way it is now! Simple and clean, well done! So have you tried it? Does it work even with your removing the "master" role?

Just re-read your comment from yesterday; it seems that it's the only change needed! Appreciate your help in fixing this issue! Thanks again!


Update join Monero core team Matrix server guide; screenshots outdated

Guide refers to 'matrix.monero.social' as the Synapse server to reference when signing up on the Matrix client of choice, when it should be raw 'monero.social' as everyone's handles and log-in credentials indicate.
It is necessary to update text and screenshots showing how to modify the hosting synapse server in order for user to sign up on Monero's Matrix server. One screenshot from desktop/web, another from Android and another from iOS showing 'monero.social' as server are needed.
Apparently it requires an e-mail for sign-up now too, it didn't before. Text to be updated accordingly as well.

working on it

Thanks @HardenedSteel; apologies @rottenwheel for not having the time to get to this.


Alpha 3 displaying update message erroneously

Following forum post reports problem with upgrade message displayed when it shouldn't in Evothings Studio 2.0 Alpha 3:
https://evothings.com/forum/viewtopic.php?f=8&t=1797

Closing due to inactivity


[Request] add rest of the body to simulate a crowd

I love this library. I would love it if you could add a couple of parameters for height and weight. Obviously these are cartoons so the proportions don't have to be exact.
For context, I'd love to use this to generate two sets of crowds, based on two different normal distributions. One could be basketball players (tall, skinny), one could be football players (not skinny). Students would be able to visually see how the two crowds differ.

Hi @falconair, did you ever manage to find a solution to this?

@pierroo , afraid not.


Prevent access to a specific namespace

Hi this is a question rather than an issue. Completely new to calico...(apologies if there's a better forum to post this in)
So we are looking to try and centrally administer some aspects of our kubernetes estate whilst also trying to empower our app teams to own as much as possible.
With this in mind we would like to prevent people being able to access specific namespaces  without having to somehow define (and know in advance) all the other aspects of their application deployment access requirements.  Now from what i can see so far there is a global-deny but then you need to go in and customise the specific access required for everything else(which of course will vary with every application).
Is there a way to say deny:  as a default, so nothing can access it (unless you then specifically allow specific resources access to it for example on a port). I've looked at rbac and again without having to specify everything it doesn't look possible there - There is a git ticket for people asking for a deny ability - https://github.com/kubernetes/kubernetes/issues/85963
Thanks
Andy

@akcrisp simply selecting one or more pods will enact a default deny behavior for those pods, so that you will then need to explicitly define allow rules in order to enable certain matching traffic to access the selected pods.
You can do this cluster-wide using a Calico GlobalNetworkPolicy (https://docs.projectcalico.org/reference/resources/globalnetworkpolicy), or per-namespace using NetworkPolicy.
You can also, with Calico policies, do explicit deny rules for certain matching traffic, in case you wanted to implement a denylist appraoch rather than an allowlist.


1.3.2: Generated abi file contains no tables

Hi,
I defined a table in my own contract like:
struct [[eosio::table]] mystruct {...}
typedef eosio::multi_index<"tablename"_n,mystruct> s_table;

Still, when I run eosio-cpp command with abigen flag, the generated abi has an empty tables section. Documentation says to take a look into ./examples/abigen_test/test.cpp contract. I tried the source code and compiled via eosio-cpp -o test.wasm test.cpp --abigen, but the whole .abi file has empty sections.
Thanks for help in advance.

It appears that you using an older version of cdt the new version of cdt changed that example to abitest.cpp.  But, if you are using v1.3.2.  First make sure that either you define the table struct mystruct in the class that is the containing contract (i.e. you are using either the CONTRACT macro or class [[eosio::contract]]), or you define the table with an explicit [[eosio::contract("<contract name>")]] attribute ( so struct [[eosio::table, eosio::contract("<contract name>")]] mystruct {...}).  Please read the section Differences between Version 1.2.x and Version 1.3.x and specifically the subsection attributes to read about the new contract attribute and how that works.

Thanks for the hints. I solved it:

For the sample code, I used the most current one from abitest.cpp, but renamed the file. Wenn it is named abitest.cpp, the abi file gets created properly.
In my own contract, I changed
class hello : public eosio::contract {
to
CONTRACT hello : public eosio::contract {


Template

@MartyOfMCA how is the progress on this pull request

No reply yet @Certifieddonnie @MartyOfMCA

@MartyOfMCA how is the progress on this pull request

Still working on it.
Just a few changes 💯💯


Eliminate table unpack

Unpack isn't jit-friendly

I'm so sorry for off-topic comments. In general look good.


How to control the style or  intonation  of the synthesized speech?

Hi, I found the synthesized speech files are different by running inference many times. Their style or intonation always are diverse. How to contral the style or  intonation  of the synthesized speech?
Another question:
How to choose the best model from a series of checkpoint models? I found it is not sure that more iteration step is corresponding to better synthesis performance.

The variation comes from dropout on the Prenet layer. One can train without dropout or set training to False here https://github.com/NVIDIA/tacotron2/blob/master/model.py#L99.
Assuming your validation loss plateaus, any checkpoint on that plateau area.

@rafaelvalle , Thank you!
I get constant speech for many times by setting dropout=0.0. But the speech quality is awful。 Maybe I should train model by setting dropout=0.0 again.
In my case, I found the learned attention can't be hold along iteration increasing. For example, I can get good speech at checkpoint 80k steps, but I can't get better speech at checkpoint 85k step, even more awful speech.
I try to build Chinese synthesis model by tacotron2. The tone of the speech I got is very strange.
This is a raw speech:
post_r_8001_1.wav.zip
This is a corresponding synthesized speech:
test.chn.61k.r1.wav.zip

Attention is very important for proper synthesis: a low validation score with bad alignment won't produce good samples during inference time when we're not teacher forcing, i.e. providing the real previous mel frame to the decoder.
Audio quality is extremely dependent on the mel2audio decoder.
If by tone you mean the robotic sound, you can improve it by using a Wavenet Vocoder.
If you mean something else, please explain what it is and we can work together on it. I don't speak Chinese and, except the robotic tone from using Griffin-Lim, I think your sample sounds pretty good!

@rafaelvalle ,Thank you very much. When synthesizing with setting dropout=0, the tones of synthesized sentences using different training-step models  are different.
This is a sound synthesized by model with 126k-step:
test.126k.v1.wav.zip
This is a sound synthesized by model with 122k-step:
test.122k.v1.1.wav.zip

Closing due to inactivity.

Hi, I found the synthesized speech files are different by running inference many times. Their style or intonation always are diverse. How to contral the style or intonation of the synthesized speech?
Another question: How to choose the best model from a series of checkpoint models? I found it is not sure that more iteration step is corresponding to better synthesis performance.

For those who are interested in the same issue of getting various results on several inference iterations:
instead of using
_ = model.cuda().eval().half()
you can use
_ = model.cuda().eval().half()
__ = model.decoder.prenet.eval()


Use SNAPSHOT artifacts from maven for dependencies

Coming from https://github.com/opensearch-project/opensearch-plugins/issues/45, use SNAPSHOT Maven dependencies from aws.oss.sonatype.org. See https://github.com/opensearch-project/opensearch-plugins/blob/main/BUILDING.md#building-within-the-opensearch-build-system for details.
https://github.com/opensearch-project/security-dashboards-plugin/blob/main/.github/workflows/integration-test.yml#L36

Integration test updated in this PR: https://github.com/opensearch-project/security-dashboards-plugin/pull/860


Mac installation

Hello,
I install qwerty-fr with brew, next, I add it in Keyboards and reboot the computer ; but no shortcuts work.

Did I miss something during installation ?
Thx.

ok, noob in Mac, need to select it on top bar after 🤦♂

@nes No worries it happens to the best of us :)


Not all executables are found in a shell command on Windows

Describe the bug
The first exec of a shell command on Windows is "whiched" to make sure it is found. However a shell command can run multiple executables (with pipes, etc.), so some exec might not be "whiched" and the process results in "exec is not recognized as a command...".
To Reproduce
On Windows, run:
from failprint.runners import run

run("poetry show | grep failprint")

There's a high chance grep is not found.
Expected behavior
Every executable is correctly "whiched". Or some other clever trick.
System:

failprint version: 0.4.1
Python version: 3.6
OS: Windows

Additional context
Aditionally, the output often cannot be decoded as UTF-8 (see #7).

I don't see any robust method to prefetch absolute paths of all the executables used in a shell command.
Users will have to make sure they use the absolute path of those execs when they build the command they pass to failprint, if they want it to work on Windows.


Update JdkManual.qll

To better support tracking through exception's / throwable's

Nice! Can we have a test case for that?

The test cases are still failing because they need an .expected file.


Replace PlayContext.make_become_cmd

make_become_cmd is being deprecated in favor of using become plugins.

It may be helpful #29

#29 has been merged. Thanks @kuPyxa!

#29 has been merged. Thanks @kuPyxa!


[ERROR] Sorry, I can't determine which version key to use for this app.

Describe the bug
get [ERROR] Sorry, I can't determine which version key to use for this app.
To Reproduce
start work recipe-robot for creating download.recipe
link dmg: https://dl.influxdata.com/telegraf/releases/telegraf-1.21.3_darwin_amd64.dmg
Expected behavior
get the required recipe
Desktop (please complete the following information):

macOS: 10.14.6
Recipe Robot Version: 2.2.0
autopkg version: 2.3.1
/usr/local/autopkg/python --version: Python 3.7.5

Additional context
I ask you to help create a recipe for telegraf, an error occurs, can I prescribe the version myself if the robot does not succeed?
work log:
 Processing: /Users/munki/Downloads/telegraf-1.21.3_darwin_amd64.dmg
Input path looks like a disk image.
    Download URL found in file metadata: https://dl.influxdata.com/telegraf/releases/telegraf-1.21.3_darwin_amd64.dmg
    Successfully mounted disk image
    Copying Telegraf.app into cache...
Validating app...
    This app seems valid
Getting bundle name...
    Bundle name is: telegraf_entry_mac
Bundle name differs from the actual app filename.
    Actual app filename: Telegraf.app
Getting bundle identifier...
    Bundle identifier is: com.influxdata.telegraf
Checking for a Sparkle feed...
    No Sparkle feed
Determining whether app was downloaded from the Mac App Store...
    App did not come from the App Store
Looking for version key...
[ERROR] Sorry, I can't determine which version key to use for this app.

That's because the Telegraf app does not contain any usable version information:

You can still write AutoPkg recipes for this app manually, but AutoPkg may have similar problems due to the lack of versioning.
I would recommend reaching out to the developer and suggesting they add a CFBundleShortVersionString and/or CFBundleVersion key/value to their Info.plist.

Many thanks! I'll figure it out and make the recipe by hand. Probably, such problems as I do not happen often, but it might be worth adding the ability to add the missing keys immediately to the robot recipe if they are not specified in the application. If you do not have time, I will try to figure it out and add this feature

I solved it like this, but it certainly doesn't work in the gui:
        if version_key not in ("", None):
            robo_print(
                "Version key is: {} ({})".format(version_key, info_plist[version_key$
                LogLevel.VERBOSE,
                4,
            )
            facts["version_key"] = version_key
        else:
-            raise RoboError(
-                "Sorry, I can't determine which version key to use for this {}.".fo$
-                    bundle_type
-                )
-            )
+            print("Sorry, I can't determine which version key, please enter CFBundle$
+            while True:
+                try:
+                    version_manual = input("Enter version string (x.x or x.x.x): ")
+                    pattern1 = '^\d+\.\d+\.\d+(\r)?$'
+                    pattern2 = '^\d+\.\d+(\r)?$'
+                    match1 = re.fullmatch(pattern1, version_manual)
+                    match2 = re.fullmatch(pattern2, version_manual)
+                    if match1 or match2:
+                        facts["version_key"] = version_manual
+                        break
+                    else:
+                        print("Invalid version")
+                except:
+                    print("Invalid version")

    # Determine path to the app's icon.
    if "icon_path" not in facts and not args.skip_icon:
        icon_path = ""
        robo_print("Looking for icon...", LogLevel.VERBOSE)
        if "CFBundleIconFile" in info_plist:
            icon_path = os.path.join(
                input_path, "Contents", "Resources", info_plist["CFBundleIconFile"]

Version formats are varied and complicated to validate. And because missing versions are very rare and often temporary (due to a new developer misunderstanding app conventions, for example) I don't think this is an accommodation I'd build into Recipe Robot.

I found a better option, the PlistEditor function, it would be cool to pass arguments through the robot to this function if they are not present initially
Example: https://github.com/autopkg/recipes/blob/master/AdobeAIR/AdobeAIR.pkg.recipe

As for the versions - I agree, it turned out badly. But can exclude checking the value with regular expressions


ListBox onAction breaks selection

Provide a general summary of the issue here
Not sure if this is intended and undocumented or a bug
If you add an event listener to the onAction prop on the ListBox component, the standard selection behavior ceases to function
Maybe the expectation is that if you're listening to onAction you're handling all selection state externally(?)
I discovered this when implementing a story for the component and binding all event handler props to actions (logs)
🤔 Expected Behavior?
Either document this as expected behavior or allow for onAction to be listened to without breaking internal selection state management
😯 Current Behavior
Binding onAction causes presses to not update selection state
💁 Possible Solution
No response
🔦 Context
No response
🖥 Steps to Reproduce
https://codesandbox.io/p/sandbox/amazing-solomon-ypvhz7
Version
1.2.1
What browsers are you seeing the problem on?
Chrome
If other, please specify.
No response
What operating system are you using?
Mac
🧢 Your Company/Team
No response
🕷 Tracking Issue
No response

Looks like we left out the onAction documentation for ListBox
https://react-spectrum.adobe.com/react-aria/GridList.html#row-actions
What you want though is https://react-spectrum.adobe.com/react-aria/ListBox.html#selection-behavior to set this to "Replace"
Then the default interaction will be selection and a double click will trigger the action, as it mentions in the GridList docs I linked to.
Otherwise, you need to provide a control to trigger selection on individual rows.

Hi! I'm facing a similar issue. I raised this as an issue and was recommended to use onAction. However, I’ve noticed that the onSelectionChange callback only fires when I hold down the option, which is not the behavior I’m expecting. Has anyone else encountered this problem? I’d appreciate any suggestions or alternative solutions.

@elianarlivingston was my previous comment able to explain it?
This issue is just open to add docs now

Hello, @snowystinger
Thank you for the previous clarification. I still have a couple of questions regarding the implementation of the useListBox hook, specifically about the behavior of the onAction and onSelectionChange functions.
I've noticed that when selecting an item, both functions execute correctly: onAction is invoked when an element is selected, and onSelectionChange updates the selection state. However, when deselecting an item, onAction does not execute, while onSelectionChange does get triggered to reflect the change in selection.
Is this behavior expected? I would like to understand why onAction does not get activated during deselection and if there is a recommended way to handle the logic associated with deselection in this context.
I appreciate your help and guidance.
Best regards

Can you provide a codesandbox demonstrating the issue? It will make figuring out what's going on much easier.


How to use gcc7?

Issue description
I tried to include "pkgs.gcc7" as a build input in my project, but it could not be found.
Steps to reproduce
My default.nix:
let
  pkgs = import <nixpkgs> {};
  stdenv = pkgs.stdenv;
in
stdenv.mkDerivation {
  name = "project";
  buildInputs = [ pkgs.gcc6 ];
  src = ./.;
}

Technical details

System: 17.03.1775.56da88a298 (Gorilla)
Nix version: nix-env (Nix) 1.11.13
Nixpkgs version: "17.03.1775.56da88a298"
Sandboxing enabled: false

Gcc7 is not a part of the 17.03 release. You can set another nixpkgs version in your default.nix like this:
with import (builtins.fetchTarball "https://nixos.org/channels/nixos-17.09-small/nixexprs.tar.xz") {};

stdenv.mkDerivation rec {
  name = "project";
  buildInputs = [ gcc7 ];
  src = ./.;
}

Thanks!
Hmm. This kind of thing confuses me a lot. Why is it listed on https://nixos.org/nixos/packages.html if it's not released?

17.09 is the latest release.

@vyp Can you elaborate? Is the packages webpage listing packages from 17.03 or 17.09? Where does it say?

I don't know where the packages webpage listing comes from but I know the web pages for the manuals seem to be updated for every release, so I assumed the same for packages.html and options.html.

I'm still confused. You wrote "17.09 is the latest release." Can you elaborate? How is that related to my question?

So I assumed that packages.html is showing packages for 17.09, since it's the latest release.

Oh, ok. Thanks.
Somehow I upgraded but I'm still on "17.03.1904.09b9f7e7c4". Why is this? How do I upgrade my system to 17.09?

I ran a sudo nixos-rebuild switch --upgrade

Check which channels you are on
nix-channel --list
And maybe you need nix-channel --update

I believe run the following as root:
nix-channel --add https://nixos.org/channels/nixos-17.09 nixos
nixos-rebuild switch --upgrade

I got this from https://nixos.org/nixos/manual/index.html#sec-upgrading.

Is there an automated way to update to the newest channel version? Or do I just have to keep checking the website to see if a new channel is released?

I don't think so, but a new release happens every 6 months.

People typically want either:

the "rolling updates" style and those follow nixos-unstable channel (or even git master), or
the "stable release" style and those tend not to like big automatic jumps.

Last three release cycles were 6-month ones, and it's likely we will keep that for some more time.  The manuals and package list on nixos.org show the latest stable release.

@vcunat I'm on nixos-unstable. Do you mean to say that nixos-unstable automatically updates you from 17.03 to 17.09? (Because it did not for me.)

Unstable is something else; it will print 18.03 ATM.  You probably have multiple channels added.  Beware that system uses the nixos added as root user.  People often confuse it with other channel names or channels added as their regular user...

Yeah, I'm using sudo nix-channel. Here is the output of sudo nix-channel list:
nixos https://nixos.org/channels/nixos-17.03

Yes, that says you're on 17.03.  You probably want to --remove nixos and then --add https://nixos.org/channels/nixos-17.09 nixos (or perhaps -unstable instead of `-17.09).

Oh ok, that makes sense. I don't know how I ended up on stable... Thanks for all your help!


Add version specific classifiers

Docs claim to support py 2.6, do we? What about py3.?

I'll run the tests with tox and report back.

Haha, easier said than done. Most directive, cache and command tests simply error out on Windows. I added some compatibility with https://github.com/elnuno/sphinxcontrib-programoutput/commit/c65743e7018312d8c5208ddd9c9f01d19380b603 , but it's not looking good for test_directive.


ENYO-2142: Add Text to Speech Accessibility support to SimpleIntegerP…

…icker
SimpleIntegerPicker has unit property, so set unit text to
accessibilityLabel.
https://jira2.lgsvl.com/browse/ENYO-2142
Enyo-DCO-1.1-Signed-off-by: Jaewon Jang<EMAIL_ADDRESS>

This PR depends on https://github.com/enyojs/moonstone/pull/2275

Replacing with #2338 because this PR is based on a branch that was already merged into 2.6.0-dev.


GDscript regression - Typed iteration

Godot version:
Works in 3.2.1 (b0eca5828ccd3a5c07b77e82e567c45937de9056)
Doesn't work since 3.2.2 (5ee9553591ebb7926a238f2d5b5fb154db602b95)
Issue description:
This :
var test: int
for test in range(3):
	pass

... no longer works.
Old behaviour:
If the variable ("test" here) already exists, use it, else create a new one with the scope of the loop.
New behaviour:
Always try to create a new variable, if it already exists, fail with:

Variable "test" already defined in this scope

Being able to type the iteration variable is important, as Arrays don't support element typing (gdscript arrays are Array<Variant>, if you do implement that, please remember Dictionnary.keys()).
As to why type your iteration variable, it enables completion and points out rocks that may have fallen in your array.

Anoying workaround:
As far as I am aware, now you would need something like this to type your variable :
var test: int
for tmp in range(3):
	test = tmp

... which is anoying at best, and generally confusing (looking at the loop wouldn't tell you the name of the variable actually used).

Other usecases:
If you want to break compatibility and add something like for test: int in range(3):, there is still at least one unadressed usecase left :
var frog := player
for frog in swamp:
	if frog.matches(criteria):
		break
print(frog)

Here, by using the old system, you get a default value if the array is empty and know on what you used break whithout having to introduce another variable.

Conclusion:
I hope you either restore or reimplement typed iteration. If I have to change every single loop in my project, at least I would like them to still be typed properly.

CC @vnen @ThakeeNathees

Old behaviour:
If the variable ("test" here) already exists, use it, else create a new one with the scope of the loop.

No, the old behavior was if a variable already exists in the outer scope it creates a new variable with the same name in the scope, it doesn't use it.
In GDScript a block should not declare a variable with the same name as a variable declared in any block that contains it. for an example:
var test: int
while true:
	var test ## <-- this is invalid

var test: int
for test in range(3):
pass

it's not typed iteration, even if the type of the first definition is different it doesn't throw any error (cause both are different variables with the same name) and typed iteration and typed signal arguments doesn't supported yet (thus the other cases in invalid)
also that't not a workaround it's the only way to do if you want typed iteration.

I hope you either restore or reimplement typed iteration. If I have to change every single loop in my project, at least I would like them to still be typed properly.

I think you're doing it wrong as there is no such thing as typed iteration, but you could open a proposal for it. typed array world be great too.

Just tried it out, and you're right, they are separate variables
var color := Color.aliceblue
for color in [Color.antiquewhite]:
    color = 3
    print(color)
print(color)

Prints 3 and 0.94,0.97,1,1
However, the inner variable still gets the completion as if it was the outer one.

This isn't a bug, this is intentional behavior. GDScript should not allow you to shadow previously defined variables like this, and the reported 3.2.2 behavior is exactly that. If your 3.2.1 project breaks in this way, that code should be considered a bug in your project and you should fix it regardless of 3.2.2.


RM67162 Datasheet

Please add latest version of RM67162 datasheet.
The readily available V0.5 does not show support for QSPI and the colour correction registers detailed do not have any effect.
Display dimming / brightness / invert / partial display registers all work as expected as of V0.5 of RM67162 datasheet.

Attached:
Modified RM67162 driver files which add:
  lcd_brightness(0xD0);                                                            // (working)          0-0xff (0xD0 is lilygo default)
  lcd_set_colour_enhance(0b00000xxx);                                  // (not working)    bit1:0=slr_level_0-2, bit2=slr_enable
  lcd_display_set_colour_enhance_low_byte(0bxxxxxxxx);       // (not working)
  lcd_display_set_colour_enhance_high_byte(0bxxxxxxxx);     // (not working)
  lcd_display_high_brightness_mode(0b000000x0);               // (working)           bit1=enable
  lcd_display_on();                                                                   // (working)
  lcd_display_off();                                                                   // (working)
  lcd_display_invert_on();                                                        // (working)
  lcd_display_invert_off();                                                        // (working)

nikthefix
RM67162_mod.zip

hi and thanks for your brilliant effort!
on the subject of modifications to this brilliant little device , I am struggling to use one of the other modes in particular the 8bit color mode , when i change the values according to the manual  , all I get is garbage on screen,
please look at the init code from your rm67162.cpp file ,
what values  should I use on the highlighed line below to enable correctly the other color modes ??
Many thanks in advance !!
const static lcd_cmd_t rm67162_qspi_init[] = {
    {0x11, {0x00}, 0x80}, // Sleep Out
    // {0x44, {0x01, 0x66},        0x02}, //Set_Tear_Scanline
    // {0x35, {0x00},        0x00}, //TE ON
    // {0x34, {0x00},        0x00}, //TE OFF
    // {0x36, {0x00},        0x01}, //Scan Direction Control
*****************************************************************************************************
    {0x3A, {0x55}, 0x01}, // Interface Pixel Format	16bit/pixel  <<< THIS LINE
*****************************************************************************************************
    // {0x3A, {0x66},        0x01}, //Interface Pixel Format	18bit/pixel
    // {0x3A, {0x77},        0x01}, //Interface Pixel Format	24bit/pixel
    {0x51, {0x00}, 0x01}, // Write Display Brightness MAX_VAL=0XFF
    {0x29, {0x00}, 0x80}, // Display on
    {0x51, {0xD0}, 0x01}, // Write Display Brightness	MAX_VAL=0XFF
};

Hi,
Page 90 of the datasheet shows the bit field settings to define interface pixel format (command 0x3A):
For the lower colour depth modes use following:
SPI 3 bit/pixel (8 colors); SPI 1-1-1                {0x3A, {0x71}, 0x01}, // Interface Pixel Format
SPI 8 bit/pixel (256 colors); SPI 3-3-2            {0x3A, {0x72}, 0x01}, // Interface Pixel Format
SPI 8 bit/pixel (256 colors); SPI 256 Gray        {0x3A, {0x73}, 0x01}, // Interface Pixel Format
But you'll notice from the datasheet that these modes use SPI only so you may need to modify user code to accomodate spi byte ordering. Alternatively, if you just want an 8-bit colour depth to reduce buffer size etc then you could use the 16bit pixel format and only transfer the most significant byte of the 16bit word. Depending on your user code you may or may not have to pad the LSB with all zeros in order to complete a valid transaction. If using the lib as is here then you could place each  8bit data byte from your image array into a temp uint16_t varable and bitwise left shift x8 before calling 'push colours'.
Nikthefix

Many thanks for that , I exhausted all my options here before I posted my question , and yes to confirm , you are indeed correct with the spi , the 8bit modes ( using quad spi in the lib ) will produce a squashed picture , I kind of figured that you had to use the regular spi to get it perfect - But I was unsure  (until you just confirmed it!) - but doing that you will decrease the bandwidth , so again , its a double edged sword.
I ended up doing exactly as in your last sentence!
Many thanks for your kindness , cheers

My pleasure.

Hi @nikthefix! Sorry for commenting on this really old issue, but I also have a question related to the drivers of the T-Display S3 AMOLED V1.0
In this issue you can see the problem I'm running into: https://github.com/Xinyuan-LilyGO/LilyGo-AMOLED-Series/issues/21
Do you know if using any of these things can help me get rid of the tearing I'm seeing?
    // {0x44, {0x01, 0x66},        0x02}, //Set_Tear_Scanline
    // {0x35, {0x00},        0x00}, //TE ON
    // {0x34, {0x00},        0x00}, //TE OFF
    // {0x36, {0x00},        0x01}, //Scan Direction Control

I have read the datasheet, but I'm still not sure about what those things do or if they can help me. Thank you for any advice!

On 21 Feb 2024, at 15:36, nikthefix @.***> wrote:
I always test using animated GIFs which would show tearing most obviously. Are you using a full screen buffer? Are you accessing the PSRAM for other purposes at the same time?

Incidentally, what codebase do you use to play back animated GIFs? I was only able to do it using  moononournation's Arduino_GFX.

NK Guy

@3Dsf-info
Either LVGL integrated GIF decoder or for TFT_eSPI, I use Larry Bank's decoder:
https://github.com/bitbank2/AnimatedGIF
His work is awesome!

Hi @nikthefix! Thanks for your reply!
To give you some context: my project is a ray-tracer for the T-Display S3 AMOLED. In the little menu I showed you select the object you want to render, and then it starts rendering it and revealing it one pixel at a time.
The whole thing works beautifully, it's just the tearing in the menu that's annoying. My source code is here: https://github.com/diegomacario/Tiny-Ray-Tracer/tree/main/examples/Tiny_Ray_Tracer
And this is the source code of the menu: https://github.com/diegomacario/Tiny-Ray-Tracer/blob/main/examples/Tiny_Ray_Tracer/MenuState.cpp
The way I wrote it, each box on the screen has its own sprite. When the button to jump to the next box is pressed, I update the colors of the current sprite and the next one:
   bool nextSceneButtonIsPressed = checkNextSceneButton();
   if (nextSceneButtonIsPressed) {
      // Make the current cell black with white text
      mCellSprites[mCurrentCellIndex].fillSprite(TFT_BLACK);
      mCellSprites[mCurrentCellIndex].setTextColor(TFT_WHITE);
      mCellSprites[mCurrentCellIndex].drawRect(0, 0, static_cast<int32_t>(mCellWidth), static_cast<int32_t>(mCellHeight), TFT_WHITE);
      mCellSprites[mCurrentCellIndex].drawString(mCells[mCurrentCellIndex].mText.c_str(), mCells[mCurrentCellIndex].mTextXPos, mCells[mCurrentCellIndex].mTextYPos);

      mAmoled->pushColors(mCells[mCurrentCellIndex].mXPos, mCells[mCurrentCellIndex].mYPos, static_cast<uint16_t>(mCellWidth), static_cast<uint16_t>(mCellHeight), (uint16_t *)mCellSprites[mCurrentCellIndex].getPointer());

      ++mCurrentCellIndex;
      mCurrentCellIndex %= mCells.size();

      // Make the selected cell white with black text
      mCellSprites[mCurrentCellIndex].fillSprite(TFT_WHITE);
      mCellSprites[mCurrentCellIndex].setTextColor(TFT_BLACK);
      mCellSprites[mCurrentCellIndex].drawRect(0, 0, static_cast<int32_t>(mCellWidth), static_cast<int32_t>(mCellHeight), TFT_WHITE);
      mCellSprites[mCurrentCellIndex].drawString(mCells[mCurrentCellIndex].mText.c_str(), mCells[mCurrentCellIndex].mTextXPos, mCells[mCurrentCellIndex].mTextYPos);

      mAmoled->pushColors(mCells[mCurrentCellIndex].mXPos, mCells[mCurrentCellIndex].mYPos, static_cast<uint16_t>(mCellWidth), static_cast<uint16_t>(mCellHeight), (uint16_t *)mCellSprites[mCurrentCellIndex].getPointer());
   }

So I only update the parts of the screen that change. To answer your other questions:

I'm not using a full screen buffer.
I'm not accessing PSRAM for other purposes.

The curious thing is that I only see tearing when I drastically change the color of something I drew from one frame to the next (like I do with my buttons that go from black to white and vice versa).
I tested animating a sphere moving from left to right in the screen, and I see no tearing.
It's only when the color changes so much like in my case.
And do you mind if I ask you, how do I lower the QSPI data rate? I'm not sure how to do that.

Note that in my project I'm using the LilyGo_Class from #include <LilyGo_AMOLED.h> to push colors to the screen, but I have also tested using your RM67162 driver code and I see the same problem.

you might need to vsync , but i am not sure if that pin is connected to the esp32on this board
if it is , just wait for vsync then do your drawing stuff
but i think you may need to go low level and write your own push colors routine as the ones provided in libraries are not optimised for performance but for compatibility....

@diegomacario
Interesting. I'll have to think about that.
To adjust the data rate depends on which library you're using. If it's my mod of the original Lilygo Lib then you can change it in pins.h

@davidos81 There's no vsync here. Just a transfer of data to the amoled internal graphics ram buffer. Addressing is arbitrary so as long as your data source for a complete frame or parts of it is consistent there should be no tearing.

but there must be a way to remove tearing - surely ?

@davidos81 There shouldn't be tearing if the buffer representing what is to be drawn is not modified in any way before it's contents are fully transferred to the GRAM of the display. Modifications of the ESP buffer should be blocked by the writing to GRAM until completion. If however, the tearing is caused by the display not keeping pace then a reduction in the QSPI data rate would give us a clue. The 75Mhz of the original Lilygo setup seems high-ish but has worked consistently for me.

@davidos81
Yes I stand corrected - the TE line IS available and connected to gpio 9.
@diegomacario
You need to create one full screen sprite - img.createSprite(240, 536); or img.createSprite(536, 240); for landscape.
This sprite then acts as your internal frame buffer which you draw into with the usual tft_espi functions.
The lcd_pushColours() function pushes a whole screen of data at once. Your 100x100 sprite represents only a partial screen update. The lcd_pushColours() function expects each line to be full width so a 100x100 region will be incoherent and lead to all sorts of artefacts.

@davidos81 Yes I stand corrected - the TE line IS available and connected to gpio 9.
@diegomacario You need to create one full screen sprite - img.createSprite(240, 536); or img.createSprite(536, 240); for landscape. This sprite then acts as your internal frame buffer which you draw into with the usual tft_espi functions. The lcd_pushColours() function pushes a whole screen of data at once. Your 100x100 sprite represents only a partial screen update. The lcd_pushColours() function expects each line to be full width so a 100x100 region will be incoherent and lead to all sorts of artefacts.

Thanks for clarifying that!
So diegomacario - you now have your solution thanks to nikthefix!

@diegomacario @davidos81
Things can be a little confusing with the T-DisplayS3-AMOLED at present as there are 3 variants of the board and 3 different libraries which users may have been using initially:
Boards -
T-DisplayS3-AMOLED, T-DisplayS3-AMOLED-Version 2 (shorter), T-DisplayS3-AMOLED-Version 2 with touch.
The version 2 boards have a display enable on gpio 38 which needs to be pulled high to activate the screen.
The original V1 boards does not. This means that user code for V1 may not work with V2 unless this is added to the sketch.
Libraries-

T-DisplayS3-AMOLED original repo by mmMicky (https://github.com/Xinyuan-LilyGO/T-Display-S3-AMOLED)
My modified version which was used in Volos' first T-DisplayS3-Amoled videos (code available on his github)
The new consolidated Lilygo Amoled repo (https://github.com/Xinyuan-LilyGO/LilyGo-AMOLED-Series)

I would say that option 3 is a little unwieldy for those wishing to extensively modify and tailor / optimize the code as it attempts to be universal across the amoled range.
Options 1&2 are small and it's easier to see what's going on - assuming you're just using this one board.
Added to the fact that ESP_Arduino Alpha3 is still teething, it means that the space is a bit messy right now.
LVGL V9 will no doubt throw a syntactical spanner in the works too!
But the migration documents for both ESP_Arduino and LVGL are superb.
Nick

@diegomacario
Just another point to add:
If you find that a full screen update for animation is too slow then you CAN use lcd_push_colours() for partial update but there is a caveat. See page 68 of the RM67162 datasheet.
For both Row and Column Start/End (RASET and CASET registers):
(1) SC[9:0] always must be equal to or less than EC[9:0].
(2) The SC[9:0] and EC[9:0]-SC[9:0]+1 must be divisible by 2.
Failure to 'round off' your update regions to meet these criteria will result in the kind of intermittent 45 degree skewing that looks like tearing but is in fact a restriction of the display hardware. Your screen shots look to me like this is what was happening. A full screen update avoids the issue as 536x240 meets these criteria.
LVGL has a 'rounder' callback function which does this automatically if needed for displays with fussy even / odd quantized partial update restrictions. You could port this function to your TFT_eSPI project or roll your own. It's on my todo list to add fast partial updates to my RM67162 driver.
I'll have updates on my github (https://github.com/nikthefix) just as soon as I get my electronics workroom functional again. I had a water leak so instead of doing fun stuff I've been re-plastering and dehumidifying!

@diegomacario
No problem. I also learn a hell of a lot from these issues and interactions.
But just for the record, I think that what you were seeing was not tearing.
The photos showed none of the characteristics of tearing.
Try the full screen sprite first and also - lcd_PushColors(0, 0, 536, 240, (uint16_t *)spr.getPointer());
If it works without artifacts / corruption then we know that the above display restrictions are pertinent.
I get around 20-30 fps with full screen update @ 75MHz but it depends on all the other business code.
Once you're satisfied that everything is rendering cleanly then the next step could be to optimize for speed if that's what you need.
nik

On 21 Feb 2024, at 15:59, nikthefix @.***> wrote:
Either LVGL integrated GIF decoder or for TFT_eSPI, I use Larry Bank's decoder:
https://github.com/bitbank2/AnimatedGIF
His work is awesome!

Thanks!
That’s interesting - I couldn’t get the Bank code to compile at all, and the LVGL stuff never worked for me. Adding to the nuisance is having to convert the GIF into .h every single time!
I don’t suppose you’d have a writeup somewhere on how to do this? I was able to use Arduino_GFX, but only by using the older version of Arduino IDE since the newer versions can’t use plugins for file uploads. So messy!

@3Dsf-info Ah so were you hoping to use SPIFFS / littleFS / FatFS to store your Gifs?
Yeah the new IDE won't play ball for upload at present. But it's a good thing really. Converting your file to a byte array and including it in the sketch is so much more efficient. But for experimentation having a file system is convenient. Especially for web pages etc. You could upload using the espressif flash tools or try implementing your board as a USB Mass Storage Device. But I'd stick with the .h file. Harder work but better in the end.
"The LVGL stuff never worked for me". Can you expand on this?

@diegomacario No problem. I also learn a hell of a lot from these issues and interactions. But just for the record, I think that what you were seeing was not tearing. The photos showed none of the characteristics of tearing. Try the full screen sprite first and also - lcd_PushColors(0, 0, 536, 240, (uint16_t *)spr.getPointer()); If it works without artifacts / corruption then we know that the above display restrictions are pertinent. I get around 20-30 fps with full screen update @ 75MHz but it depends on all the other business code. Once you're satisfied that everything is rendering cleanly then the next step could be to optimize for speed if that's what you need.
nik

i had the same issue (that tearing in video) in landscape mode , whats happening (i think) is that the lcd ALWAYS draws in portrait mode , the rotation stuff is probably for convenience like in most lcd controller ic's , so no matter what I did ( and i spent days!) i could not get it to work

@diegomacario
No that's wrong, This is definitely true of the Long and the T-Track, but the display of the T-Display-Amoled has a true hardware rotate. When in landscape mode it can draw landscape and there's no penalty. This is also true of the T4-amoled. If you have issues then the causes are elsewhere.

hmmm , interesting!  As i always got a diagonal tear no matter what I did in lansdscape , so what you are saying is if I set rotation to landscape - then wait for the tear pin then push a full screen  bitmap of 536x240  - that should be tear free - right ?

Or just measure the duration of a full screen landscape push and block all writes within this window.

I prefer a visual approach , what i do is change the colors on each "frame" , a tear is very easy to spot - you will see a visible "line" between the time you changed from the old to the new color.

Smoking what? There's health and there's health.

Smoking what? There's health and there's health.

LOL!

@davidos81 Nice one! It all helps.

Hi @nikthefix! Sorry for the super late follow up, I got busy with work.
Sadly using a fullscreen lcd_PushColors of 536x240 that respects the rules of the datasheet doesn't fix the issue. I still see the same odd diagonal tearing with this code:
#include "rm67162.h"
#include <TFT_eSPI.h>

TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft);

unsigned int colorIndex = 0;
unsigned long frameCounter = 0;

void setup() {
  img.createSprite(536, 240);
  rm67162_init();
  lcd_setRotation(1);
}

void loop() {
  if (colorIndex == 0) {
    img.fillRect(0, 0, 536, 240, TFT_RED);
  } else if (colorIndex == 1) {
    img.fillRect(0, 0, 536, 240, TFT_GREEN);
  } else if (colorIndex == 2) {
    img.fillRect(0, 0, 536, 240, TFT_BLUE);
  }

  lcd_PushColors(0, 0, 536, 240, (uint16_t*)(img.getPointer()));

  frameCounter += 1;
  if (frameCounter % 180 == 0) {
    colorIndex += 1;
    colorIndex %= 3;
  }
}

It's very curious, I'll keep thinking about this problem.

@diegomacario
OK, I will try to reproduce the problem using your example.
nik

@nikthefix
i just tried this and the experience I had a while back is exactly the same , my guess is that its still drawing in portrait mode  (physically on the LCD) but the hardware is drawing it rotated so to you and me its landscape ?
Make sense to u ?

@davidos81
So you tried this using diegomacario's code and see the same problem he describes?
I've not had a chance to try it yet as my work room is still down but I'll try to set up a test rig today and get back to you asap.
Yes rotating the GFX is something I tried with other more limited displays in the past. The trouble with that is that it can mess with your fonts / smooth fonts - depending on how you're rendering them.

@diegomacario @davidos81
Morning Gentlemen, sorry for the delay in getting back.
Could you try the following sketch - even more simplified.
In pins_config.h         set            #define SPI_FREQUENCY         500000
Please confirm that you see no tearing at this very low spi speed and that the scanning direction / orientation looks correct.
#include "rm67162.h"
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft);
unsigned int colorIndex = 0;
unsigned long frameCounter = 0;
void setup() {
//pinMode(38, OUTPUT);                   //for s3 amoled touch
//digitalWrite(38, HIGH);                //display enable
img.createSprite(536, 240);
rm67162_init();
lcd_setRotation(1);
}
void loop() {
img.fillRect(0, 0, 536, 240, TFT_RED);
lcd_PushColors(0, 0, 536, 240, (uint16_t*)img.getPointer());
delay(1000);

img.fillRect(0, 0, 536, 240, TFT_GREEN);
lcd_PushColors(0, 0, 536, 240, (uint16_t*)img.getPointer());
delay(1000);

img.fillRect(0, 0, 536, 240, TFT_BLUE);
lcd_PushColors(0, 0, 536, 240, (uint16_t*)img.getPointer());
delay(1000);

}

@diegomacario @davidos81
I am also seeing the effect now when using fillRect. I think the reason I didn't see it before was because I was only pushing full screen bitmap images - and for some reason (which may help point to the problem) - the effect doesn't show up in this case.
I'm sure it can be resolved but might take some more experimentation. I'll try the same basic screen washes in LVGL to see if it's the same. The typical 'tearing' in which the MCU frame buffer is updated during an update phase of the internal display buffer wouldn't seem to apply here as in this example we can be sure that the MCU buffer is constant before, during and after the call to lcd_pushColors. As 3Dfs-info suggested, we might be able to make use of the TE line. And there are other options shown in the datasheet which may help.

@nikthefix
"Please confirm that you see no tearing at this very low spi speed and that the scanning direction / orientation looks correct."
confirmed... but with all due respect - it does not solve the issue or does it ??

@davidos81
No I just wanted to make sure we were all seeing the same thing as a starting point - just in case there were differences in our configurations.

@davidos81 @diegomacario
Progress: It's working without tearing now by using the TE line to detect the blanking periods during which you can transfer data without the display updating from internal buffers. There's a speed penalty as the write window is much smaller (still at 75MHz tho). I'm just polling the TE line at the moment but will convert to an interrupt flag which should give us back some speed.
It looks clean now at least.
nik

@nikthefix you are a star!!
I personally didn't think it was possible , even with my experience in this kind of stuff , my guess was (up until now) like most lcd boards , there is no sync between writing to gdram and lcd displaying it from there , I did manage it in portrait though but no landscape like you have done here...!
BTW , Is the plastering finished ..?

That's incredible @nikthefix thanks for keeping up the fight to solve this problem!!!

Here's a zip with the a sketch and modified libs.
At the moment the frame data are transmitted during the display blanking phases only so it's slower than we want.
The next step is to extend this into the 'danger zone' but keeping sync with the display frame rate (approx. 65Hz).
Just need to measure the exact timings.
nik
t3_amoled_tear_test.zip

@diegomacario @davidos81
BTW, I've just been reviewing this whole comment section and I need to eat some humble pie.
I didn't see the tearing so I assumed it was something else.
I wasn't looking closely enough.
So, many of my comments were useless.
My bad.
nik

@nikthefix thanks for the effort in the provided .zip file!
It seems the update is promising , I did try it , not quite there yet - still a bit slow , but a fantastic effort anyways!
We cant wait for the next update!!

But you didn't see any tearing?
If so then the next step should just be arithmetic.
nik

@nikthefix absolutely true , no tearing seen!
being honest , this is next level stuff for me , KUDOS to your efforts @nikthefix

Well I suppose such hardware optimizations are in the domain of the manufacturers whose products utilizes these displays.
There are 'hidden secrets' not shown in the datasheets which allow for much greater configuration - if you're a manufacturer.
I know this to be true as I stumbled upon them - but didn't know what I was doing with no supporting documentation.
Lilygo et al do a great job of getting it out there.
It's up to us to delve deeper.
nik

@nikthefix Very true!

@davidos81
But I think the maker scene has reached the point where 'hobby level' performance is no longer acceptable.
We want our gadgets to perform like iPhones.
We'll get there.
nik

certainly with this display 60fps is easily achievable ..

And retina resolution.

@davidos81
Have you tried the Liliygo T4 amoled yet?
It's wonderful.

@nikthefix
I really want to , but I could not see a TE line on the schematic , for my purposes , I need 100% tear free updates ,
do you have it and whats the screen refresh / tearing situation on it ?

Good question. I've been using it with LVGL and haven't noticed any tearing.
I will subject it to our tests.
I suspect I will be similarly disappointed with the findings.

I looked up the actual LCD from the company you mentioned in earlier posts.
I did not see TE line on that ,  I suspect it would be the same here...
sometimes it can be difficult to see tearing...

It's there on the FPC but Lilygo didn't wire it up. Bummer.
There will come a time when you'll have to make your own boards.

my bad , I knew it was one or the other , which is why I didnt bother with it further!

Well it's good feedback for Lilygo - expose all the useful pins.
Let's hope they read this.

I just tested the new driver code and I can confirm I don't see tearing on my T-Display S3 AMOLED either! The colors are slowly updated top-to-bottom instead.
I did a diff between the old driver code and the new one to understand the changes. It's very cool seeing how you can read the spec sheet and implement it. I have no clue had to do that. Thanks so much for the effort @nikthefix!

@nikthefix EXACTLY!!
I forgot to add for the t4 display , the library looks over bloated (to me anyway) compared to the simplicity of this display - just 2 files and a .ino

I have been following this post. I can't do anything about tearing, I can only follow you, but @nikthefix mentioned that the hardware does not connect TE. I can clarify this point. TE has indeed been connected to the GPIO9 Pin of esp32s3.

Regarding the initialization screen parameters, the screen supplier cannot provide us with more information and will only send us a data sheet, so what we currently do is just light up the screen.

@lewisxhe Are you referring to the t4 display ?

I'm referring to these monitors
https://www.lilygo.cc/products/t-display-s3-amoled
https://www.lilygo.cc/products/t-display-s3-amoled?variant=43228221636789
https://www.lilygo.cc/products/t4-s3
https://www.lilygo.cc/products/t-display-amoled-lite

@lewisxhe Thanks , I will have a look at it again

On 23 Feb 2024, at 13:56, nikthefix @.> @. Ah so were you hoping to use SPIFFS / littleFS / FatFS to store your Gifs?
Yeah the new IDE won't play ball for upload at present. But it's a good thing really. Converting your file to a byte array and including it in the sketch is so much more efficient. But for experimentation having a file system is convenient. Especially for web pages etc. You could upload using the espressif flash tools or try implementing your board as a USB Mass Storage Device. But I'd stick with the .h file. Harder work but better in the end. Well, I didn’t respond to this one right off - not sure if it’s something that should be in its own thread or something. But yes, I find the whole .h conversion business to be really time-consuming and cumbersome. I typically find myself in situations where the code on the device stays the same, and I’m simply iterating repeatedly on the uploaded GIF image to see what works visually. Reducing the number of steps to close the feedback loop is ideal!Ideally I just want to drop a file into a folder on my development computer, click a button, and have the file synced. And the board isn’t designed to operate as a USB mass storage class device, I don’t think. That would be perfect also!
"The LVGL stuff never worked for me". Can you expand on this? Well, I basically wasn’t able to get an animated GIF, converted to .h, to load and play using LVGL at all. The only way I could get a GIF to play was to use the moononournation Arduino_GFX code. Here’s my writeup on what I got working: https://sites.google.com/site/3dsfinfo/lights-for-model-makers-technology-and-techniques/high-rez-microcontroller-displays It’s a shame that nobody seems to support animated PNG. I only use animated GIF because it’s just adequate for my needs, and because video playback isn’t an option. But GIF has the constrained colour palette, which sucks, especially on a screen as nice as the AMOLED displays. Using PNG or a video would be so much better. :) - NK GuyMessage ID: @.***>

@3Dsf-info
The esp32-s3 CAN be set up as a usb mass storage device. There are examples in the Arduino_Esp32 examples section. Another way to do it is to use the Adafruit TinyUSB library - even more MSD examples there.
Alternatively you could use an SD card breakout to quickly install data files (maybe copy them over to internal flash for speed).
For video playback with more flexibility than Gif, you might checkout this miniTV project:
https://www.youtube.com/watch?v=2NLblyCvJBU&t=7s
It's a whole series (appropriately enough) and it's fab!
Also, Arduino_GFX has an example for Mjpeg playback which works well.
nik

@nikthefix
@lewisxhe mentions above that the t4 amoled does indeed have a TE connnected to GPIO 9 , can you please do some tests to confirm if that is true ?
Cheers in advance!

@davidos81
According to the latest schematic:
(https://github.com/Xinyuan-LilyGO/LilyGo-AMOLED-Series/blob/master/schematic/T4-S3-AMOLED.pdf)
...and the lilygo pin defines:
// LILYGO 2.41 Inch AMOLED(RM690B0) S3R8
// https://www.lilygo.cc/products/t4-s3
static const DisplayConfigure_t RM690B0_AMOLED  = {
14,//BOARD_DISP_DATA0,
10,//BOARD_DISP_DATA1,
16,//BOARD_DISP_DATA2,
12,//BOARD_DISP_DATA3,
15,//BOARD_DISP_SCK,
11,//BOARD_DISP_CS,
BOARD_NONE_PIN,//DC
13,//BOARD_DISP_RESET,
-1, //BOARD_DISP_TE,
8, //command bit
24,//address bit
36000000,
(lcd_cmd_t *)rm690b0_cmd,
RM690B0_INIT_SEQUENCE_LENGHT,
RM690B0_WIDTH,//width
RM690B0_HEIGHT,//height
0//frameBufferSize
};
... TE is not connected to a GPIO.
GPIO pin 9 for the T4 is shown assigned to the display power management ic AVDD_enable pin.

@lewisxhe
Do you have an estimated time until we can purchase the T4 shell / case?
I can't wait to get my hands on this.
And also the T-Encoder-Pro?
Many thanks.

T4S3? no connection ? Sorry, I might have remembered it wrong, then I might suggest re-iterating the T4S3 to a version with the TE connected to the GPIO

The 3D files of T4S3 are already on github https://github.com/Xinyuan-LilyGO/LilyGo-AMOLED-Series/blob/master/shell/T4-S3-AMOLED.zip
, if you are referring to the store, I am not sure when it will be available for sale.

3.T-Encoder-Pro should be sold soon

@lewisxhe
Thank you for the information.
Yes I think having the TE to GPIO on T4S3 would be very useful. Even tho most people probably won't need it, it's very good to have it for educational purposes and experimentation.
I will download the T4S3 shell now.
nik

@nikthefix
Thanks for looking into that for me , I knew @lewisxhe  got confused somewhere!

@lewisxhe @davidos81 @diegomacario
My thinking:
I tried very hard to squeeze the frame data into the blanking periods of the display refresh but there just wasn't enough time at 80MHz. The frame rate would remain unacceptably low even if the frame data were fragmented and transmitted only during these phases.
Since we're writing in landscape and the display is refreshing in portrait there is no way to avoid an intersection / collision / strobe causing diagonal artifacts.
So in this test I've used an additional buffer for a matrix rotation (just like the one used in the code for the Lilygo T-Track).
Now the refresh scan is the same as the update vector. Combined with a sync from the TE pin we can have clean frames I hope.
I've not yet measured the full screen frame rate but there is room for optimization.
Also, I've not yet integrated this mod to work with the lcd_rotate function so for the time being lcd_rotate should not be used.
nik

@nikthefix Absolutley great work !!
The sketch worked perfectly , AWESOME!
So I was right about the screen refreshing in portrait mode  after all - at least I am good for something !!
From a technical perspective , I didnt think of this approach - so very clever  @nikthefix
If I really had to criticise this approach it would be that you are now doing a massive pixel copy operation (536x240)*2 , but this should be fine for the most tasks!
I think you have almost nailed it @nikthefix

@davidos81
Yes the screen refreshing in portrait mode independently of the logical landscape write to the gram seems absurd but I guess the two components are joined in an immutable hardware way. Indeed you were right. I just wish that more displays were native landscape.
The pixel copy is no great penalty at 240Mhz cpu / 80Mhz spi and I suggest we have a separate function to push pixels in this fashion only when necessary.

@3Dsf-info
I found this which may help with your file system upload in IDE 2.x issue:
https://github.com/palmerr23/ESP32-OTA-and-File-Manager

@lewisxhe @davidos81 @diegomacario
Progress:
Code cleanup
FPS serial monitor
270 degree rotate option
Todo:
Integrate all rotate options (fast and tear free) into a single function call.
Optimize the tear free frame rate.
Currently 'tear free = 20fps, non tear free = 50fps (approx).
nik
t3_amoled_tear_test.zip

Hi @nikthefix! This morning I finally sat down to continue with my ray-tracer project using your new driver code. The menu I showed here works beautifully now with no tearing at all! I'm using the lcd_PushColors_Rotated_90 function there.
For the part of the program that draws the rendered image to the screen I tried switching to the old but faster version (lcd_PushColors). I never saw tearing there, so I figured it would be good to just keep using the faster function.
To make those calls work I call lcd_setRotation(1) before executing them. The curious thing is that things work beautifully with fullscreen updates, but not with partial ones. With partial updates I see lots of artifacts. This minimal code reproduces the bug:
#include "rm67162.h"
#include <TFT_eSPI.h>
#include "hugeFatFont.h"

#define TE_pin 9
#define display_enable_pin 38

TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft);
TFT_eSprite img2 = TFT_eSprite(&tft);

void IRAM_ATTR ISR();

void setup() {
  pinMode(display_enable_pin, OUTPUT);
  digitalWrite(display_enable_pin, HIGH);
  pinMode(TE_pin, INPUT);
  Serial.begin(115000);
  img.createSprite(536, 240);
  img2.createSprite(200, 100);
  rm67162_init();

  attachInterrupt(TE_pin, ISR, RISING);
  img.loadFont(hugeFatFont);
  img2.loadFont(hugeFatFont);
}

void loop() {
    // 90 degree rotate - Fullscreen - Tear free

    lcd_setRotation(0);

    img.fillRect(0, 0, 536, 240, TFT_RED);
    img.setTextColor(TFT_WHITE, TFT_RED);
    img.drawString("TEARING TEST",175,100);
    lcd_PushColors_Rotated_90(0, 0, 536, 240, (uint16_t*)img.getPointer());
    delay(1000);

    img.fillRect(0, 0, 536, 240, TFT_GREEN);
    img.setTextColor(TFT_WHITE, TFT_GREEN);
    img.drawString("TEARING TEST",175,100);
    lcd_PushColors_Rotated_90(0, 0, 536, 240, (uint16_t*)img.getPointer());
    delay(1000);

    img.fillRect(0, 0, 536, 240, TFT_BLUE);
    img.setTextColor(TFT_WHITE, TFT_BLUE);
    img.drawString("TEARING TEST",175,100);
    lcd_PushColors_Rotated_90(0, 0, 536, 240, (uint16_t*)img.getPointer());
    delay(1000);

    // 90 degree rotate - Fullscreen - Fast but not tear free

    lcd_setRotation(1);

    img.fillRect(0, 0, 536, 240, TFT_DARKCYAN);
    img.setTextColor(TFT_WHITE, TFT_RED);
    img.drawString("TEARING TEST",175,100);
    lcd_PushColors(0, 0, 536, 240, (uint16_t*)img.getPointer());
    delay(1000);

    img.fillRect(0, 0, 536, 240, TFT_GREENYELLOW);
    img.setTextColor(TFT_WHITE, TFT_GREEN);
    img.drawString("TEARING TEST",175,100);
    lcd_PushColors(0, 0, 536, 240, (uint16_t*)img.getPointer());
    delay(1000);

    img.fillRect(0, 0, 536, 240, TFT_PURPLE);
    img.setTextColor(TFT_WHITE, TFT_BLUE);
    img.drawString("TEARING TEST",175,100);
    lcd_PushColors(0, 0, 536, 240, (uint16_t*)img.getPointer());
    delay(1000);

    // 90 degree rotate - Not Fullscreen - Buggy

    int32_t width = 200;
    int32_t height = 100;

    img2.fillRect(0, 0, width, height, TFT_DARKCYAN);
    img2.setTextColor(TFT_WHITE, TFT_RED);
    img2.drawString("TEARING TEST",0,0);
    lcd_PushColors(0, 0, width, height, (uint16_t*)img2.getPointer());
    delay(1000);

    img2.fillRect(0, 0, width, height, TFT_GREENYELLOW);
    img2.setTextColor(TFT_WHITE, TFT_GREEN);
    img2.drawString("TEARING TEST",0,0);
    lcd_PushColors(0, 0, width, height, (uint16_t*)img2.getPointer());
    delay(1000);

    img2.fillRect(0, 0, width, height, TFT_PURPLE);
    img2.setTextColor(TFT_WHITE, TFT_BLUE);
    img2.drawString("TEARING TEST",0,0);
    lcd_PushColors(0, 0, width, height, (uint16_t*)img2.getPointer());
    delay(1000);
}

I'll try to fix this, but I thought I would report it too just so you are aware. You'll see the partial updates corrupt the screen in odd ways. Thanks so much for all your help!

@diegomacario
Hi,
The partial update regions need to conform to the rounding requirements of the screen in portrait orientation - as metioned above and copied here:
///////////////////////////////////////////////////////////////////////////////////////////
If you find that a full screen update for animation is too slow then you CAN use lcd_push_colours() for partial update but there is a caveat. See page 68 and 70 of the RM67162 datasheet.
For both Row and Column Start/End (RASET and CASET registers):
(1) SC[9:0] always must be equal to or less than EC[9:0].
(2) The SC[9:0] and EC[9:0]-SC[9:0]+1 must be divisible by 2.
Failure to 'round off' your update regions to meet these criteria will result in the kind of intermittent 45 degree skewing that looks like tearing but is in fact a restriction of the display hardware. Your screen shots look to me like this is what was happening. A full screen update avoids the issue as 536x240 meets these criteria.
////////////////////////////////////////////////////////////////////////////////////////////////////
So partial updates might seem to corrupt in an unpredictable manor but by 'quantizing' your region dimensions and start coordinates according to the datasheet stipulations it should work cleanly.
nik

@diegomacario
Bug found:
In rm67162.cpp line 167 change
t.base.addr = 0x003C00; to t.base.addr = 0x002C00;
Please try your code again and report back.
Thanks,
nik

Thanks so much, that did the trick for me! The ray-tracer is running beautifully now. These ESP32 chips are awesome. Here are some updated videos of the project running with the new driver:
https://github.com/Xinyuan-LilyGO/T-Display-S3-AMOLED/assets/8304271/15b63acc-7657-4420-9da0-bf8358eff7b9
https://github.com/Xinyuan-LilyGO/T-Display-S3-AMOLED/assets/8304271/bfe6f490-d0de-4acc-9358-01d0e42f2102

@diegomacario
Great work!
Yes ESP is awesome! Can't wait for the ESP32-P4.
Keep me up to date on your project on my github:
https://github.com/nikthefix/General-queries-and-discussion
nik

@nikthefix sorry for troubling you again, but earlier in this thread you mentioned that you have used bitbank2's AnimatedGIF library to play GIFs on the T-Display S3 AMOLED. I'm interested in doing the same.
I saw that in that library there's a nice TFT_eSPI example: https://github.com/bitbank2/AnimatedGIF/tree/master/examples/TFT_eSPI_memory
Since we don't have access to calls like tft.pushPixels on the T-Display S3 AMOLED, I tried to modify the example to use your driver instead. This commit contains the changes I made, they are pretty concise: https://github.com/diegomacario/Tiny-Ray-Tracer/commit/316e22b115aa57f7cf0f20945a23eb267731a557
The code compiles and runs successfully, but the GIF plays extremely slowly, as you can see in the video below:
https://github.com/Xinyuan-LilyGO/T-Display-S3-AMOLED/assets/8304271/cc165bc3-e00d-4b95-92c3-209db13b9b20
I just wanted to ask if you have any advice on how to use that library successfully on the T-Display S3 AMOLED. Thank you!

@diegomacario
The default GIF buffer size in that TFT_eSPI example is very small as Bitbank2 didn't want to assume that it would be run on boards with PSRAM. Since it breaks down the GIF frame into chunks and you are calling the full screen pushColors() for every chunk the result is slow. Perhaps look at his other example for 'Large RAM' - or words to that effect. It's much simpler and renders each frame in one go. It's not a TFT_eSPI specific example but with a bit of massaging it's definitely more suited to integration into your project. I'll have a go at it myself as I definitely need fast GIFs in TFT_eSPI also. It works flawlessly in LVGL on the T3-Amoled using the native LVGL GIF decoder so we know it's gonna be possible to do it well using TFT_eSPI.
nik

@nikthefix superb stuff !! Well done on getting it working !

@davidos81
Thanks very much! Still a lot of work to do on it to get it tidy.
nik


visual mode bug

Visual mode cannot select multiple lines, although I have used cmd+shift+p to try to make it a normal vscode selection.
A simple example, I often use the Comment Translate plug-in to translate comments in the source code.
If I use the visual mode of the vscode-vim plugin to select multiple lines, it is correct:

But if I use the visual mode of the vscode nvim plug-in to select multiple lines vscode multi-line mode, it still won’t take effect, but the last line is selected（i use cmd+shift+p command）:

what should I do??? @asvetliakov

Works on latest version


Add ReplaceKey method

This PR adds ReplaceKey method.
The new method is introduced for both Cache and Sharded types. It replaces the given key with the new key. The value remains the same. It returns true if the key is present and replaced, otherwise it returns false. If there is an existing entry for the new key, it is replaced.

Codecov Report

Merging #38 (0873bb1) into master (b1f3d7b) will decrease coverage by 2.35%.
The diff coverage is 88.42%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff             @@
##           master      #38      +/-   ##
==========================================
- Coverage   95.34%   93.00%   -2.35%
==========================================
  Files           8        8
  Lines         602      715     +113
==========================================
+ Hits          574      665      +91
- Misses         24       45      +21
- Partials        4        5       +1

Impacted Files
Coverage Δ

eviction.go
65.30% <0.00%> (-2.78%)
:arrow_down:

imcache.go
95.22% <89.36%> (-3.40%)
:arrow_down:


not working :(

Hey,
There are 2 installation instructions... which one to follow?

https://github.com/edvinaskrucas/laravel-user-email-verification
http://www.krucas.com/2016/04/user-email-verification-for-laravel-5/

Thanks,
Avi

ya same here, even publish didnt work

Not working with Laravel 5.3
Command php artisan verification:make
gives:
Migrations created successfully!
Installed VerifyController
Updated routes.php
[ErrorException]
file_get_contents(/var/www/html/l5/app/Http/routes.php): failed to open stream: No such file or directory

Find:
vendor/edvinaskrucas/laravel-user-email-verification/src/Krucas/LaravelUserEmailVerification/Console/MakeVerificationCommand.php
than bottom side change the appendRoutes function with the below one:
protected function appendRoutes()
{
    **$path = base_path('routes/web.php');**

    file_put_contents(
        $path,
        file_get_contents($path)."\n\n".file_get_contents(__DIR__.'/stubs/routes.stub')
    );
}

}
After that,
try it  php artisan verification:make
That's all !

@xparthx @burhanmt
https://github.com/jrean/laravel-user-verification


UI - Misleading information for non authenticated or expired auth tokens

From AP-4360
How is the user affected? And what is the expected behavior?
When a user enables the Visual tests addon as part of their Storybook setup and tries to open a new browser in which he's not authenticated or the auth token has expired, the user is presented with the following UI:

04/d18d3188-92c8-41d2-8225-0254aa284b52)
This feels like a regression, and the messaging needs to be clarified as the user has a project setup, including the configuration file. To which the user should be instructed to authenticate and not switch to a different account as the message suggests.
Additionally, the "Configuration should be improved" message bar, should be removed, more even as the user already has the project set up and the configuration file in place which can lead to confusion from the user as he's not sure what to do next or what the message is referring to.
How many and/or what class of users does this impact?
All
What are the steps for reproducing the issue?

Setup a Storybook with the Visual tests addon enabled
Run a build
Open a new browser in which you're not authenticated or the auth token has expired to see the information.

cc @jarel

I think we should have two links. One, a button, should say "Reauthenticate", and the second a link, "Switch account". We don't want to indicate if a project exists or not in CH.

That "Configuration should be improved" message is showing up often at the wrong time/place. We should have a discussion to work out when to show it in another issues.


Getting Started Building JVM Libraries

What's this issue? To add a link to the guide to the Guides page?

Ah, OK. The individual guide issues are going in this repo it seems. Sorry for the noise.


Declaration of Column::data does not compatible with Fluent::data

Summary of problem or feature request
Error
Declaration of Yajra\DataTables\Html\Column::data(array|string $value): static must be compatible with Illuminate\Support\Fluent::data($key = null, $default = null)
Code snippet of problem
File vendor/yajra/laravel-datatables-html/src/Html/Column.php, function data (line 305 - 310) was the reason:
public function data(array|string $value): static
{
     $this->attributes['data'] = $value;

     return $this;
}

System details
Operating System: Linux Debian 12
PHP Version: 8.3
Laravel Version: laravel/framework ^11.34
Laravel-Datatables Version: yajra/laravel-datatables ^11.0
Solution
File vendor/yajra/laravel-datatables-html/src/Html/Column.php, change function data (line 305 - 310) to:
public function data($key = null, $default = null): static
{
    $this->attributes['data'] = $key;

    return $this;
}

Please help us asap

The issue was due to a recent update in the Fluent class via https://github.com/laravel/framework/pull/53665.
We will have to wait for it to be reverted or not before we make changes.

@yajra This can be fixed by simply making the definition compatible and overriding the visibility:
class Column extends Fluent
{
    // ...

    public function data(mixed $value, mixed $default = null): static
    {
        $this->attributes['data'] = $value;

        return $this;
    }
}

@stevebauman Yes, it is the quickest solution as discussed in https://github.com/yajra/laravel-datatables/issues/3201. But some devs might not like that idea.

For some releases, what if we stick with the current approach but add a deprecation warning?
/**
* @deprecated 11.7.0 Use setData instead to set column data.
*
* Get data from the fluent instance.
*
* @param  array|string  $key
* @return mixed
*/
public function data($key = null, $default = null)
{
// Trigger a deprecation warning when this method is called
trigger_error('The data() method is deprecated. Use setData() instead.', E_USER_DEPRECATED);
return $this->setData($key);

}
/**
* Set column data option value.
*
* @return $this
*
* @see https://datatables.net/reference/option/columns.data
* @see https://datatables.net/manual/data/orthogonal-data
*/
public function setData(array|string $value): static
{
$this->attributes['data'] = $value;
return $this;

}

For some releases, what if we stick with the current approach but add a deprecation warning?
/**
    * @deprecated 11.7.0 Use `setData` instead to set column data.
    *
    * Get data from the fluent instance.
    *
    * @param  array|string  $key
    * @return mixed
    */
public function data($key = null, $default = null)
{
    // Trigger a deprecation warning when this method is called
    trigger_error('The data() method is deprecated. Use setData() instead.', E_USER_DEPRECATED);

    return $this->setData($key);
}

/**
    * Set column data option value.
    *
    * @return $this
    *
    * @see https://datatables.net/reference/option/columns.data
    * @see https://datatables.net/manual/data/orthogonal-data
    */
public function setData(array|string $value): static
{
    $this->attributes['data'] = $value;

    return $this;
}

I designed the Column builder to match the datatables.net (https://datatables.net/reference/option/columns) option. This way, it is easier to match and just call a magic method to set the desired options when looking at the official JS docs.
So it's a NO for me to go with deprecation. Thanks!

You have been managing this great package for a long time, so you have a better understanding of its usability. I have one short of suggestions that, We can remove the deprecation notice and use PHP DOC to notify the user about the logic update. However, we can make a new method that the user can directly use, like setData. And current, data method, which will redirect to parent if both arguments are provided. otherwise, it will be called setData internally.


Enddat 213

You should also add  a servletMapping in main/webapp/WEB-INF/web.xml so that we don't need to reference the page as UserGuide.jsp (probably userguide) . Also as part of this ticket, you should hook up the button in Intro.jsp that goes to the user guide (use userguide rather than UserGuide.jsp) and also hook up the Help button in the NavView in the data discovery page.

You should also add a servletMapping in main/webapp/WEB-INF/web.xml so that we don't need to reference the page as UserGuide.jsp (probably userguide) . Also as part of this ticket, you should hook up the button in Intro.jsp that goes to the user guide (use userguide rather than UserGuide.jsp) and also hook up the Help button in the NavView in the data discovery page.

Okay.

@mbucknell:
The requested changes have been made.


Introduce CaseLabelDQM and DQMCaseLabelComposite

For #840.

Note: this is a work in progress.  CaseLabelDQM is functional, DQMCaseLabelComposite has not been added yet.

Codecov Report

Merging #844 (c31471b) into main (43c5c57) will increase coverage by 0.13%.
The diff coverage is 98.83%.

@@            Coverage Diff             @@
##             main     #844      +/-   ##
==========================================
+ Coverage   88.61%   88.75%   +0.13%
==========================================
  Files          71       71
  Lines        6071     6153      +82
==========================================
+ Hits         5380     5461      +81
- Misses        691      692       +1

Impacted Files
Coverage Δ

dimod/discrete/discrete_quadratic_model.py
95.51% <98.83%> (+1.28%)
:arrow_up:

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 43c5c57...c31471b. Read the comment docs.

@arcondello Where should DQMCaseLabelComposite be defined?  New file in dimod/discrete/?

We don't "officially" support composites for DQM samplers. That said, IMO should be in a followup PR in under the dimod/composites/ namespace.
Another approach would be adding a flatten_sampleset function that turns INTEGER samplesets into BINARY ones. That is the main functionality added, right?

What is the behavior when I do dqm.to_numpy_vectors etc. Specifically I believe
new_dqm = CaseLabelDQM.from_file(dqm.to_file())
assert new_dqm == dqm

will fail. Same with .to_numpy_vectors etc.

Another approach would be adding a flatten_sampleset function that turns INTEGER samplesets into BINARY ones. That is the main functionality added, right?

For unique case labels, yes.  For shared, the values in the sampleset are mapped to the labels.  Both types of transformation are performed.

What is the behavior when I do dqm.to_numpy_vectors etc.

Correct, you won't get a CaseLabelDQM back, at this point.

Correct, you won't get a CaseLabelDQM back, at this point.

To me that seems like a poor user experience. Especially since that's what will happen if you submit a CaseLabelDQM to LeapHybridDQMSampler. I think we should at least overwrite the methods to raise NotImplementedError.

What is the behavior when I do dqm.to_numpy_vectors etc.

Correct, you won't get a CaseLabelDQM back, at this point.

Actually, that assert may not trigger.  I don't know DQM well enough to say.  Case labels are not serialized though, at this point.

You should get a CaseLabelDQM back, but it won't have labels on the cases.

Also, I don't think eq is defined for DQM, but you get the idea.

Ha, yeah, I just reached the same conclusion.

[..] but you get the idea.

Not totally sure I do.  I don't think we should speculate about some behavior that is important.  So, if conserving that (assumed) DQM behavior is important, we should first have a unit test to cover that behavior in DQM.  That would mean defining DQM.__eq__().  Then second we should have a unit test to cover the conservation of behavior in CaseLabelDQM.  Is that what you are thinking?

We use https://github.com/dwavesystems/dimod/blob/43c5c57e8b2bd5c29e25b54275fbbbc534f42fdc/tests/test_discrete_quadratic_model.py#L275 in the unittests already.
I don't think we should implement __eq__ for DQM, I somewhat regret doing so for BQM. But you could imagine doing DQM.is_equal(other). Similar to https://github.com/dwavesystems/dimod/blob/43c5c57e8b2bd5c29e25b54275fbbbc534f42fdc/dimod/binary/binary_quadratic_model.py#L1198

Right on, thanks.  I'll use assertDQMEqual for this.

BTW, that equality might be missing the offset added in https://github.com/dwavesystems/dimod/pull/838. Not really that relevant in this case but on the change you're planning to generalize.

Note: this is a work in progress. CaseLabelDQM is functional, DQMCaseLabelComposite has not been added yet.

This PR is functionally complete.  The design changed to use a utility method CaseLabelDQM.map_sample() instead of a composite.


Rename property to use snake_case

This might be the actual culprit for the issue I posted: https://github.com/daneden/Twift/issues/25
I only noticed it after seeing that I do get preview URLs for images without issues, but when there is a gif, the response fails
{\"media_key\":\"16_1527660993324752897\",\"type\":\"animated_gif\"},

🤞

Good catch @roblack!


Document the new gcloud package

Add documentation explaining that the gcloud gem is to be used to aid in the transition to google-cloud and multiple packages.
Currently in the multi-package documentation, there is no content at /#/docs/gcloud/master/gcloud.

This is a special case of #832: In addition to the README, etc, some additional work is needed for the Gcloud module (the package landing page in the gh-pages docs).


Occurrences tab fails when occs/list does not return "tna" (1.2)

good test case: collection #182204
Possible solutions:
(a) always return 'tna'
(b) if no 'tna', check each 'id_' return in some order against the accepted taxon tree, then use the first one that matches?

if no tna, use idn


Admin tables

Great plugin, only small thing but in the admin, it will not show in tables.

Not sure how to get this to show up in admin tables. Feel free to submit a pull request!