Handling of user volume adjustment

As it currently stands, as of #135, voice playback volume defaults at 0.25 * ffmpeg's default. If the user overwrites it, it will become the overwritten value (irrelevant of whether the set value is in decibels or as a factor) relative to ffmpeg's default.
Reasoning:

The current behaviour is confusing because if the user inputs 0dB, which should correspond to no change in gain relative to no volume setting at all, it will instead be louder (specifically, a 4x factor = +6 dB). This is unacceptable as decibels are a standardized unit.
This same problem also applies to factor volumes, though this is less important - the user will just have to remember to make their specified factor volume relative to 0.25 if they want it to work like ffmpeg's factor volume where 1 is no change in volume.
We are not writing ffmpeg here, we're writing discord.js, which abstracts from the internals - in my opinion, ffmpeg should just be an implementation detail that can possibly be changed at any time.
Possibly most importantly, neither of these two scales actually mean anything, they're completely arbitrary. The most common reasoning for the current behaviour is that the user should expect discord.js not to mess with their set volume, completely ignoring the fact that even if discord.js didn't change it, Discord most certainly would. Consistency between local ffmpeg encoding/playback and Discord playback can, will and should never be achieved.

TL/DR: User volumes should be relative to discord.js's internal scale, not ffmpeg's.

As is, a person hears a volume. If they think it's too loud, they would think to lower it. By how much? People natively think in terms of what's in front of them. Ergo, I agree.

The fact that these values are arbitrary should be more than enough reason to leave it as is. If in the docs it is explained that the discord.js default value is 0.25 then it is understandable to the user that changing this value to 0.5 will double the default volume and not half. It doesn't make sense to scale these values in relation to the discord.js value because if the user is changing the value then they already understand that the value is being sent directly to ffmpeg in place of discord.js's value.
My vote is to leave it as it.

That assumes people are thinking about it more as FFMpeg's argument than Discord.JS's. I'm having to retrain myself to think of it as FFMpeg's for this discussion, but the majority of the users?

@TehSeph That doesn't apply to decibel volumes though - see my first point.

@khionu Hints the reasoning for stating in the docs that the default value is 0.25. Then discord.js volume and ffmpeg volume become one in the same. No need for confusion.
@meew0 Decibels would still be in relation to ffmpeg's volume no matter what. Unless you want the library to include an entire equation for working out relative db adjustments... Which again is just more un-needed code. If the user is adjusting the volume then they should already be aware that the volume is in relation to ffmpeg's default and not the discord.js default.

Huh..... just thought of another point.... the user should already be reading up on FFMpeg for the purpose of file formats, this would be just one more little thing to check....

@TehSeph The specified decibel value shouldn't be in relation to anyone's default, it should be in relation to no change at all, i. e. not setting anything for the volume property. Relative dB adjustments are easy, just figure out the value for the default (10 log₁₀(0.25) ≈ -6 dB) and add the adjustment value onto that. In my opinion, volume adjustment should be intuitive enough that the user shouldn't necessarily have to read documentation for how it works, just what they have to do.
@khionu The user should not have to read up on ffmpeg's file formats..? I've never done it, it's easy enough if you understand that ffmpeg can highly likely handle your format just fine.

Some other points from Discord:

It would be entirely possible to get rid of discord.js's scaling altogether and setting the default to 1, but this would make it too loud for some end users.
The volume is already scaled relatively in a lot of other places (file data, file encoding, Discord, end user), getting rid of the relativity here makes it less consistent rather than more.
A scaling where 1 / 0dB is the default is a lot more intuitive than one where 0.25 / -6dB is. The user should have to read and understand how to change the volume, but he shouldn't have to read and understand what to change it to if it can be avoided.

@meew0 Reading the issue, I partly agree with you.
As a factor, it should indeed be as stated, but as dB it should be absolute
Scaling the value, whatever it is, should make it currval * scale.  That makes sense, whether from the user standpoint or not.  However, if the user says "I want it to be exactly x dB", then it should be exactly that.
What the default value is (or is relevant to) doesn't make a single difference in the world, as long as the above holds.  As the current implementation seems to cause at least one of the above statements to become false,  I vote to change it.

Heh.... that's what I said, until I understood decibels better....

I think we should leave it as 1 by default, and it's the end developer's responsibility to decide whether the audio they are playing is too loud or not. If they want to make sure that the audio they play is normal volume, they could just pass in 60dB themselves. I do not think we should try to decide for the developer by default.

I agree, the best course of action would be not setting a default at all. And, just to clarify it here, 60dB is not normal volume if input into ffmpeg - as I said before, ffmpeg decibel input is relative to no change at all, so normal volume would be 0dB. (60dB would be a linear factor of 10^6 = a million.)

I agree with leaving the value of one, to make adjusting it easier, though with the default value most of the developers can simply not pass it anything and be fine, it makes it more consistent. I do however think the doc's should very clearly state exactly how to lower the volume including a volume object and maybe an example line of code, just to make sure every developer can get their bot to a pleasant (or very painful) volume.

@hydrabolt it's already been adjusted to .25. 1 is painful to everyone, I have yet to hear of an exception.


Custom delimiter keys not working in mobile browser.

Hi Prakhar,
I have used react-tag-input in mobile friendly website with custom delimiter (comma). I have passed all the key code of keys I want to use as delimiter in delimiter props.
It works as expected in web browsers, chrome on ios  and safari on ios. But not on chrome browser for android.
Any help in this regard will be useful.

Ah, haven't yet given a try. Since I don't have an android device, can you paste the error message that you're seeing so that we can debug? Also, this issue arises only when you use a custom delimiter or in the default case too?

Hey, @prakhar1989 I can confirm this is not working on mobile devices with both default/custom delimiters.
Tested on iPhone X and One Plus 3T

@saurabh-sharma would you like to give PR for the fix ?

@ad1992 Will give it a shot!

@ad1992 Will give it a shot!

Are you still working on this issue?

Hey guys, I literally forgot working on this 😅 Thanks for reminding after a year though.
So I just started debugging this: https://react-tag-input-1nelrc.stackblitz.io/ on phone obviously.
In the example this function:
handleAddition(tag) {
   this.setState(state => ({ tags: [...state.tags, tag] }));
}

is transpiled to:
App.prototype.handleAddition = function (tag) {
    this.setState(function (state) { return ({ tags: state.tags.concat([tag]) }); });
};

But since I opened it on mobile, I saw some additional code in the transpiled method, which was slightly different from the one
So I just added a console.log to this method:
App.prototype.handleAddition = function (tag, str) { //this method had 2 params
    console.log(str, tag); //and a console.log too, which is not there in the code.
    this.setState(function (state) { console.log(">>>>>", state, state.tags.concat([tag])); return ({ tags: state.tags.concat([tag]) }); });
};

And as I expected, tags in state after concat is returning:

And obviously while adding another tag, when it tries looping over the existing tags and accesses tags.id it'll return undefined for the 3rd value and will cause the code to break.
Well, code seems to be written correctly, but somehow with the preview url is loading up the wrong code/cached code. Hence it's not an issue with this plugin but something wrong with stackblitz.io


Add a "build" target to package.json (or add a Makefile)

It would be nice to have a target for npm (or via Makefile) so we could say :
npm run build-dist
or
make build
This would execute :
npm run build && npm run format && npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint

I'm +1 for this.


document renaming does not work with site routing store

Hello,
I just tested the last version with Alfresco community 5.2 (GA 201707).
I use it with the site routing store "context".
I got one problem with document renaming : if the parameter "moveStoresOnNodeMoveOrCopy" is set to true, then I get an error when I try to rename a document in a "site content store" (not if the document is in the "original" contentstore). If this parameter is set to false, then the renaming works.
Error screenshot :

Can you help, please ?
Thanks in advance.
My configuration is the following :
# enable the addon
simpleContentStores.enabled=true

# define the names of stores to configure
# (multiple stores can be listed in comma-separated fashion)
simpleContentStores.customStores=newSiteFileStore,siteRoutingStore
# use the store as the global standard (instead of default fileContentStore)
simpleContentStores.rootStore=siteRoutingStore

# define siteRoutingStore as a routing store
simpleContentStores.customStore.siteRoutingStore.type=siteRoutingStore
# store all non-routed content into the default file content store
simpleContentStores.customStore.siteRoutingStore.ref.fallbackStore=fileContentStore
simpleContentStores.customStore.siteRoutingStore.value.moveStoresOnNodeMoveOrCopy=true

simpleContentStores.customStore.siteRoutingStore.map.storeBySitePreset.ref.site-dashboard=newSiteFileStore

simpleContentStores.customStore.siteRoutingStore.map.storeBySite.ref.essai2=fileContentStore

simpleContentStores.customStore.newSiteFileStore.type=siteRoutingFileStore
simpleContentStores.customStore.newSiteFileStore.value.protocol=site-store
simpleContentStores.customStore.newSiteFileStore.value.rootDirectory=${dir.root}/sitecontentstore
simpleContentStores.customStore.newSiteFileStore.value.useSiteFolderInGenericDirectories=true

Can you provide a stacktrace for that error? It would be nice to know at what code line that error is being triggered.

Hello,
sorry for the delay for my feedback.
I just retested this case, and I don't get any trace in the logs. I only get the error displayed in the Share user interface, but nothing is traced in the logs.

Finally I had some time to reproduce and fix this issue. The move handling did not distinguish between a move and a rename, as well as between move in site / between sites. This has been fixed now.


Bitwig 2.4 reports error after scanning plugin

Bitwig 2.4.3 (on Windows 10) does not show veeseevstrack_instr in the list of available plugins. Instead veeseevstrack_instr (and veeseevstrack_effect) are in the list of "Plugins with errors" with the following information:

com.bitwig.flt.library.metadata.reader.exception.CouldNotReadMetadataException: could not read metadata: Could not read VST plug-in metadata
64 bit plugin host reported errors: Pluginhost returned non zero exit code -1073740791

In Ableton Live 10.0.6 veeseevstrack_instr is in the plugin list but as soon as I drop it on a track Ableton crashes.
The last lines in log.txt are:

2019-05-10T22:26:44.173741: info: MemoryUsage: V: 5.1 GB, R: 489.5 MB, P: 457.2 MB
2019-05-10T22:26:59.343743: info: VST 2.4: Going to create: veeseevstrack_instr
2019-05-10T22:26:59.351020: info: VST 2.4: DLL File Version:
2019-05-10T22:26:59.351053: info: VST 2.4: Plugin Path: C:\Program Files\VstPlugIns\vst2_bin\veeseevstrack_instr.dll
2019-05-10T22:26:59.355674: info: VST: Vendor Version = 1000 (0x3E8)

I tried several times, restarting, reinstalling etc.

Just tested it in Bitwig 2.5.1 on Windows 10. Works fine.
Same in Ableton Live 10.0.6.
Maybe your computer / your graphics card is too old. Try updating the GPU drivers !

Solved it: veeseevstrack_instr.dll needs write permission on the vst2_bin folder.


Istio delegate does not work and get 404

(NOTE: This is used to report product bugs:
To report a security vulnerability, please visit https://istio.io/about/security-vulnerabilities
To ask questions about how to use Istio, please visit https://discuss.istio.io)
Bug description
[ ] Docs
[ ] Installation
[ X] Networking
[ ] Performance and Scalability
[ ] Extensions and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
[ ] Upgrade
Expected behavior
Istio delegate should work when routing from one virtual service to the other.
Steps to reproduce the bug

Create a knative service which creates the following virtual service

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: torchserve-transformer-transformer-default-ingress
  namespace: default
spec:
  gateways:
  - knative-serving/knative-ingress-gateway
  hosts:
  - torchserve-transformer-transformer-default.default.example.com
  - match:
    - authority:
        prefix: torchserve-transformer-transformer-default.default.example.com
      gateways:
      - knative-serving/knative-ingress-gateway
    retries: {}
    route:
    - destination:
        host: torchserve-transformer-transformer-default-00001.default.svc.cluster.local
        port:
          number: 80
      headers:
        request:
          set:
            Knative-Serving-Namespace: default
            Knative-Serving-Revision: torchserve-transformer-transformer-default-00001
      weight: 100

send a request to the service via istio ingress gateway with HOST torchserve-transformer-transformer-default.default.example.com, it works and get 200 response

Create the following delegate

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: torchserve-transformer
  namespace: default
spec:
  gateways:
  - knative-serving/knative-ingress-gateway
  hosts:
  - torchserve-transformer.default.example.com
  http:
  - delegate:
      name: torchserve-transformer-transformer-default-ingress
      namespace: default

send a request to the service via istio ingress gateway with HOST torchserve-transformer.default.example.com, it works and get 404 response
run following istioctl command does not see the routes generated for the delegate HOST
istioctl proxy-config routes istio-ingressgateway-6d8565884d-bgqt5.istio-system

Version (include the output of istioctl version --remote and kubectl version --short and helm version --short if you used Helm)
istioctl version --remote
client version: 1.9.0
control plane version: 1.9.0
data plane version: 1.9.0 (3 proxies)

How was Istio installed?
Environment where the bug was observed (cloud vendor, OS, etc)
Kind create cluster
Additionally, please consider running istioctl bug-report and attach the generated cluster-state tarball to this issue.
Refer cluster state archive for more details.

The vs.Hosts must be empty for delegate, so the above config is wrong.

Istio need to know it is delegate vs by empty hosts

@hzxuzhonghu the host is not empty on the istio doc https://istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate

The delegate Vs has no hosts
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
namespace: nsA
spec:
http:

match:

uri:
prefix: "/productpage/v1/"
route:
destination:
host: productpage-v1.nsA.svc.cluster.local

route:

destination:
host: productpage.nsA.svc.cluster.local

So this is working as expected


Replace the name from ld to.. something else?

I've gotten feedback regarding the fact that ld was a misleading name for this package several times from colleagues and I tend to agree. While I was trying to provide a short name for people to easily identify, it doesn't provide information regarding its purpose (much like a badly named variable).
I want the name distro.. but apparently it's already taken by another initial implementation of the same functionality.
Maybe "dist" as a name for this instead as it will be natural to write:
import dist

dist.id()
dist.info()
...

thoughts?

#104 covers this. Of course, we'll have to replace the name of the repo, some more stuff in the readme and rtfd stuff.. but we should discuss if this is at all something we want or not.

I think this is a good idea.

dist could be seen as short for "distribution", which is the Python term fora partivular release of a project. See or example PEP 435.
I wonder if it'd be possible for you to join forces with @MartijnBraam and use distro as the name.

This looks exactly like what I'm trying to do with distro.

I looked at your distro project, and that's what I think, too.
Why don't you have a look at the code of this project here, and see whether you like it. :-)

I thought I should throw this in: How about making the name independent of Linux terminology, so that it can be extended for other OS types in the future?
e.g. "osinfo"

osinfo is already taken on pypi, operatingsystem is still available.
It's a shame that os is taken...

I did not find an osinfo package on PyPI, but the osinfo module namespace is used by the py-osinfo package: https://github.com/workhorsy/py-osinfo. I assume that's what you refer to.
That package has a very nice way to provide OS information across different types of operating systems, with its type and brand attributes.
Looking at a number of similar packages on PyPI, it seems that for Linux, they all sit on top of platform.dist() or platform.linux_distribution(), so they could nicely exploit ld.

@MartijnBraam, we're done some extensive work here and it would be great if we could use the name distro - of course, only if you find it provides enough value for what you were looking to initially implement.
@andy-maier, If we decide this package is bound to Linux, we could also call it linux-distribution. Not as catchy.. but possible.

I think using the distro name is fine. I haven't put a lot of work in the current distro package and this package implements a superset of the functionality of mine. The only thing missing is that I (tried) to implement some interface for getting the primary package manager for the current distro.

Wonderful. Would you like to remove the distro package from PyPI so that I can deploy this only under the new name?
I would also like to add you to the list of collaborators in the repo if it's ok with you.

@MartijnBraam, #115 implements the change to distro. If you decide we can move on with this, you're also invited to review it :)

I've removed distro from pypi so you can push it with the new name

Done. ld was moved to distro and is now hosted at https://pypi.python.org/pypi/distro/0.6.0. @MartijnBraam, would you like me to add you as a collaborator?

@nir0s that would be great

Done


1.0.5 nuget version bug

Hi we use Hangfire.RecurringJobAdmin 1.0.5  nuget version for .net core 6.0.
we have error JobExtension.css
Please Can you send new nuget version and fix this issue ?
nuget package code
#app {
position: relative !important;
left: -229px !important;
}
github code
#app {
position: relative !important;
left: 0px !important;
}

+1

+1

I see the author is not going to create a new tag with this tag?


Try uv for tox runs

Looks like it may be a little faster but the variability is so high on GHA maybe not worth it for now.


Re-enable testReplicationWithMissingRevision

Re-enable testReplicationWithMissingRevision when internal case 79041 is resolved

This test has been renabled turned out that _bluk_get was causing the problem.


Sync OC balances with bank balances

In our discussions about #3983 and the current related problem solving we're doing at OCF, it's become clearer to me that one of the key needs is reconciliation between bank account balances and OC balances, which is less abstract than "integrate with accounting software".
While accounting software is the way pretty much all entities achieve syncing between their bank account and their books, perhaps it's useful not to make assumptions about the solution, and instead drill down to identify the component needs. So this issue sets aside the whole other part about tax/audit/government reporting (that does really need to go through an integration with accounting software, I think), and focuses only on the real money vs OC money sync function.
User story
As a Host admin, I want to keep the balance OC tells me I hold and the money I actually hold in sync, so that I can identify any problems (fraud, record-keeping errors, etc) and have more confidence in OC numbers being accurate and synced with reality (since OC money is virtualised).
Not all Hosts will want this. Plenty of Hosts do not run all their money through OC and are fine with OC and the bank telling very different stories. But for Hosts that do run their whole operation through OC (all our first part Hosts), this is an important function.
Best solution for this problem
Some way of connecting to and ingesting bank feed data, either directly or via an integration with a tool like Quickbooks. Matching each expense paid out, each transaction in merchant accounts, and contributions received with the corresponding bank and merchant account transactions. Some of this is highly automatable (we already have merchant account transaction IDs in our data, for example), and some would need to be manually matched.
Personally I think this would be a nightmare to build natively, which is why I've defaulted to looking at integrations with existing tools. But I could be wrong.
MVP
Open to ideas, but what comes to mind for me is:
A manually entered month- and year-end close process, where the Host admin goes on OC and enters the closing balance of all its bank and merchant accounts (Wise, Paypal, Stripe etc), and then can compare how much money they actually hold with how much OC thinks they should be holding. This data can be stored over time to go into Host reports on the dashboard as a historical auditing function.
Even as an MVP, the above would greatly help accounting processes, and will as catch problems earlier.
P2 low frequency, high impact

As the ED of DemocracyLab, a 501c3 nonprofit org, I want to open my organization's finances to public view because I believe in transparency. I want to outsource most accounting and tax services. I currently use Quickbooks to track expenses, submit and pay invoices, and run payroll. Being able to connect my bank account to Open Collective or integrate with Quickbooks would allow me to maintain operational efficiency while benefiting from earned trust.

We shipped the first version for a project that answers this need: https://github.com/opencollective/opencollective/issues/7416. This feature lets you easily import a CSV to expenses/contributions, with the hypothetical future plan to let host admins plug a bank account to import the transactions from there rather than a CSV.
You can enable it by going to the User Menu > Preview features:

Then go to your Host Dashboard > Transactions and click the "Import" button in the top right.
Please share if you have any feedback!


Windows Support?

First off - thank you for this project and your others (we use Textual a lot!)
Having some issues using this in Windows, not sure if Windows is supposed to be supported or not.
Installation:

pipx 1.4.3
Windows 11
Python 3.11.2

Issues so far:

mmap.mmap call is a little different on Windows or atleast on my machine?
Had to change prot=mmap.PROT_READ to access=mmap.ACCESS_READ - found this error here: https://github.com/mvt-project/mvt/issues/61

Now I am getting - AttributeError: module 'os' has no attribute 'pread'
It is unclear to me how I can edit this to work on Windows because I am not confident I understand what you are doing here with os.preread

Cheers

It doesn't run on Windows yet. I've updated the README.
The file watcher will also need updating. It uses the selectors API which only works with sockets on Windows.
It will be a little work for Windows, but it is coming.

Toolong runs on Windows from 1.2.0 onwards...


Offline debug zip instruction

Title
When a server does not come up after an upgrade, the debug zip cannot be used.
Description
an offline debug zip instruction Will be useful.
Outline
Expected Audience
Operational DBA

@knz Are there any workarounds for this scenario we should document?

debug zip relies on the nodes in the cluster being up. Without the nodes being up, the manual option is to gather up the log files, though this doesn't capture the same info. I suppose we could provide a command to run on each node in the cluster, though gathering the same data as debug zip will be difficult as sometimes the info is spread across multiple nodes.

Also a lot of the info is stored in KV. We can't decode this data without waking up some of the layers in CockroachDB (Storage, KV, Txn, SQL), although we can achieve this even if server/gossip/replication is hosed.

@robert-s-lee please raise this issue to PM. This is a L-sized project actually and will need to be budgeted on the roadmap.

@dianasaur323 FYI as we lock down 1.2

I've been punting any work on debug zip in 1.2, but it would help to answer to following questions in order to prioritize.

How often have we actually used the debug zip and fixed issues for customers?
Is all the info necessary in the debug zip to fix issues? Or is exporting logs adequate?
We do have exporting admin UI graphs on the roadmap for 1.2. How would this work if the cluster is offline?

Point 1: I don't know. @a-robinson, @bdarnell?
Point 2: yes there is plenty in debug zip which is not in the logs. Schemas, network config, to name a few.  The list of things is listed at the beginning of https://www.cockroachlabs.com/docs/stable/debug-zip.html, see everything beyond "log files".
Point 3: good question. We can't!

Maybe this overall issue is strongly suggesting we need new development to collect troubleshooting data out of an offline cluster. The overall architecture of debug zip  is woefully inadequate to achieve this.

With admin UI graph export, that will also include the new /debug pages, so we would get configs there. Thank you for the link. The problem still remains that we can't get that data in offline mode.
In my opinion, getting some sort of solution for offline debugging is more important than exporting admin UI graphs, although the project does seem large. We have a meeting coming up later today to finalize scope, and I think we should bump this up in priority.

Yes I agree that enabling us to troubleshoot issues is probably higher priority than most other feature work.

How often have we actually used the debug zip and fixed issues for customers?

I've used debug zips to help with customer issues exactly twice. The logs are usually my main target, but other parts of it have been useful too (metrics, settings, ranges, etc.).
I'm not sure how much offline zips would give us, since if the problem is that a node can't start up, the log files (with some extra verbosity turned on if needed) would be my main resource for determining why it won't start up. And of course once it's started up, a debug zip could be generated.
Am I alone on this? What resources from an offline zip would someone use to debug startup problems?

Gleaning info from the log files to figure out why the node cannot restart is what would be useful.  Was the troubleshooting done live or offline?  For customers C and A, we had web conferences for an hour looking at the logs among various nodes.  This will be an issue as we scale out.

I've found log files useful but I don't think I've ever actually used a debug zip.
We also have some offline diagnostic tools under the cockroach debug command (cockroach debug range-descriptors has been particularly helpful in the past), but I think just collecting log files would be enough of a starting point. (This doesn't even necessarily need to be built into the cockroach command, since the main thing to be done is for the user to ssh around and copy files).

Collecting notes from the brief discussion we just had about this line item - there may be a cockroach command we could run on a single node to pull in some of the local data. That being said, we could also document what to do when the cluster goes down. @jseldess

@dianasaur323, is this something we still want to document at some point? Should it be a priority for 2.1?

@jseldess We are making some fixes here, but no documentation needed. We are just going to be adding some additional metrics and making debug work when nodes are down.

Thanks, @dianasaur323. I'll close this then and open a new issue tracking the product work.


Bootstrapping custom LDIF

I'm struggling with the --copy-service command to get a ldif file loaded by OpenLDAP with the vanilla osixia/openldap image.
Weirdly, doing the same thing with a custom image build works absolutely fine.
Obviously doing something stupid here so any help appreciated....!
--
99-add-content.ldif
# Create OUs
dn: ou=People,dc=xmansion,dc=local
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=xmansion,dc=local
objectClass: organizationalUnit
ou: Groups

# Create Groups
dn: cn=admins,ou=Groups,dc=xmansion,dc=local
objectClass: posixGroup
cn: admins
gidNumber: 5000

# Create Users
dn: uid=bill,ou=People,dc=xmansion,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: bill
sn: smith
givenName: Bill
cn: Bill Smith
displayName: Bill Smith
uidNumber: 10000
gidNumber: 5000
userPassword: password
gecos: Bill Smith
loginShell: /bin/bash
homeDirectory: /home/bsmith

Vanilla image
This does not work as expected and querying with docker exec ldap ldapsearch -x -H ldap://localhost -b dc=xmansion,dc=local -D "cn=admin,dc=xmansion,dc=local" -w mypassword gives me the following output:
# extended LDIF
#
# LDAPv3
# base <dc=xmansion,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# xmansion.local
dn: dc=xmansion,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: Mancave Inc.
dc: xmansion

# admin, xmansion.local
dn: cn=admin,dc=xmansion,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9L0tER0o1cnJHaUIxZjM4RHpuK1Q3eGhINDdoTW9nYVE=

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

It seems as though the custom ldif just isn't being found and executed?
docker-compose.yml
version: '3'

services:
  openldap:
    container_name: ldap
    image: osixia/openldap
    env_file: ./services/openldap/openldap.env
    command: --copy-service -l debug
    networks:
      - traefik_public
      - auth_internal
    volumes:
      - ./services/openldap/ldif:/container/service/slapd/assets/config/bootstrap/ldif/custom

networks:
  # Used to expose openldap to keycloak
  traefik_public:
    external: true

  # Used to expose openldap to other apps which want to talk to LDAP
  auth_internal:
    external: true

Custom build
This works as expected and querying with docker exec ldap ldapsearch -x -H ldap://localhost -b dc=xmansion,dc=local -D "cn=admin,dc=xmansion,dc=local" -w mypassword gives me the following output:
# extended LDIF
#
# LDAPv3
# base <dc=xmansion,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# xmansion.local
dn: dc=xmansion,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: Mancave Inc.
dc: xmansion

# admin, xmansion.local
dn: cn=admin,dc=xmansion,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9N1UyOFVFbEY5WWlZS2hIOVBwdjNoNXJsZ1ZHQ0RPUnQ=

# People, xmansion.local
dn: ou=People,dc=xmansion,dc=local
objectClass: organizationalUnit
ou: People

# Groups, xmansion.local
dn: ou=Groups,dc=xmansion,dc=local
objectClass: organizationalUnit
ou: Groups

# admins, Groups, xmansion.local
dn: cn=admins,ou=Groups,dc=xmansion,dc=local
objectClass: posixGroup
cn: admins
gidNumber: 5000

# bill, People, xmansion.local
dn: uid=bill,ou=People,dc=xmansion,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: bill
sn: smith
givenName: Bill
cn: Bill Smith
displayName: Bill Smith
uidNumber: 10000
gidNumber: 5000
userPassword:: cGFzc3dvcmQ=
gecos: Bill Smith
loginShell: /bin/bash
homeDirectory: /home/bsmith

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

docker-compose.yml
version: '3'

services:
  openldap:
    container_name: ldap
    build:
      context: ./services/openldap
      dockerfile: Dockerfile
    env_file: ./services/openldap/openldap.env
    networks:
      - traefik_public
      - auth_internal

networks:
  # Used to expose openldap to keycloak
  traefik_public:
    external: true

  # Used to expose openldap to other apps which want to talk to LDAP
  auth_internal:
    external: true

Dockerfile
FROM osixia/openldap
# https://github.com/osixia/docker-openldap#extend-osixiaopenldap124-image

ADD ldif /container/service/slapd/assets/config/bootstrap/ldif/custom

I use these debug steps to identify the issues I have when I am working with osixia/openldap.

You could go inside the openldap container and check the contents of the /container/service/slapd/assets/config/bootstrap/ldif/custom directory to see if your ldif file is there(If it's not there, you can check if your volume mount has any problem)
If it is there, you could issue your own ldapmodify command to your ldif file.

ldapadd -Z -D {{ ADMIN_DN}} -w {{ ADMIN_PW }} -f {{ ABSOLUTE_PATH_TO_LDIF_FILE }}

There are instances that if there are syntax errors in your LDIF file, it would just be ignored by the image.
Hope these helps.

I have a similar issue and I think is not necessary to open a new issue now.
I am using docker compose format with "configs" option. It will mount every content read only, but independently from the --copy-service, the code try to apply a chown and the container is falling.
Software version: 1.2.5 and 1.3.0 (tested on both)
Relevant part of the docker compose file:
Preparation (Define source) (the .ldif file is contains valid content. It was verified earlier)
configs:
  example_config:
    file: /tmp/example.ldif

Later in the compose file to apply the configuration:  (configs section)
services:
  ldap:
    image: osixia/openldap:1.3.0 # 1.2.5
    networks:
      - ldap-net
    ports:
      - target: 389
        published: 6389
        protocol: tcp
        mode: ingress
      - target: 636
        published: 6636
        protocol: tcp
        mode: ingress
    environment:
      LDAP_LOG_LEVEL: "256"
      LDAP_ORGANISATION: "Example Inc."
      LDAP_DOMAIN: "example.org"
      LDAP_BASE_DN: ""
      LDAP_ADMIN_PASSWORD: "admin"
      LDAP_CONFIG_PASSWORD: "config"
      LDAP_READONLY_USER: "false"
      LDAP_READONLY_USER_USERNAME: "readonly"
      LDAP_READONLY_USER_PASSWORD: "readonly"
      LDAP_RFC2307BIS_SCHEMA: "false"
      LDAP_BACKEND: "mdb"
      LDAP_TLS: "true"
      KEEP_EXISTING_CONFIG: "false"
      LDAP_REMOVE_CONFIG_AFTER_SETUP: "false"
      LDAP_SSL_HELPER_PREFIX: "ldap"
    configs:
      - source: ldap_demo_config
        target: /container/service/slapd/assets/config/bootstrap/ldif/custom/example.ldif
        uid: '999' # openldap user in the container
        gid: '999' # openldap group in the container
    volumes:
      - ldap_config:/etc/ldap/slapd.d
      - ldap_db:/var/lib/ldap
      - ldap_certs:/container/run/service/slapd/assets/certs/
    command: ['--copy-service', '--loglevel debug']

Result during the container startup:
*** Running /container/run/startup/:ssl-tools...
 *** Running /container/run/startup/slapd...
chown: changing ownership of '/container/service/slapd/assets/config/bootstrap/ldif/custom/example.ldif': Read-only file system
*** /container/run/startup/slapd failed with status 1
*** Killing all processes...

I tried to and , then remove the --copy service flag, but it didn't affect the problem.
I changed the path to  /container/**run/**service/slapd/assets/config/bootstrap/ldif/custom/example.ldif.
Result:  the container will started, but  ldif file will not applied.
Probably, this is the best way to add our custom configs with docker compose file.  Currently the code try to override the ownership on the "/container/service/slapd/assets/config/bootstrap/ldif/custom/" folder recursively
Possible solutions for the issue:

Prepared directories with prepared right ownership and access rights and not change the ownership on the directory during the start.

Add a special environment variable to avoid the ownership changing the folder and its contents.

I found the  "DISABLE_CHOWN" variable, but it generate other issue during the start process:
*** Running /container/run/startup/:ssl-tools...
*** Running /container/run/startup/slapd...
Start OpenLDAP...
Waiting for OpenLDAP to start...
Add TLS config...
No certificate file and certificate key provided, generate:
/container/service/slapd/assets/certs/ldap.crt and /container/service/slapd/assets/certs/ldap.key
2019/12/05 08:39:47 [INFO] generate received request
2019/12/05 08:39:47 [INFO] received CSR
2019/12/05 08:39:47 [INFO] generating key: ecdsa-384
2019/12/05 08:39:47 [INFO] encoded CSR
2019/12/05 08:39:47 [INFO] signed certificate with serial number<PHONE_NUMBER>91485821425214368443093861167456094075
Link /container/service/:ssl-tools/assets/default-ca/default-ca.pem to /container/service/slapd/assets/certs/ca.crt
*** /container/run/startup/slapd failed with status 80

*** Killing all processes...

The certs are generated by the image itself and I would like to add a custom LDIF file and unfortunately these combination is failing.

I found the solution for my issue!
When I configure a volume under anything /container/run/ any subdirectory the container will be broken!

Might be unrelated, but I get this when I try to mount custom ldifs:
Remove config files...
rm: cannot remove '/container/service/slapd/assets/config/bootstrap/ldif/custom': Device or resource busy
*** /container/run/startup/slapd failed with status 1```

anyone has any progress with seeding the ldap db using osixia's image ?

I use these debug steps to identify the issues I have when I am working with osixia/openldap.

You could go inside the openldap container and check the contents of the /container/service/slapd/assets/config/bootstrap/ldif/custom directory to see if your ldif file is there(If it's not there, you can check if your volume mount has any problem)
If it is there, you could issue your own ldapmodify command to your ldif file.

ldapadd -Z -D {{ ADMIN_DN}} -w {{ ADMIN_PW }} -f {{ ABSOLUTE_PATH_TO_LDIF_FILE }}

There are instances that if there are syntax errors in your LDIF file, it would just be ignored by the image.
Hope these helps.

I would like to add that i have used this command line with switch -n to just display in terminal what happening during an ldapadd function. It will show syntax errors within your LDIF file.

I fixed my issue with adding

KEEP_EXISTING_CONFIG=false # as environment (even docs says default is false) and
command: --copy-service

I have a similar issue and I think is not necessary to open a new issue now.
I am using docker compose format with "configs" option. It will mount every content read only, but independently from the --copy-service, the code try to apply a chown and the container is falling.
Software version: 1.2.5 and 1.3.0 (tested on both) Relevant part of the docker compose file:
Preparation (Define source) (the .ldif file is contains valid content. It was verified earlier)
configs:
  example_config:
    file: /tmp/example.ldif

Later in the compose file to apply the configuration: (configs section)
services:
  ldap:
    image: osixia/openldap:1.2.5
    networks:
      - example-ldap
    ports:
      - target: 389
        published: 6389
        protocol: tcp
        mode: ingress
      - target: 636
        published: 6636
        protocol: tcp
        mode: ingress
    environment:
      LDAP_LOG_LEVEL: "256"
      LDAP_ORGANISATION: "Example Inc."
      LDAP_DOMAIN: "example.org"
      LDAP_BASE_DN: ""
      LDAP_ADMIN_PASSWORD: "admin"
      LDAP_CONFIG_PASSWORD: "config"
      LDAP_READONLY_USER: "false"
      LDAP_READONLY_USER_USERNAME: "readonly"
      LDAP_READONLY_USER_PASSWORD: "readonly"
      LDAP_RFC2307BIS_SCHEMA: "false"
      LDAP_BACKEND: "mdb"
      LDAP_TLS: "true"
      KEEP_EXISTING_CONFIG: "false"
      LDAP_REMOVE_CONFIG_AFTER_SETUP: "false"
      LDAP_SSL_HELPER_PREFIX: "ldap"
    configs:
      - source: ldap_demo_config
        target: /container/service/slapd/assets/config/bootstrap/ldif/custom/example.ldif
        uid: '999' # openldap user in the container
        gid: '999' # openldap group in the container
    volumes:
      - ldap_config:/etc/ldap/slapd.d
      - ldap_db:/var/lib/ldap
      - ldap_certs:/container/run/service/slapd/assets/certs/
    command: ['--copy-service', '--loglevel debug']

Result during the container startup:
*** Running /container/run/startup/:ssl-tools...
 *** Running /container/run/startup/slapd...
chown: changing ownership of '/container/service/slapd/assets/config/bootstrap/ldif/custom/example.ldif': Read-only file system
*** /container/run/startup/slapd failed with status 1
*** Killing all processes...

I tried to and , then remove the --copy service flag, but it didn't affect the problem. I changed the path to /container/**run/**service/slapd/assets/config/bootstrap/ldif/custom/example.ldif. Result: the container will started, but ldif file will not applied.
So in this case not possible to add quickly LDIF files to these folders, because these configs will be writable and not possible to change the rights on the file.
From docker compose reference:

Configs cannot be writable because they are mounted in a temporary filesystem, so if you set the writable bit, it is ignored.

Source: Docker compose reference
Probably, the "configs" parameter is the best way to add our custom configs. Currently the code try to override the ownership on the "/container/service/slapd/assets/config/bootstrap/ldif/custom/" folder recursively, but it will not be applied anymore (reason above in docker compose reference).
Possible solutions for the issue:

Prepared directories with prepared right ownership and access rights and not change the ownership on the directory during the start.
Add a special environment variable to avoid the ownership changing the folder and its contents.

Many thanks for help and any idea.

Thanks for giving solutions. Use LDAP_SEED_INTERNAL_LDIF_PATH work
env:
  - name: LDAP_SEED_INTERNAL_LDIF_PATH
    value: "/home/ldif"


Feature/gh 99 more clang versions

Closes #99

@gbm25 I suggest you to skip the Clang 14 pipeline, since we won't support Clang 14 directly anymore. The user still can use Zork++ with Clang 14, but it won't be our target to offer support them, since we've already implemented a lot of features that aren't available on that frontend version (like module partitions, for example).

@gbm25 and when you can, open the pull request. Changes are ready to be merged when you commit that workflow without Clang 14. And this changes won't generate a release, so it's fine.

@gbm25 and when you can, open the pull request. Changes are ready to be merged when you commit that workflow without Clang 14. And this changes won't generate a release, so it's fine.

I removed Clang 14 from the tested versions.
I also changed the job name to reflect the Clang version being tested, to make it easier to identify in case of failure.


Unable to install rsmgclient using Cargo

Hello, thanks for building this Rust driver, I appreciate it!
Just wanted to let you know, I'm facing an error when I try to install it using Cargo. Here's the output of the cargo install rsmgclient invocation:
    Updating crates.io index
  Downloaded rsmgclient v2.0.0
  Downloaded 1 crate (156.7 KB) in 0.67s
  Installing rsmgclient v2.0.0
  Downloaded env_logger v0.8.4
  Downloaded libloading v0.7.4
  Downloaded regex v1.7.0
  Downloaded which v3.1.1
  Downloaded vec_map v0.8.2
  Downloaded textwrap v0.11.0
  Downloaded peeking_take_while v0.1.2
  Downloaded lazycell v1.3.0
  Downloaded proc-macro2 v1.0.47
  Downloaded rustc-hash v1.1.0
  Downloaded num-integer v0.1.45
  Downloaded unicode-ident v1.0.5
  Downloaded strsim v0.8.0
  Downloaded clang-sys v1.4.0
  Downloaded cmake v0.1.49
  Downloaded unicode-width v0.1.10
  Downloaded shlex v1.1.0
  Downloaded iana-time-zone v0.1.53
  Downloaded ansi_term v0.12.1
  Downloaded humantime v2.1.0
  Downloaded cc v1.0.74
  Downloaded clap v2.34.0
  Downloaded chrono v0.4.22
  Downloaded maplit v1.0.2
  Downloaded core-foundation-sys v0.8.3
  Downloaded time v0.1.44
  Downloaded cexpr v0.4.0
  Downloaded bindgen v0.58.1
  Downloaded libc v0.2.137
  Downloaded regex-syntax v0.6.28
  Downloaded 30 crates (2.2 MB) in 1.46s
   Compiling libc v0.2.137
   Compiling memchr v2.5.0
   Compiling glob v0.3.0
   Compiling autocfg v1.1.0
   Compiling version_check v0.9.4
   Compiling cfg-if v1.0.0
   Compiling clang-sys v1.4.0
   Compiling nom v5.1.2
   Compiling log v0.4.17
   Compiling proc-macro2 v1.0.47
   Compiling aho-corasick v0.7.19
   Compiling atty v0.2.14
   Compiling unicode-width v0.1.10
   Compiling quote v1.0.21
   Compiling regex-syntax v0.6.28
   Compiling unicode-ident v1.0.5
   Compiling textwrap v0.11.0
   Compiling libloading v0.7.4
   Compiling num-traits v0.2.15
   Compiling vec_map v0.8.2
   Compiling strsim v0.8.0
   Compiling core-foundation-sys v0.8.3
   Compiling humantime v2.1.0
   Compiling ansi_term v0.12.1
   Compiling regex v1.7.0
   Compiling termcolor v1.1.3
   Compiling bindgen v0.58.1
   Compiling bitflags v1.3.2
   Compiling clap v2.34.0
   Compiling cexpr v0.4.0
   Compiling env_logger v0.8.4
   Compiling which v3.1.1
   Compiling num-integer v0.1.45
   Compiling rustc-hash v1.1.0
   Compiling peeking_take_while v0.1.2
   Compiling cc v1.0.74
   Compiling lazycell v1.3.0
   Compiling shlex v1.1.0
   Compiling lazy_static v1.4.0
   Compiling cmake v0.1.49
   Compiling iana-time-zone v0.1.53
   Compiling time v0.1.44
   Compiling chrono v0.4.22
   Compiling maplit v1.0.2
   Compiling rsmgclient v2.0.0
error: failed to run custom build command for `rsmgclient v2.0.0`

Caused by:
  process didn't exit successfully: `/var/folders/56/yl5bzsz54rjgryrnb24d29200000gs/T/cargo-installGmNHda/release/build/rsmgclient-2f84394e225e3891/build-script-build` (exit status: 101)
  --- stderr
  thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', /Users/adarsh/.cargo/registry/src/github.com-1ecc6299db9ec823/rsmgclient-2.0.0/build.rs:58:18
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: failed to compile `rsmgclient v2.0.0`, intermediate artifacts can be found at `/var/folders/56/yl5bzsz54rjgryrnb24d29200000gs/T/cargo-installGmNHda`

From looking at build.rs, it looks like this crate expects OpenSSL to be installed on macOS using Homebrew. There should probably be a way to set this using an environment variable like OPENSSL_PATH. We could also make it more robust by checking for MacPorts installations.

I've submitted a PR to add supports for MacPorts: #41 .

Closed by #41


UI update to the project

I made a short mock up for the UI update that according to me would be better with aspect from UI and UX.

I made a short mock up for the UI update that according to me would be better with aspect from UI and UX.

Looks good, for now work  with this design for HTML, CSS AND JS can be implemented.

@sc0rp10n-py As you are working on the UI, is this something you can implement, #106 ?

Yoo! That looks absolutely awesome! Plus if we switch to React, audio playback would be way easier to implement.

Yoo! That looks absolutely awesome! Plus if we switch to React, audio playback would be way easier to implement.

Yeah, I believe @sc0rp10n-py is working on this issue.

I don't quite get the layout you are asking, can you give some rought eg?

@sc0rp10n-py As you are working on the UI, is this something you can implement, #106 ?

I don't quite get the layout you are asking, can you give some rought eg?

@sc0rp10n-py As you are working on the UI, is this something you can implement, #106 ?

I don't quite get the layout you are asking, can you give some rought eg?

Above, A Merry Mogul Christmas, in the top right corner I want the 3 buttons which are currently below the songs in the website.. Hope you understood.

@KendallDoesCoding A design might be what they were asking do for.

On the way!
On Sat, 19 Feb 2022 at 19:44, TechStudent10 @.***>
wrote:

@KendallDoesCoding https://github.com/KendallDoesCoding A design might
be what they were asking do for.
—
Reply to this email directly, view it on GitHub
https://github.com/KendallDoesCoding/mogul-christmas/issues/203#issuecomment-1046026813,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AUGJUTM66CG7O6C76CU2MYDU36QTTANCNFSM5OXHK6FA
.
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:
@.***>

Maybe something like this?
Look at the top left corner.. I know it looks a little ugly after my edits lol

I think it would look better if they weren't on top, but rather somewhere on the bottom. Somewhere in between "Song 3" and the social icons. Speaking of which, that "Socials" button isn't necessary, but rather redundant, given that those icons are already there.

I think it would look better if they weren't on top, but rather somewhere on the bottom. Somewhere in between "Song 3" and the social icons. Speaking of which, that "Socials" button isn't necessary, but rather redundant, given that those icons are already there.

Yeah maybe. On the socials button, idk if that's our socials (project) or the socials of Ludwig, I made it in a separate page currently as I don't want it mixed up with the github icon on the bottom to take users to this repo, so please clarify on that @sc0rp10n-py

@sc0rp10n-py Any progress on this? I want this out by 1st March, if possible... Thanks

wait so now there are deadlines? I thought this was some hobby project not a full scale app

There arent (the way i framed it did sound like that tho) i just want like
a approx time for the issue to be fixed but I understand yall are busy. I
won't say that in other issues from now on!
On Wed, 23 Feb 2022, 2:36 am TechStudent10, @.***>
wrote:

wait so now there are deadlines? I thought this was a hobby project not a
full scale app
—
Reply to this email directly, view it on GitHub
https://github.com/KendallDoesCoding/mogul-christmas/issues/203#issuecomment-1048211652,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AUGJUTIWVHJA7THOBJVTHH3U4P3FTANCNFSM5OXHK6FA
.
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:
@.***>

thanks, I appreciate that

Man sorry, kinda busy, I shifted to hostel so it's all chaos 🤡
Next week i will work on it ig

Marking this issue as on-hold as per my discussion with @sc0rp10n-py .

I know you've been super busy, but any update on this @sc0rp10n-py ?

@sc0rp10n-py Hey, can you make some time to work on this, please.

@thng17 Heyy, you helped really majorly with the design for my other project - Tap For A Surprise https://github.com/KendallDoesCoding/tap-for-a-surprise/pull/8 can you do it for this project as well?
I require the design to be as per the description of the issue created by @sc0rp10n-py.

@thng17 Heyy, you helped really majorly with the design for my other project - Tap For A Surprise KendallDoesCoding/tap-for-a-surprise#8 can you do it for this project as well?
I require the design to be as per the description of the issue created by @sc0rp10n-py.

Waiting for your reply @thng17.

@sc0rp10n-py @TechStudent10 - Should I close this issue as not planned?

I mean, sure. It has been a while.

Closing due to no further response from author.


Add an Ox/direct-style-compatible OpenTelemetry tracing backend

Currently sttp-client only ships with OT+ZIO tracing integration.
The goal of the issue is to create a new module, opentelemetry-tracing-sync-backend, which will provide integration with blocking/direct-style OpenTelemetry tracing, as well as reference documentation showcasing how to use the module.
Moreover, a first step is to suggest a way of propagating the context (setting appropriate headers, including identifiers/correlation ids) that is compatible with virtual threads & scoped values, as used by Loom and Ox. Note that the the OT Java libraries often rely on ThreadLocals, which are not Loom-compatible.
See also https://github.com/softwaremill/tapir/issues/4103

/bounty $750

Once #2314 is done I will jump here to tackle this.

As we are getting first PRs for the bounties, I've published our "How to prepare a good PR" guide. I should have probably done this right away, sorry! :)

Perhaps this solution will help you figure out the problem click

Hey @adamw is this still available ?

@stdthoth it's in WIP. Will raise PR soon

/attempt #2314


[BUG] -f option should be resolved relative to the context directory

ie if you do buildah bud -f Containerfile ./my-buildah-dir then it should look for the containerfile at ./my-buildah-dir/Containerfile
for some reason, absolute paths are used https://github.com/redhat-actions/buildah-build/blob/main/src/index.ts#L61

this would be a breaking change, so maybe we can leave it as-is for now.

i'm moving this to 'done' because we don't have a 'wontfix' pipeline.

Just got bitten by this. IIRC other actions use the behaviour described in the Issue description. I opened #123 since it would be helpful to document this behaviour.


Test all Walls in different resolutions

Please create a table for each display with different resolutions that you have tested and a screenshot of the test walls.

@mariobehling, will do.
However, the card layout is buggy, and I wouldn't recommend using it as of now.


Acrylic flickers when being maximized.

I'm not sure if this is something fixable, but if you maximize an appliciation using the acrylic feature, it flickers to transparent for a quick half-second and then back to the acrylic blur.

Unfortunately, it will be difficult to find a solution. This is because such problems occur at the API level. Open the setting app and proceed with the same task. It blinks exactly like this program. If I find out how to solve this problem, or if someone sends me a PR, I'll fix it, but otherwise it'll be hard to fix it. :(

Open the setting app and proceed with the same task. It blinks exactly like this program.
Settings no longer does this in Windows 11, and I don't think this happened with windows 10.
.-. but I also have no idea how to begin looking for the solution here either, so that's unfortunate


[breaking change] Report type inference errors in top-level fields

Intended change in behavior
Both the CFE and the Analyzer don't report the error on the inferred type arguments that don't satisfy the type variable bound constraints. Consider the following program.
class TableContext {}

class Column {}

class TableSchema<F extends Column, C extends TableContext> {
  factory TableSchema({required Iterable<F> fields, C? context}) =>
      new TableSchema._();

  TableSchema._();
}

var schema1 = TableSchema(fields: []); // Here the error is reported only with the applied fix.

void method() {
  var schema2 = TableSchema(fields: []); // The error was reported here before and continues to be reported after the fix is applied.
  // The error message is: Inferred type argument 'dynamic' doesn't conform to the bound 'Column' of the type variable 'F' on 'TableSchema'.
}

Here the type arguments inferred for the initializing expressions of either the schema1 or schema2 are dynamic and TableContext, and the first of those inferred type arguments is not a subtype of the corresponding bound Column of the type variable F.
However, both the CFE and the Analyzer report the error for the initializer of schema2, but not for that of the top-level variable schema1. This proposal suggests reporting the error in all contexts, including the initializers of top-level variables as shown in the example above and other kinds of contexts, for example, initializers of static class fields.
Rationale for making the change
Disallowing programs where some types don't respect their corresponding constraints removes potential soundness issues in the type system. Additionally, the proposed change treats all types that don't satisfy the corresponding bounds uniformly.
Expected impact of this change.
Since both tools are failing to report the erroneous code as a compile-time error, some programs containing top-level fields as described in the motivational example may fail to compile after the change is implemented.
Steps for mitigating the change
One way of adjusting the code that will fail to compile after the change is implemented is to supply the type arguments that satisfy their corresponding bounds in place of the inferred ones. In the example above, the line for schema1 can be corrected as follows:
var schema1 = TableSchema<Column, TableContext>(fields: []);

The line for schema2 can be corrected in a similar way.

/cc @leafpetersen

Tagging @leafpetersen and @johnniwinther again for prioritization/timelines.  Marking as P2 for now.

@Hixie @grouma @vsmenon @leafpetersen @johnniwinther could you take a look at this breaking change request?

This seems like a beneficial change. This does not directly impact ACX but it may have some impact to internal customers. Presumably any errors caught will be fairly easy and beneficial to fix. When this is ready to land and roll into Google3 you'll want to give a heads up to @iinozemtsev.

I don't understand why the inferred type for F isn't Column?

I don't understand why the inferred type for F isn't Column?

As I understand it, it's a limitation of the constraint generation algorithm currently used by the type inference. It doesn't take the bounds of the type variables into account in some cases, which results in dynamic being inferred in this particular example. Basically, the list literal [] remains unconstrained, which gives <dynamic>[], and that dynamic is then used as the value for F.

But even if the inference doesn't figure out the type of the list literal, surely there's no point ever inferring a type that isn't valid. Should the types the inference system considers be limited to the types that will fulfill the bounds?
I guess what I'm saying is I would expect the error to be that the List isn't valid for the Iterable<Column> fields parameter to the TableSchema<Column, TableContext> factory constructor.

Yes, I agree, the error message emitted by the compiler is less helpful than it could have been. The Analyzer provides more context in this case, explaining the logic behind the inference:
  error • Couldn't infer type parameter 'F'.

Tried to infer 'dynamic' for 'F' which doesn't work:
  Type parameter 'F' is declared to extend 'Column' producing 'Column'.
The type 'dynamic' was inferred from:
  Parameter 'fields' declared as     'Iterable<F>'
                     but argument is 'List<dynamic>'.

Consider passing explicit type argument(s) to the generic.

Ironically while it's one of the most helpful analyzer messages it's also one of my least favourites because it contains newlines and so messes up the layout of many things that process analyzer output. :-)

Change LGTM. Regarding timeline: The CFE has the fix ready, so we can land this ASAP. I don't know how difficult this is to fix in the analyzer.

@srawlins @bwilkerson @scheglov Is the analyzer side of this something we can get done for the second beta for 2.19 (October 5 is the cutoff date)?

I expect we could do this in September without messing up other priorities too much

@srawlins Can you make this change before October 5? The CFE already has fix for this (a reverted CL that I need to rebase).

Sorry this fell off my radar. @scheglov should have the most context of whether we could do this in the next week. WDYT, @scheglov ? I could also take a look.

I don't have any specific knowledge about inference here, so if you can do it, go for it.

@johnniwinther I guess we missed the Beta 2 cutoff last week, but I can still land this by tomorrow.  Should I do that? https://dart-review.googlesource.com/c/sdk/+/262540

I haven't relanded the CL in CFE either. Let's land this for Beta 3, i.e. when the candidate for Beta 2 has been picked, which I don't know if it has yet.

I think you're right; branch alignment is this week.

Oops I am seeing breakages in google3. At least one anyway in the sass package; I'll start mailing fixes today.

@johnniwinther can you review go/dart-could-not-infer-top-level-lsc as a  "Domain Reviewer" and then I can fix all of the internal errors (in every case by adding an explicit type argument).

I think I've cleaned up google3 and Sass, the only 3p package that seems to be affected. Running another check in google3 today before landing.

@srawlins Sounds good. Let me know when the analyzer change has landed, then I'll revive and land the CFE fix.

Landed.


SyntaxError: Cannot use import statement outside a module

Describe the bug
When I try to Transpile my code, the snippet with this library being imported starts to break!
To Reproduce
Steps to reproduce the behavior:

Write code
Transpile for SSR with babel
Run the express server
You end up with something like this pretty soon

Hello !
You have to transpile the library as it is a ESM package.


SCRD-2813 Add support for CPI parameters

Create /etc/caasp/cpi/openstack.conf on the admin
node with CPI parameters
Set the CPI parameter subnet-id from caasp subnet heat resource
Set other CPI parameters like: auth-url, tenant-name,
region, username, password, monitor-max-retries, bs-version,
and ignore-vol-az from heat parameters in caasp-environment.yaml
Modified both caasp-stack.yaml and caasp-multi-master-stack.yaml
with this change.

Please rebase

This requires https://github.com/kubic-project/velum/pull/676

I've submitted another fix to Velum
https://github.com/kubic-project/velum/pull/683

@aagate: Fixes are currently in CaaSP devel image, please ping me on IRC and I will past you in links to it.

Thanks @mjura! Posted a message in  #caasp channel on IRC

Still working to see if we can tighten permissions on /etc/caasp/cpi/openstack.conf
We are are now  blocked by this CaaSP bug https://bugzilla.suse.com/show_bug.cgi?id=1122439, will have to wait for bugfix to make its way to a MU before we can make progress on this review.

@aagate what is the idea of writing the parameters in /etc/caasp/cpi/openstack.conf ?

@Icavajani  By writing  to /etc/caasp/cpi/openstack.conf certain openstack parameters would be pre-populated in the Cloud Provider Integration section of the velum dashboard during the bootstrap stage

@aagate ok thanks, I was not aware of that feature

@mjura @rsalevsky can you please review and approve this PR if possible ? thank you!


getFormValues fails if "select" options is HTMLOptionsCollection

Hi,
I have a form which contains an empty select with no options, and options is an instance of HTMLOptionsCollection
input
<select id="select_0incident.watch_list" style="direction:ltr; ;" onchange="toggleGlideListIcons('incident.watch_list', false);" name="select_0incident.watch_list" multiple="yes" fixedwidth="" size="6"></select>
input.options
[]
input.options.toString()
"[object HTMLOptionsCollection]"

When I tried to use getFormValues, it fails:
#    error: callUtils(getFormValues) with args form[id$=do] thrown an error: 'undefined' is not a function (evaluating 'this.each(function(A,z){if(y.call(x,A,z)){w.push(A)}})')
#           CasperError: callUtils(getFormValues) with args form[id$=do] thrown an error: 'undefined' is not a function (evaluating 'this.each(function(A,z){if(y.call(x,A,z)){w.push(A)}})')

I have investigated a little, and found that the problem is in clientutils.getFieldValue, more precisely here:
 if (input.type === 'select-multiple') {
                    return [].filter.call(input.options, function(option) {
                        return !!option.selected;
                    }).map(function(option) {
                        return option.value;
                    });
                }

The filter call does not works on HTMLOptionsCollection (Chrome 41.0.2272.118):
> [].filter.call(input.options, function(option) {})
Uncaught TypeError: undefined is not a function

In my situation, adding a simple
if(input.options.length == 0) {return []}

is enough (I'm not smart enough in Javascript to do a PR for the generic situation where options is not empty, sorry).
Tested with the lasted CapserJS from github (SHA1 e67dae78219831ddc0ab4fb81446eeb7968b01c8)

Would you like to add the suggested fix via pull request, tests included?

Hi,
Thank you for your answer. I have investigated more to find the problem. The problem isn't in CasperJS.
The Website I try to test with CasperJS use the Prototype (1.7) library, which redefines Array.prototype.filter using a new function Array.prototype.each. But they forget to add the each function to HTMLOptionsCollection. Then, using filter on HTMLOptionsCollection fails to undefined is not a function....
I think it's relative to this bug in Prototype https://github.com/sstephenson/prototype/issues/293
So, I will keep my ugly patch, since there is no reason to modify something in CasperJS and it's impossible for me to update the Prototype version on the website I test....

I confirm my fears, all works fine with Prototype 1.7.2.
Sorry for my bug report, I hope that it might help someone which will arrived here using Google...


Padding and correlation options for WaveletOperator + check for range_geometry size

Describe your changes

Added option to specify convolution padding mode via the keyword bnd_cond similar to GradientOperator. This just applies the existing options from pywt.
Added option to specify axes using the correlation keyword similar to GradientOperator. This sets the axes unless axes is already specified, which takes priority. It also gives errors and warnings for nonsense choices.
The size of the range_geometry is now checked upon initialization to make sure the wavelet coefficients fit.
Some small fixes and comments. Mostly for VectorGeometry which has so many weird behaviours such as not setting the shape automatically. Also the special option for setting 1D domain geometry has been removed because it was pointless.

Describe any testing you have performed

None

Describe any testing you wish to be implemented :)

The range_geometry size checking does check for problems but these should be tested for:

Use giving wrong size range should give error
Not decomposing all dimensions (either via axes or correlation) should keep those dimensions same size as input

correlation and axes are also checked for clashes and overall viability

Correlation for Channels should not work with data without channels
Correlation with 1D data should always give error
What happens if user labels 1D data to channel or one of the dimensions in 2D data?

Link relevant issues

correlation keyword due to this comment in #1615
Similar reason for bnd_cond, in particular the funny name
Problems where user give incompatible range size and only notice when the operator is applied.

Thanks @tommheik - @paskino  and I are on leave until 8th January but will have a look once we are back


Throwing error: Cannot read property 'on' of undefined  when adding appmetrics

Hi,
Getting error on server start as soon as i include packages:
Packages included:
appmetrics      = require('appmetrics'),
monitoring      = appmetrics.monitor()

Getting Error:
var existing = target[methodName];
                             ^

TypeError: Cannot read property 'on' of undefined

I am using Pomelo Framework @ version: 1.2.1
appmetrics @ version: 1.0.11
Appmetrics reference: https://github.com/RuntimeTools/appmetrics
My Package.json in case:

"dependencies": {
    "appmetrics": "1.0.11",
    "async": "1.5.2",
    "cors": "2.7.1",
    "crc": "0.2.0",
    "json-web-token": "^2.0.3",
    "jsonpack": "1.1.5",
    "keypair": "1.0.0",
    "lodash": "3.10.1",
    "node-schedule": "1.1.0",
    "password-hash-and-salt": "^0.1.3",
    "pomelo": "1.2.1",
    "prng-well1024a": "^2.0.0",
    "simple-node-logger": "0.92.21",
    "socket.io-client": "1.4.6",
    "underscore": "1.7.0"
  }

i will try to fix it


httplib2 redirect bug

if 'location' header is in response object, http2lib try to redirect and use self.request method with body=None argument; this behavior implies a problem like this - https://github.com/joestump/python-oauth2/issues/203 and etc.
if response.status in [302, 303]:
    redirect_method = "GET"
    body = None    <---------

(response, content) = self.request(
               location, method=redirect_method, body=body,
               headers=headers, redirections=redirections - 1)

File "/Users/speedingdeer/code/.../pyvenv3.4/lib/python3.4/site-packages/oauth2/init.py", line 493, in sign_request
self['oauth_body_hash'] = base64.b64encode(sha1(self.body).digest())
TypeError: object supporting the buffer API required

It's a tiny workaround for this issue   https://github.com/joestump/python-oauth2/pull/214

@joestump what do you think about it?


Discussion: Translatable plugins

This is an interesting approach to make plugins translatable.
https://github.com/Federatial/afnccf-aim-questionnaire/blob/1acf111d66c96f32fd6402dbac791e527fea7f4d/wiki/plugins/aim-questionnaire/Macros.tid#L4-L6
I personally would prefer this approach in general over the 1000 shadow tiddlers that are rarely changed, consume device memory and make all loops slower.

Thanks @pmario can you expand on what you are referring to by "over the 1000 shadow tiddlers that are rarely changed, consume device memory and make all loops slower".

I'm referring to the core $:/language/tiddlers that need to be expanded into the shadow memory area on the device. They are rarely changed by users and if we do [all[shadows+tiddlers]xxx] we need to loop over 2400 shadow tiddlers and 1400 content tiddlers. For me that proportion feels wrong.
With the new json-store language tiddlers could look like this:
title: $:/plugins/federatial/aim-questionnaire/Language/en-GB
type: text/vnd.tiddlywiki
BodyDownloadCSV: Click the button to down ...
BodyDownloadWordDocument: Click the button to do...
ButtonCopyCSVToClipboard: Copy data to clipboard
ButtonDownloadCSV: Download .CSV file

where all the dictionary elements would become fields and they could be referenced as fields.
I know, that there is a problem, if the user wants to change 1 element. But with the right editor it will be possible to "protect/keep" the language tiddler unchanged and create a system tiddler from the changed field as it is done now.
IMO we would only need to change the language macro in a similar way you did here. ... That's why I think, this is an interesting approach.
If not for the core, it may be interesting for plugins in general, where the number of elements is much lower

Ah thanks @pmario I see now: you're suggesting that we switch to using multiple fields of a single tiddler to hold translation strings, instead of multiple tiddlers. That's an interesting idea, and definitely worth exploring in plugin-land. In general, my thinking is that we have to make the core work well with thousands of tiddlers, and so I'm more interested in optimising the current scheme.

In general, my thinking is that we have to make the core work well with thousands of tiddlers, and so I'm more interested in optimising the current scheme.

OK. That's an argument.

What I do like with your mechanism used here is, that it works out of the box. ... The mechanism I am exploring is at: Translateable plugins - first try #5418  is much more complex.


HideKeyboard keyword doesn't work for Mobile Automation

OpenTest version number: 1.1.4
I'm trying to automate a Retail iOS App through Appium. I have to enter a value in the text field and then click on "Done" in the  iOS Keyboard.
Tried below 2 methods but getting different errors:

description: Hide the keyboard
action: org.getopentest.appium.HideKeyboard
args:
keyName: Done

Result: The execution continues to the next line of code without closing the Keyboard, beacuse of which the script fails.

Tried entering through SendKeys keyword.

description: Type "UPC" in the search box
action: org.getopentest.appium.SendKeys
args:
locator: { xpath: "" }
hideKeyboard:
Result: Below is the log of the exception

Caused by: java.lang.RuntimeException: Failed executing action org.getopentest.appium.SendKeys with arguments {"hideKeyboard":null,"text":999,"locator":{"xpath":"//XCUIElementTypeApplication[@name='Markdown'] /XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther /XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther /XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther /XCUIElementTypeTextField"}}
at org.getopentest.base.TestActor.executeActionByDef(TestActor.java:1773)
at org.getopentest.base.TestActor.executeTestSegment(TestActor.java:2026)
... 3 more
Caused by: java.lang.RuntimeException: Failed sending keys "999" to element By.xpath: //XCUIElementTypeApplication[@name='Markdown'] /XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther /XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther /XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther /XCUIElementTypeTextField
at org.getopentest.appium.SendKeys.run(SendKeys.java:58)
at org.getopentest.base.TestActor.executeAction(TestActor.java:1497)
at org.getopentest.base.TestActor.executeActionByClassName(TestActor.java:1557)
at org.getopentest.base.TestActor.executeActionByDef(TestActor.java:1657)
... 4 more
Caused by: java.lang.NullPointerException

Is there any issue with the arguments that I'm passing?
Thank you.

Hiding the keyboard on iOS was always a tricky thing, as I remember from the teams I worked with. I noticed the Appium project made some slight changes to their API in the latest version so they might have improved the stability of this feature, but I didn't get to check that out. In the meantime, you might want to try to use the Tap action to tap the "Done" button, if you can figure out the correct locator for it. I don't think the SendKeys action can help you here.

I did use the Tap action with xpath (no other locator type was recognized). But the output was extremely slow and so wanted a better way to handle this.


Replicate existing depth chart minus tooltips

Use new subscription
Just show cumulative depth
Centre on 'mid price'  mean of best bid and best ask (how does this behave in auction?)
Zoom with mousewheel around midpoint
Try showing whole book initially
Bug in current implementation where y axis does not start at zero
Only one axis on right side

Storybook
Happy path (slightly asymmetric)
Auction/non-auction
Volume only on one side
No data
Very asymmetric book
All orders right next to price (two very large either side)

We now have a depth chart.


oesign tool should support a command to dump oeinfo and signature information

Related to #563, we should consolidate the functionality of oedump to display Open Enclave specific information into the oesign tool.

Closing this, but we need to re-evaluate these tools and this desired functionality


Lack of info about keynote, eg day/time

https://deploy-preview-388--cds2019.netlify.app/devsummit/schedule/keynote/
I guess you're waiting on us for content?

@johnrich85

hmm, we already have date/time I believe but it wasn't included on the designs. We don't have any other content though AFAIK. Can pop those on, if anything else needs adding though let me/Niamh know

Looks fixed!


new rails 3.1.1 app exception during boot

I'm trying out the latest version of active_admin with a new rails 3.1.1 app. I setup active_admin with:
rails generate active_admin:install Admin
rake db:migrate
When booting the app I get the following exception:
/Users/fitz/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/devise-1.4.7/lib/devise/rails/routes.rb:379:in `raise_no_devise_method_error!': Admin does not respond to 'devise' method. This usually means you haven't loaded your ORM file or it's being loaded too late. To fix it, be sure to require 'devise/orm/YOUR_ORM' inside 'config/initializers/devise.rb' or before your application definition in 'config/application.rb' (RuntimeError)
If I remove ActiveAdmin.routes(self) from routes.rb then the app boots and devise loads up the Admin user without issue.

Have you got Devise setup in your app?

yes, I have devise setup and working with no issues.
Only when I add in the line ActiveAdmin.routes(self) to routes.rb does the app then fail to boot. If I remove that entry from routes then everything works again.

Can you try to run rails generate active_admin:install instead of rails generate active_admin:install Admin?

Any word on this? I'm getting the same issue, using rails generate active_admin:install. It works all the way up until the generator adds the routes, then the next task fails (adding the assets).

Ok, I solved the issue that was causing this behavior for me. I had already had devise installed, and apparently when I first installed it, I had the following two lines in my config routes (the devise install instructions had this in their example, so I just copied it thinking, "yeah, eventually I'll want admin users"):
  devise_for :admins
  devise_for :users

Well, apparently active_admin did not like the fact that I had my own "admins" devise users specified, even though active_admin was using :admin_users higher up in the routes file. Anyway, I removed my own devise_for :admins line and the install worked.


TextPainter calculated width is smaller than actual width of Text widget in Flutter

Steps to reproduce

Create a new Flutter project and add a Text widget to the main screen with some sample text, for example, "Text width test aaa cc".
Use TextPainter to calculate the width of the same text string. Make sure to use the same TextStyle as the Text widget. For example, use a TextStyle with a specific font size and family.
Render the Text widget in the app and measure its actual rendered width on the screen. This can be done by wrapping the Text widget with a GlobalKey and then using the key to obtain the RenderBox after the frame is built.
Compare the width obtained from the TextPainter with the actual width of the rendered Text widget as measured from the RenderBox.

You should observe that the width calculated by the TextPainter is significantly smaller than the actual width of the Text widget as it appears on the screen.
Expected results
The expected behavior is that the width calculated by TextPainter should closely match the actual rendered width of the Text widget. This means when the same text content and TextStyle are used, both TextPainter and the Text widget should render the text with similar widths. The consistency in width measurements is crucial for accurately laying out text in custom widgets and for performing precise UI calculations.
Actual results
Contrary to the expected behavior, the width calculated by TextPainter is significantly smaller than the actual rendered width of the Text widget. When using identical text content and TextStyle, the width obtained from TextPainter does not match the width of the text as it is rendered on the screen. This discrepancy leads to issues in layouts where precise text measurements are critical. It seems that TextPainter underestimates the required space for the text, causing a mismatch between calculated and actual rendered sizes.
Code sample
Code sample

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey textKey = GlobalKey();
  final String textContent = "Text width test aaa cc";
  double? textPainterWidth;
  double? textRenderWidth;
  final textStyle = const TextStyle(
    fontSize: 16,
  );

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance
        .addPostFrameCallback((_) => _calculateRenderBoxWidth());
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    textPainterWidth = _calculateTextPainterWidth(textContent);
  }

  double _calculateTextPainterWidth(String text) {
    final textPainter = TextPainter(
      text: TextSpan(
        text: text,
        style: textStyle,
      ),
      textDirection: TextDirection.ltr,
    )..layout(minWidth: 0, maxWidth: double.infinity);
    return textPainter.width;
  }

  void _calculateRenderBoxWidth() {
    final RenderBox? renderBox =
        textKey.currentContext?.findRenderObject() as RenderBox?;
    if (renderBox != null) {
      setState(() {
        textRenderWidth = renderBox.size.width;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              textContent,
              key: textKey,
              style: textStyle,
            ),
            if (textPainterWidth != null)
              Text(
                'TextPainter Width: ${textPainterWidth!.toStringAsFixed(2)}',
              ),
            if (textRenderWidth != null)
              Text(
                'RenderBox Width: ${textRenderWidth!.toStringAsFixed(2)}',
              ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
C:\Users\admin>flutter doctor -v
[√] Flutter (Channel stable, 3.16.8, on Microsoft Windows [版本 10.0.22621.3007], locale zh-CN)
    • Flutter version 3.16.8 on channel stable at E:\AppData\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 67457e669f (6 days ago), 2024-01-16 16:22:29 -0800
    • Engine revision 6e2ea58a5c
    • Dart version 3.2.5
    • DevTools version 2.28.5

[√] Windows Version (Installed version of Windows is version 10 or higher)

[X] Android toolchain - develop for Android devices
    X Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[X] Visual Studio - develop Windows apps
    X Visual Studio not installed; this is necessary to develop Windows apps.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components

[√] Android Studio (version 2023.1)
    • Android Studio at E:\AppData\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-b2043.56-10550314)

[√] IntelliJ IDEA Ultimate Edition (version 2023.3)
    • IntelliJ at E:\AppData\JetBrains\IntelliJ IDEA 2023.3.2
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart

[√] Connected device (3 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [版本 10.0.22621.3007]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 120.0.6099.225
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 120.0.2210.144

[!]  Doctor found issues in 3 categories.

This issue was not present in previous versions(3.0.x) of Flutter.

If you use Size instead of width, you will find not only width, but also height is different. According to your example, TextPainter.height = 19.0 and RenderBox.height = 23.0. Apparently this is because  TextStyle is missing height. So the difference between the two widths should also be due to a missing parameter in TextStyle.
The following would be a better way:
  late final textStyle = Theme.of(context).textTheme.bodyMedium?.copyWith(
    fontSize: 16,
  );

If I remember correctly, Text can get DefaultTextStyle but TextPainter can't.


last folded search occurrence is skipped on n and N

I'm not too sure if this is intended behavior.
But given the text delimited by ====== below
and setting the fold as per below in the first 2 lines
and then set search text as below.
We should see the paragraphs folded up.
Now, place the cursor on the last selected paragraph; go to the bottom (G)
then press either (n) or (N)
Actual:
We see the cursor either jump to the instance of "test" below "abc" or to the occurrence in the first paragraph.
Expected:
I would expected that the occurrence within the last paragraph be highlighted by either N or n.
========
:set nocompatible
:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
:set foldmethod=expr
:let @/='test'
the occurrence of /[t]est/ in this paragraph is jumped to by 'n' (search forward)

the occurrence of /[t]est/ in this paragraph is jumped to by 'N' (search backward)
abc
test
def

the occurrence of /[t]est/ in this paragraph is skipped by both search forward and search backwards if it is folded up and the cursor is on this paragraph.
klm
test
klm
========

after a bit of experiment, it seems that the occurrence within the current fold is skipped.
I'd attached a short replay captured with asciiema.

I'm not too sure if this is intended behavior.
But given the text delimited by ====== below
and setting the fold as per below in the first 2 lines
and then set search text as below.
We should see the paragraphs folded up.

I don't get any folds.  You can set 'foldcolumn' to easily see that.
The problem appears to be that your 'foldexpr' either returns ">1" for
a non-empty line below an empty line (would be OK to start a fold
there), and returns one otherwise.  Thus it always returns fold level
one.  You probably want to return zero for an empty line.
The second like ":set @/='test'" does not work.   I assume you meant to
do:
:let @/ = 'test'
Not that this matters, since there aren't any folds.
--
hundred-and-one symptoms of being an internet addict:
142. You dream about creating the world's greatest web site.
/// Bram Moolenaar -- @.*** -- http://www.Moolenaar.net   \
///                                                                      \
\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

I don't get any folds. You can set 'foldcolumn' to easily see that. The problem appears to be that your 'foldexpr' either returns ">1" for a non-empty line below an empty line (would be OK to start a fold there), and returns one otherwise. Thus it always returns fold level one. You probably want to return zero for an empty line.

I don't get why you are not getting any folds. I got the fold-expr from
/Applications/MacVim.app/Contents/Resources/vim/runtime/doc/fold.txt
listed below for convenience.
I'm using the last  expr below which is suppose to give us 1 paragraph per fold.
EXPR						*fold-expr*

The folds are automatically defined by their foldlevel, like with the "indent"
method.  The value of the 'foldexpr' option is evaluated to get the foldlevel
of a line.  Examples:
This will create a fold for all consecutive lines that start with a tab: >
	:set foldexpr=getline(v:lnum)[0]==\"\\t\"
This will call a function to compute the fold level: >
	:set foldexpr=MyFoldLevel(v:lnum)
This will make a fold out of paragraphs separated by blank lines: >
	:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
This does the same: >
	:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1

The second like ":set @/='test'" does not work. I assume you meant to do: :let @/ = 'test' Not that this matters, since there aren't any folds.

you are right. I meant :let @/='test'
I'll correct the original message.
and make it work for a vim without .vimrc
i.e. vim -u /dev/null

problem.cast.gz
the replay can be played with asciiema.

I don't get any folds. You can set 'foldcolumn' to easily see that.
The problem appears to be that your 'foldexpr' either returns ">1"
for a non-empty line below an empty line (would be OK to start a
fold there), and returns one otherwise. Thus it always returns fold
level one. You probably want to return zero for an empty line.

I don't get why you are not getting any folds. I got the fold-expr from
/Applications/MacVim.app/Contents/Resources/vim/runtime/doc/fold.txt
listed below for convenience.

I think I must have missed to set 'foldmethod' to "expr".

I'm using the last  expr below which is suppose to give us 1 paragraph
per fold.
EXPR						*fold-expr*

The folds are automatically defined by their foldlevel, like with the "indent"
method.  The value of the 'foldexpr' option is evaluated to get the foldlevel
of a line.  Examples:
This will create a fold for all consecutive lines that start with a tab: >
	:set foldexpr=getline(v:lnum)[0]==\"\\t\"
This will call a function to compute the fold level: >
	:set foldexpr=MyFoldLevel(v:lnum)
This will make a fold out of paragraphs separated by blank lines: >
	:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
This does the same: >
	:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1

The second like ":set @/='test'" does not work. I assume you meant to do: :let @/ = 'test' Not that this matters, since there aren't any folds.

you are right. I meant :let @/='test'
I'll correct the original message.
and make it work for a vim without .vimrc
i.e. vim -u /dev/null

Note that when the cursor is in a closed fold, then searching will not
find another match in that fold.  That is intentional.
In the source code there is this comment in do_search():
// If the cursor is in a closed fold, don't find another match in the same
// fold.

I can't find a remark like that in the help, I'll add a note.
Thus I very much suspect what you are reporting is actual intended
behavior.
--
hundred-and-one symptoms of being an internet addict:
152. You find yourself falling for someone you've never seen or hardly
know, but, boy can he/she TYPE!!!!!!
/// Bram Moolenaar -- @.*** -- http://www.Moolenaar.net   \
///                                                                      \
\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

if there is a comment to that effect then it does seems that this is intended behaviour then.
Please close the issue at your discretion. i.e. if you need this to update to update the documentation.
perhaps under
:help fold-behavior
...
Searches are skipped over the current closed fold.
Fold can therefore be use to skip over a bunch of search occurrences when performing search.
...

Thanks for your prompt response!


SANS DFIR Europe Summit 2019 (@sansforensics #DFIRSummitPrague) - 2019.09.30 - Prague, Czech Republic

thanks, I've added this directly to master due to some conflicts. I've to say we don't get too often a fully correct PR including the correct commit title, thanks! :)


Input & Output data encoding

Let's discuss how the payloads for read and write are handled.
For write, you convert the input string to a UTF-8 encoded buffer with "\n" appended:
this.#serial.write(ArrayBuffer.fromString(msg.payload + "\n"))

For read, you read all the bytes into a buffer, interpret that as UTF-8 to generate a JavaScript string, and then trim any whitespace from the end (including carriage returns):
let msg = String.fromArrayBuffer(this.read());
msg = msg.trimEnd()

These are both reasonable behaviors. But there are other reasonable behaviors. Node-RED provides many options

It provides a binary option, for situations where the data is not text. This is definitely useful, as many devices that use serial communicate in binary.
Node-RED doesn't use UTF-8. Instead, it uses ASCII. Serial is so old, it pre-dates Unicode so this is probably reasonable even if it seems old-fashioned.
Node-RED has an option to add a character at the end of a write ("Add character to output messages"). But, it is optional. This seems important since sometimes the app wants to control all the data.
Node-RED also has "framing" options -- "Optionally wait for a start character of " and "Split input". These are useful, but complicated.
Anyway... I think you might want to support some of the same options as Node-RED. Most are pretty straightforward to implement (I am happy to help) except for framing. But, I think first you should decide which capabilities are a priority.

Thank you @phoddie !
I see, the binary option seems necessary.
For the options, I think it would be a good idea to implement it with reference to node-red-node-serialport.
It will be easier for users if it can be used just like a serial node on a PC.
Here is the config option for the serial-port node:

I have one question.
The "Serial Port" setting is different for serial communication between a microcontroller and a PC.
Are there any other differences?
I will implement the binary option as a priority.

Binary definitely makes sense as a next step.
But... have you seen this work by @ralphwetzel? I just discovered it today!

I also discovered it today!
In v1.5 of node-red-mcu-plugin , it says "Support for node-red-node-serialport on MCU's".
https://github.com/ralphwetzel/node-red-mcu-plugin/releases/tag/v1.5
There seems to be some differences from node-red-node-serialport.
I also will try to implement my node with reference to node-red-node-serialport!


test: add tests for Task class

I added the main tests for the Task class. Few commentes:

Coverage for task.py is at 89% - I run coverage locally.
I didn't add tests specific for checking the values on the inputs and outputs signals. I spent some time on that but I didn't find a straightforward way to do that. Ideas?
I didn't add the scaling test because we will refactor it soon (issue #28)

In case you look at this in the next two hours, ignore the last two commits, I will fix that after lunch (I forgot to create a new branch and I pushed on the current one)

Should I ignore the commits or not? They seem to be part of #40 instead of this?

In case you look at this in the next two hours, ignore the last two commits, I will fix that after lunch (I forgot to create a new branch and I pushed on the current one)

Should I ignore the commits or not? They seem to be part of #40 instead of this.

yes sorry it got complex, I will remove those last two commits asap

Should we put additional tests we think of into a new PR, or should we add them on here?

Let's add them here if you already have ideas :)


Redstone Link can only Face North

Describe the Bug
Can not rotate the Redstone Link
Reproduction Steps

Put Redstone Link to all directio from where you are standing.
Redstone Link only facing North.

Expected Result
Redstone Link face you. (Visually)
Screenshots and Videos

Crash Report or Log
No response
Operating System
Windows 11
Mod Version
0.4.1
Minecraft Version
1.18.2
Other Mods
No response
Additional Context
No response

working as intended

working as intended

yes it works, but model could face every direction depending on place we are facing (for aesthetic)

You should report it to upstream as suggestion.

You should report it to upstream as suggestion.

I'll try, thanks


Add Sonar analysis to CI and push coverage to it #168

Added sonar-prpoject.properties file which is used by SonarQube to determine what the project/organization is and it also includes where the coverage file is.
I also updated ci.yaml to delete CodeCov step and added SonarQube analysis instead of that. This way Sonar analysis will run in a push manner instead of its default.
Before this PR is approved, the steps I mentioned in the issue must be taken. #168

Awesome! I did the required manual steps. Gonna merge now.

/approve

/merge


Additional proxy URL

We also had to enable the *.s-microsoft.com URL.

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

ID: 651b0b21-e639-2814-ebc6-94303a00ca2d
Version Independent ID: 4587f785-d841-fd0e-7ec6-7ad895a0d4a7
Content: Prerequisites for Microsoft Store for Business and Education (Windows 10)
Content Source: store-for-business/prerequisites-microsoft-store-for-business.md
Product: w10
GitHub Login: @TrudyHa
Microsoft Alias: TrudyHa

@officedocsbot assign @mypil

@kistersr I will have to confirm this before changing the content. Please assist me with any additional information you can supply and notes on how the content should be edited. Thank you for the feedback, much appreciated.

@kistersr  Thanks for the feedback. I'll double check with our engineering org if this applies to all customers.