Wrong rendering output (maybe something with measure)

Describe the bug
When using the typst file below the rendering output does not match the official renderer.
The differences are:

The pagebreaks around the checkeredPage are missing.
There are lines behind the heading on the next page.
The color contrast is not right.

To Reproduce
Render errorReproduction.typ with typst-preview:
#set page(height: 18cm, width: 32cm, margin: 2cm)
#let slideTitleSize = 50pt

#let checkeredSlide(title: none) = {
  page(background: [
    #let columnNum = 44
    #let rowNum = 25
    #let size = 24.55pt

    #let columns = ()
    #let rows = ()

    #for i in range(columnNum) {
      columns.push(size)
    }

    #for i in range(rowNum) {
      rows.push(size)
    }

    #let entries = ()

    #for i in range(rowNum * columnNum) {
      entries.push(none)
    }
    #table(columns: columns, rows: rows, stroke: 0.1pt + luma(40%), fill: luma(100%))
  ])[
    #if title != none and title != "" [
    #show heading.where(level: 1): it => {
      text(slideTitleSize, weight: "regular", it.body)
      v(0.3em)
    }
    #let heading = [= #title]

    #let headingBackground(body) = style(styles => {
      let size = measure(body, styles)
      place(top + left, dx: -5cm, dy: -5cm, rect(fill: white, width: 42cm, height: 5cm + 2.3cm))
      [Height of "#body" is #size.height]
    })

    #layout(size => style(styles => [
      #let (height,) = measure(
        block(width: size.width, heading),
        styles,
      )
      // #let modheight = calc.quo(height + 0.3cm)
      #let minHeight = 0.6cm
      #while minHeight < height + 0.3cm {
        minHeight = minHeight + 24.55pt
      }
      #place(top + left, dx: -5cm, dy: -5cm, rect(fill: white, width: 42cm, height: 5cm + minHeight))
      #heading
    ]))
    ]
  ]
}

= Some slide

- With Text

#checkeredSlide(title: "Some Title")

= Some other slide

The Output looks like this:

The pagebreaks around the checkeredPage are missing.
There are lines behind the heading on the next page.
The color contrast is not right.

Expected behavior
The Output should look like this:

Package/Software version:
VSCode version(Help -> About):
Version: 1.84.1 (Universal)
Commit: 2b35e1e6d88f1ce073683991d1eff5284a32690f
Date: 2023-11-06T12:37:18.666Z
Electron: 25.9.2
ElectronBuildId: 24603566
Chromium: 114.0.5735.289
Node.js: 18.15.0
V8: <IP_ADDRESS>-electron.0
OS: Darwin arm64 23.1.0

typst-preview extension version: v0.9.0
Logs:
typst-preview server log(Output Panel -> typst-preview):
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::editor] EditorActor: received message from editor: UpdateMemoryFiles ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::typst] TypstActor: processing UPDATE memory files: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:13Z DEBUG typst_ts_compiler::service::compile] CompileActor: memory event incoming
[2023-11-08T12:57:13Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: compiling ...
[2023-11-08T12:57:13Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: Compilation succeeded in 1.078458ms
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::editor] EditorActor: received message from mailbox: CompileStatus(CompileSuccess)
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::render] RenderActor: has_full_render: false
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::editor] EditorActor: received message from editor: UpdateMemoryFiles ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::typst] TypstActor: processing UPDATE memory files: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:13Z DEBUG typst_ts_compiler::service::compile] CompileActor: memory event incoming
[2023-11-08T12:57:13Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: compiling ...
[2023-11-08T12:57:13Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: Compilation succeeded in 42.417µs
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::editor] EditorActor: received message from mailbox: CompileStatus(CompileSuccess)
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::render] RenderActor: waiting for message
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::render] RenderActor: has_full_render: false
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::webview] WebviewActor: received svg from renderer
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::render] RenderActor: waiting for message
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::webview] WebviewActor: received svg from renderer
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::editor] EditorActor: received message from editor: UpdateMemoryFiles ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::typst] TypstActor: processing UPDATE memory files: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:13Z DEBUG typst_ts_compiler::service::compile] CompileActor: memory event incoming
[2023-11-08T12:57:13Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: compiling ...
[2023-11-08T12:57:13Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: Compilation succeeded in 126.416µs
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::editor] EditorActor: received message from mailbox: CompileStatus(CompileSuccess)
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::render] RenderActor: has_full_render: false
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::render] RenderActor: waiting for message
[2023-11-08T12:57:13Z DEBUG typst_preview::actor::webview] WebviewActor: received svg from renderer
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::editor] EditorActor: received message from editor: UpdateMemoryFiles ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::typst] TypstActor: processing UPDATE memory files: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:14Z DEBUG typst_ts_compiler::service::compile] CompileActor: memory event incoming
[2023-11-08T12:57:14Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: compiling ...
[2023-11-08T12:57:14Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: Compilation succeeded in 33.541µs
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::editor] EditorActor: received message from mailbox: CompileStatus(CompileSuccess)
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::render] RenderActor: has_full_render: false
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::editor] EditorActor: received message from editor: UpdateMemoryFiles ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::typst] TypstActor: processing UPDATE memory files: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::editor] EditorActor: received message from editor: RemoveMemoryFiles ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::typst] TypstActor: processing REMOVE memory files: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"]
[2023-11-08T12:57:14Z DEBUG typst_ts_compiler::service::compile] CompileActor: memory event incoming
[2023-11-08T12:57:14Z DEBUG typst_ts_compiler::service::compile] CompileActor: memory event incoming
[2023-11-08T12:57:14Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: compiling ...
[2023-11-08T12:57:14Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: Compilation succeeded in 28.375µs
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::editor] EditorActor: received message from mailbox: CompileStatus(CompileSuccess)
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::render] RenderActor: waiting for message
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::render] RenderActor: has_full_render: false
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::webview] WebviewActor: received svg from renderer
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::render] RenderActor: waiting for message
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::webview] WebviewActor: received svg from renderer
[2023-11-08T12:57:14Z DEBUG typst_ts_compiler::service::compile] CompileActor: fs event incoming Some(UpstreamUpdate { changeset: FileChangeSet { removes: [], inserts: [] }, upstream_event: Some(UpstreamUpdateEvent { invalidates: ["/Users/localuser/Desktop/TypstLocalTesting/errorReproduction.typ"], opaque: Any { .. } }) })
[2023-11-08T12:57:14Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: compiling ...
[2023-11-08T12:57:14Z INFO  typst_ts_compiler::service::diag] /errorReproduction.typ: Compilation succeeded in 26.75µs
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::editor] EditorActor: received message from mailbox: CompileStatus(CompileSuccess)
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::render] RenderActor: has_full_render: false
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::render] RenderActor: waiting for message
[2023-11-08T12:57:14Z DEBUG typst_preview::actor::webview] WebviewActor: received svg from renderer

The pagebreaks around the checkeredPage are missing.

This is because svg export doesn't clip boundaries of a page, and you have set a background with negative position, which is indeed a render bug of typst-preview.
  #let headingBackground(body) = style(styles => {
      let size = measure(body, styles)
      place(top + left, dx: -5cm, dy: -5cm, rect(fill: white, width: 42cm, height: 5cm + 2.3cm))
                     // ^^^^^^^^^^^^^^^^^^ you make a negative position here
    })

The color contrast is not right.

Subpixel rendering is not quite deterministic. PDF and SVG has a different strategy to render subpixels, and we may not have a good solution to align the result.
And I also believe that in fact SVG does a better subpixel rendering. Because SVG can draws a 0.01pt stroke, however PDF cannot. PDF will draw a 0.1pt stroke for you when you acquire a 0.01pt stroke.

The clip problem is fixed now and I think we can close this? @Myriad-Dreamin


Add readme to explain contents of this repository.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Trace agent doesn't create new trace id for each request

Issue
Log entries are not assigned to specific requests when application is under load.
Value of trace field is same for all log lines but it should be unique.
Environment
NodeJS, Express, Typescript
example project: https://github.com/vtajzich/nodejs-gcp-trace-agent-test
Steps to reproduce

Set environment variables LOGGING_PROJECT_ID and SA_LOGGING_FILE (absolute path to json with private key to access logging and tracing)
Run the application
Run multiple concurrent requests (using jMeter or similar tool)
Go to trace list and observe requests

Current

All log entries are assigned to the first request
Other requests have no logs at all
trace id (field "trace") is same for all log lines

Expected

Each request has assigned log lines which belongs to it
trace id is unique for each request

Hi @vtajzich -- thanks for reporting and providing a repro case -- I was able to reproduce the issue. It seems that log correlation with tracing doesn't work with Winston 3 (it was originally working with version 2). The code for correlating logs to traces is part of the @google-cloud/logging-winston source, so I've asked to have this issue transferred there.
I'll look into how we might be able to address the problem on the logging-winston side.


for loop while f5transformer running

Hi there, I noticed while running F5transformer, the loop time is nfe_step, with t = torch.linspace(0, 1, self.steps + 1,dtype=torch.float32). As the same part in source code of F5-TTS, they use an ODE solver, only calculates (nfe_step -1) times, with t = torch.linspace(t_start, 1, steps, device=self.device, dtype=step_cond.dtype). puzzlld with these differences.
I also made another modification to the onnx export. The FOR loop time I used is (NFE_Step-1). I understand that this may not have a significant impact as the generated audio can be listened well. But I want to know if I have any misunderstandings.
Appreciation with any reply.
主要对这里for循环的次数有一些疑惑的地方，因为我理解这部分应该是在计算积分(大概?),即使在linspace中steps+1也只是把整个积分区域多切分一次，最终的值应该没有很大的变化，但我还是对这样处理的原因感到好奇。
感谢！

The Euler solution for the source code relies on differential iteration, so the number of iterations should be NFE_STEP-1. However, I personally understand NFE_STEP to refer to the number of iterations, which means it should run exactly as specified. Therefore, I made my own adjustments.
源码中的Euler解法是依靠差分迭代的，因此迭代次数应该是NFE_STEP-1。然而，我个人理解NFE_STEP指的是迭代次数，也就是说应该写多少就跑多少。所以我自己进行了修改。


Curious about pvc clone

If you look at this document, snaphost and clone are used twice. It seems like replication is completed just once, so why is it doing it twice?
https://github.com/ceph/ceph-csi/blob/devel/docs/snap-clone.md#clone-rbd-pvc

If you look at this document, snaphost and clone are used twice. It seems like replication is completed just once, so why is it doing it twice?
https://github.com/ceph/ceph-csi/blob/devel/docs/snap-clone.md#clone-rbd-pvc

Flatten operation is affected by IO and there are limits to number of snapshots and parent->child->grand-child rbd image chain.
The intermediate temp image exists to be flattened in case the image chain(clone depth) grows too long.


Added a simple Manjaro Variant

Not a complicated commit. Just a variation for Manjaro Linux.

Thank you!


[BACKLOG-3649] - Getting the pentaho-metaverse-api and dependencies i…

…nto all of the assemblies that need it

@hudak please merge this in. i guess i got this into future-dev too late.


Add Logitech G502 Lightspeed mouse

Hey, sorry, the PID 0xc539 is a receiver, and thus we cannot include it.
The syntax is also wrong:
usb:usb=046d:407f;046d:c539 should be usb:046d:407f;usb:046d:c539
Also also, the device you are trying to add seems to be supported already:
https://github.com/libratbag/libratbag/blob/3f99446a1be984b78eac60e47bfd66e1c674e30c/data/devices/logitech-g502-hero-wireless.device
Does it not show up in ratbagd or piper?

Indeed, it seems that g502 hero wireless is the same device as g502 lightspeed. My mouse wasn't properly recognized when I tried the first time. After adding the new device file, it started working, but perhaps it was just that this caused ratbag to restart and then recognize my mouse properly.
Anyway, everything works now as it should.


(FACT-854) Merge cfacter to facter/master

Passed checks. Anyone up for checking that the deletion and merge look right, and merging this behemoth?

:+1:. Deletion and merge look correct to me.

:+1:

Waiting for CLA signatures by @bostjan, @heathseals
@bostjan, @heathseals - We require a Contributor License Agreement (CLA) for people who contribute to Puppet, but we have an easy click-through license with instructions, which is available at https://cla.puppetlabs.com/
Note: if your contribution is trivial and you think it may be exempt from the CLA, please post a short reply to this comment with details. http://docs.puppetlabs.com/community/trivial_patch_exemption.html

I've signed CLA years ago, and if I try it again with my regular FOSS email (bostjan@*.si), it does not work, saying email has been taken.
I signed it with<EMAIL_ADDRESS>(same domain as above) for now, again, but I would like my github handle "bostjan" to be associated with email from the first paragraph of this message. Can you fix that?

@jeffmccune Anything left to be done about @bostjan's CLA?


Issue 219: extend check_model_has_tests_by_name exclude argument to committed files

Description:

Two files changed:

HOOKS.md: update the example of the exclude argument
check_model_has_tests_by_name.py:  applies exclude argument to the the files being committed

Description of the issue can be found in issue 219

Hi @SantiASC, thank you for your contribution. Could you please review and adapt the tests that are failing?

Hi @SantiASC, thank you for your contribution. Could you please review and adapt the tests that are failing?

@BAntonellini i believe this is @SantiASC first pr/open source contribution. is there any guidance you could provide on how he can troubleshoot these failing tests? we work on the same team and are using the package today, would both be happy to contribute more as we get into things but there's a disconnect on how to make sure we do it properly.


Add connections.equations field for quick mechanism creation

Feature request: list connection equations without creating an explicit mechanism.
Context: connections can involve simple connection terms for which the explicit creation of a connection mechanism seems excessive. A quicker means of linking nodes would be preferred.
Current status: connections between nodes involve explicit mechanisms either introduced using external mechanism files (NAME.mech) or by creating lists of equations stored in spec.mechanisms.equations with spec.mechanisms.name = 'NAME'. Connection mechanisms are indicated by setting spec.connections.mechanism_list = 'NAME'. Alternatively, there is a short-hand for models specified using strings: 'A->B: <equations>'.
Implementation: simply set spec.connections.equation = <equations>. Treat the same way as short-hand mechanisms specified in a string as 'A->B: <equations>' but without the need to specify a name for the mechanism.
Method 1: append [';' source '->' target ':' spec.connections.equations] to spec.populations.equations at beginning of dsCheckSpecification then remove .equations from spec.connections.
Method 2: move all connection-associated mechanism equations to spec.connections.equations and process that field like an equation-based spec.populations.equations.
For simplicity, it may be best to use Method 1, at least for now. Is there any reason to use Method 2 (other than elegance)?

Resolved in Pull Request #603


In TLS1.3, will SSL_write yield SSL_ERROR_WANT_READ ? And will SSL_read yield SSL_ERROR_WANT_WRITE?

There is no re-negotiation in TLS1.3, will SSL_write yield SSL_ERROR_WANT_READ? And will SSL_read yield SSL_ERROR_WANT_WRITE?
In SSL_write doc:
As at any time a re-negotiation is possible, a call to a write function can also cause read operations!
In SSL_read doc:
As at any time it's possible that non-application data needs to be sent, a read function can also cause write operations.

You should just assume that for protocol reasons, the TLS layer
might need to read or write. An example with TLS 1.3 is that it
might request a key update.

It looks like this question was answered, so closing.


Better differentiate timeout in ut_event_wait_or_timeout?

ut_event_wait_or_timeout(...) encapsulates WaitForSingleObject(...).
At the moment, WAIT_TIMEOUT isn't distinguishable from WAIT_ABANDONED. Both result in -1 being returned.
Similar issue exists in ut_event_wait_any_or_timeout(...) with its encapsulation of WaitForMultipleObjects (...).

I will, though we do not use WaitFor*Objects on CRITIAL_SECTIONS or mutexes, thus for HEVENT I believe it never happens.
See:
https://chatgpt.com/share/3d9ff833-2d1e-4bec-b308-8018784ab1eb
"The WaitForSingleObject function in the Windows API is used to wait for the state of a specified object to be signaled. The WAIT_ABANDONED return value is specific to mutex objects.
WAIT_ABANDONED is returned when the thread that owns a mutex terminates without releasing the mutex. In other words, if a thread holding a mutex exits without calling ReleaseMutex, any other thread that calls WaitForSingleObject on that mutex will receive the WAIT_ABANDONED status. This indicates that the mutex is released but was not properly signaled because its ownership was not orderly relinquished. This scenario is generally a sign of a programming error, as it can lead to inconsistent or unsafe states within the program due to the abrupt termination of the mutex owner.
It's important to handle this return value to ensure that the application deals correctly with the unexpected state of shared resources."
Maybe we should fail fast (fatal) on WAIT_ABANDONED since this is definitely a big ugly bug in caller logic one way or another.

Agreed on the fail fast handling of WAIT_ABANDONED. Looks like your fail fast checks were removed on migration from old crt.h:
    DWORD ix = WaitForSingleObject(e, ms);
    fatal_if(ix == WAIT_FAILED);
    fatal_if(ix == WAIT_ABANDONED);

You'll need to resolve the behavior with wait2e(ix)

Agreed errors should be fatal. Verified in both situations:
WaitForSingleObject(null, timeout) returns WAIT_FAILED

WaitForSingleObject(e, timeout) returns WAIT_FAILED
when

static void bad_wait(void* p) {
    ut_event_t e = (ut_event_t)p;
    int32_t r = ut_event.wait_or_timeout(e, 1.0);
    traceln("r: %d", r);
}

ut_event_t e1 = ut_event.create();
ut_thread_t t1 = ut_thread.start(bad_wait, e1);
ut_thread.sleep_for(0.5);
ut_event.dispose(e1);

WaitForSingleObject(null, timeout) returns WAIT_FAILED not WAIT_ABANDONED
and it should be fatal.
Thus WAIT_ABANDONED is never returned for event, but
#define wait2e(ix) (errno_t)                                                     \
    ((int32_t)WAIT_OBJECT_0 <= (int32_t)(ix) && (ix) <= WAIT_OBJECT_0 + 63 ? 0 : \
      ((ix) == WAIT_ABANDONED ? ERROR_REQUEST_ABORTED :                          \
        ((ix) == WAIT_TIMEOUT ? ERROR_TIMEOUT :                                  \
          ((ix) == WAIT_FAILED) ? (errno_t)GetLastError() : ERROR_INVALID_HANDLE \
        )                                                                        \
      )                                                                          \
    )

is used in both ut_threads.c and ut_processes.c
In ut_threads.c it indicates an error in the caller code, but in ut_processes.c
it actually legit because the wait could be on the process source code if which is out of our control and it could crash.
I will fix only in ut_threads.c leaving ut_processes.c as it is


Newsblur sync

I realize integration with services are a future feature, so here's my newsblur sync placeholder.
Happy to contribute code for either this specific service or part of the sync integration in general when it's time. API docs are here: https://newsblur.com/api

I add my vote for this feature and add that Newsblur has support for folder hierarchy (folders and subfolders to order feeds) and that no Mac client (neither Reeder not ReadKit) currently support that particularity (this should be considered when building the integration/sync feature).

Count me as yet another user who would love, love, love to see this. I use NewsBlur as my reader because it makes sync easy. But on the Mac, I use a SSB app for it, which isn't ideal. I'd much rather use NNW.

I’m on the NewsBlur-as-prerequisite train as well. That said, I suppose “netnewswire iOS + iCloud sync” would be a completely viable alternative, so whichever of these comes up first...
Sent with GitHawk

One more NB wish from me, also it'd be even better if NB's Intelligence Classifiers (aka Feed Training/Focus Mode) could also be supported at some point:
https://www.newsblur.com/api#/classifier/:id

I noticed while digging that a fairly large amount of work on NewsBlur support seems to have landed on March 21st, so I figured I'd mention it here to inspire hope in others. (Obviously, no ETAs.)

Has this been implemented?

Yes.  It is scheduled to be released in NetNewsWire 6.0, but that could change depending on how testing goes.


Consistent final_state_vector

Fixes #3693.
This pushes Circuit.final_state_vector and mux.final_state_vector towards a shared API of:
def final_state_vector(
    program: 'cirq.CIRCUIT_LIKE',
    *,
    initial_state: 'cirq.STATE_VECTOR_LIKE' = 0,
    param_resolver: 'cirq.ParamResolverOrSimilarType' = None,
    qubit_order: 'cirq.QubitOrderOrList' = ops.QubitOrder.DEFAULT,
    ignore_terminal_measurements: bool = False,
    dtype: Type[np.number] = np.complex64,
    seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None,
) -> 'np.ndarray':

Additionally, calls to Circuit.final_state_vector will now pass through the simulator instead of using apply_unitary.
Notable changes in Circuit:

qubits_that_should_be_present is deprecated
Use of positional args is deprecated
The default of ignore_terminal_measurements will change to False in v0.16
The default of dtype has directly changed to np.complex64

Notable changes in mux:

Addition of ignore_terminal_measurements parameter

Other changes:

Added drop_terminal_measurements transformer

Shout-out to @tanujkhattar for the Transformers API - it massively simplified the process of migrating drop-terminal-measurements behavior from in-simulation to pre-simulation. Thanks Tanuj!


Add camera and flags

Add camera and flags
You need add camera and FlagManager on scene — example in MapGen2DemoScene

Doubtful but okay


chore: nova: bump chart to 0.3.47

This includes fixes from
https://review.opendev.org/c/openstack/openstack-helm/+/936258
Closes PUC-633

closing to test jira integration


[POC] Do not send varying packet losts in RR

Description
Chrome 72+ has changed the bandwidth estimation behaviour and it's now getting affected in situations where we forward RRs with different packet losts reported. This PR is a PoC that might become in a final solution if we don't find a better one.
The issue is well explained at #1364.
[] It needs and includes Unit Tests
Changes in Client or Server public APIs
Not needed.
[] It includes documentation for these changes in /doc.

this has been already merged in a better PR.


Schema validation failed with the following errors:   Data path "" should NOT have additional properties(serve).

🐞 Bug report
Command (mark with an x)

- [ ] new
- [ ] build
- [ ] serve
- [ ] test
- [x ] e2e
- [ ] generate
- [ ] add
- [ ] update
- [ ] lint
- [ ] xi18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

Description
I want to run e2e test, the test works fine, but it keeps on loading the angular server each time, in order to avoid that, I want to run the test without running the serve. Hence wrote this
"e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "./protractor.conf.js",
          },
          "configurations": {
            "staging": {
              "serve": false,
              "devServerTarget": "angular2-express-starter:serve:dev-staging"
            }
          }
        },

But after this if I run ng e2e --configuration=staging I get the error as
Schema validation failed with the following errors:   Data path "" should NOT have additional properties(serve).
🔬 Minimal Reproduction
Simple steps to reproduce this bug.
Adding serve in options of e2e in angular.json file
Then running ng e2e
🌍 Environment
Package                           Version
@angular-devkit/architect         0.12.3
@angular-devkit/build-angular     0.12.3
@angular-devkit/build-optimizer   0.12.3
@angular-devkit/build-webpack     0.12.3
@angular-devkit/core              7.2.3
@angular-devkit/schematics        7.3.7
@angular/cli                      7.3.7
@ngtools/webpack                  7.2.3
@schematics/angular               7.3.7
@schematics/update                0.13.7
rxjs                              6.3.3
typescript                        3.2.4
webpack                           4.28.4

@Manzurkds Thanks for noticing the issue. I'm also facing the same issue.

The failure here is expected. serve is not a valid options for the E2E builder. With regards to the other issue that you are experiencing. I am unable to replicate it.
I strongly suggest you update the @angular-devkit and CLI packages to the latest version.
If the problem persists, please open a new issue with the steps to re-produce the issue. A good way to make a minimal repro is to create a new app via ng new repro-app and add the minimum possible code to show the problem. Then you can push this repository to github and link it here.

@alan-agius4
I had updated my @angular-devkit, but it doesn't change anything. If serve is not a valid option, then how do I run e2e test without running ng serve inside it.
My use case is, I want to run ng serve seperately.
So that any iterations I make to my test cases, I don't have to wait for ng serve to load up again and again.

I had a similar issue related to schema validation and gave a solution in issue #14338.
This was based on my findings from two answers on StackOverflow (also related to Schema Validation error) :

https://stackoverflow.com/a/56537342/8245387
https://stackoverflow.com/a/56624167/8245387

You have version 0.12.3, but try to change to 0.12.4

Open your package.json file at the root of your project :

[...]
"devDependencies": {
    "@angular-devkit/build-angular": "~0.800.6",        // <-- Change the version to 0.12.4
    "@angular/cli": "~8.0.6",
    "@angular/compiler-cli": "~8.0.3",
    "@angular/language-service": "~8.0.3",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^5.0.0",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.4.3"
  }
}

Change the version 👍
@angular-devkit/build-angular": "^0.800.1"

to :
@angular-devkit/build-angular": "^0.12.4"

You have version 0.12.3 but try to change it to 0.12.4. If your error is solved, then this could narrow down the problem.
This fixed


feature/DGJ-680_floating-button

Summary
This PR would allow a Form designer to add floating buttons to the forms.
Changes

Adding floating styles that a designer can use to make a button float on two positions (more can be added per request).
Make the PDF button a custom form.io button that emits the print event to the different components.
Adding the necessary logic to hide all floating buttons during the PDF generation on FE.
Make the PrintPDF button enable and saveAsDraft hidden on submission.view page (only applicable to Telework)

Notes
The floating button will be positioned on top of the page on the server-generated PDFs. I didn't spend time removing them from that pdf since we might replace it with the AOT PDF generator in the future. See below image:

Screenshots (if applicable)

Looks good! Just one suggestion, I think we can fairly easily also hide it from the server side generated PDFs by adding a css tag to hide . floatingButtons in the template used for generation (formio-upload/pdf-gteneration/formio.html)

Good one, will try that before merging.


CORE-5087 Add support for returning flow platform errors back to user code

@LWogan should review parts around the session manager changes + can review the pipeline stuff now he's worked with it a bit.


After moving draggable marker, buttons do not respond to touch

Bug report
Summary
Drag the marker on the map, then try to press a button and it will not respond to the touch event.
Environment info

react-native info output:
System:
OS: macOS 10.15.7
CPU: (12) x64 Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
Memory: 1.69 GB / 16.00 GB
Shell: 5.7.1 - /bin/zsh
Binaries:
Node: 15.0.1 - /usr/local/bin/node
npm: 6.14.8 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 14.4, DriverKit 20.2, macOS 11.1, tvOS 14.3, watchOS 7.2
IDEs:
Android Studio: 4.1 AI-201.87<IP_ADDRESS>99119
Xcode: 12.4/12D4e - /usr/bin/xcodebuild
npmPackages:
react: ^16.13.1 => 16.14.0
react-native: ^0.63.2 => 0.63.4
Steps to reproduce
Drag marker and then try touching any button in the header (react navigation) and they will not respond to touch.
Reproducible sample code
`
import React, { Component } from 'react';
import MapView, { Callout, Circle, Marker, PROVIDER_GOOGLE } from 'react-native-maps';
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
export default class Map extends Component
{
_mapViewRef = null;
constructor(props)
{
  super(props);
  console.log('\tMap()');
  this._dataMgr = DataManager.GetInstance();
  this.state =
  {
  };

  this._mapViewRef = React.createRef();
}

render()
{
  const locationData =
  {
    mapLocation
    {
      latitude: 36.7783,
      longitude: 119.4179,
      latitudeDelta: 0.0922,
      longitudeDelta: 0.0421,
    },
    alertLocation
    {
      latitude: 36.7783,
      longitude: 119.4179,
      latitudeDelta: 0.0922,
      longitudeDelta: 0.0421,
    }
  };

  return (
  <KeyboardAvoidingView style={styles.container}>
    <KeyboardAwareScrollView
      contentContainerStyle={{flexGrow: 1}}
      keyboardShouldPersistTaps={'always'}
    >

      <View style={{height: '100%'}}>
        <MapView
          ref={this._mapViewRef}
          provider={PROVIDER_GOOGLE}
          onPress={(e) =>
          {
          }}
          onRegionChangeComplete={async(region, isGesture) =>
          {
            console.log('Map.onRegionChangeComplete()');
          }}
          region={(locationData && locationData.mapLocation) ? locationData.mapLocation :
          {
            latitude: this.props.geofenceArea.location.coordinates[1],
            longitude: this.props.geofenceArea.location.coordinates[0],
            latitudeDelta: 0.0922,
            longitudeDelta: 0.0421,
          }}
          showsUserLocation={true}
        >
          <Circle
            center={locationData.alertLocation}
            radius={500}
            onRegionChangeComplete={async(e) =>
            {
              console.log('Circle.onRegionChangeComplete()');
              return true;
            }}
            strokeWidth = { 5 }
            strokeColor = { '#1a66ff' }
            fillColor = { 'rgba(230,238,255,0.5)' }
          />
          <Marker
            draggable
            coordinate={locationData.alertLocation}
            onDragEnd={async(e) =>
            {
              console.log('OnMarkerDragEnd()');
              return true;
            }}
            pinColor={"green"}
          />
        </MapView>

    </KeyboardAwareScrollView>
  </KeyboardAvoidingView>
  );
}

}
`

Having the same issue as mentioned above; note that this isn't just for react-navigation header buttons but any other button on the screen. Resolves onse map is panned after dragging the marker.
Anyone with a fix 😇?

@tgreco - I found a fix for me (though, I'm not using react-navigation buttons, but custom made). Try importing TouchableOpacity from react-native-gesture-handler instead of react-native package for your buttons if you can. This solved it for me. Reference - https://github.com/react-native-maps/react-native-maps/issues/3053#issuecomment-771475443

Is this really a fix or a workaround though?
I've never seen a library break the default TouchableOpacity in my life.

haha, yup i just feel weird on this package too haha, but this is the only package, not choice

Is this really a fix or a workaround though?
I've never seen a library break the default TouchableOpacity in my life.


Header does not show all the data

Type of issue

[x] Bug
[ ] New feature
[ ] Enhancement

Description
After upgrading to 2.2.0 the header does not display correctly.

Expected behavior
The header remains the same as the previous versions

Hi @gauravagerwala We have recently changed the design to follow what you are seeing. Will close this issue as by design.


[CodeClean][DAO]Remove redundant comments

Remove redundant comments
ProcessInstanceMapper# queryProcessInstanceListPaging

@BoYiZhang @CalvinKirs I made some changes to this issue PR: 1, please review it


Embed Mastodon feed on the website

Is your feature request related to a problem? Please describe.
No
Describe the solution you'd like
Similar to what we can already do for Twitter, I would like to embed my latest posts from my Mastodon profile on the website.
Describe alternatives you've considered
N/A
Additional context
N/A

Apparently someone started a plugin for this, but don't know the current status of it.

I tried to install this widget and follow the steps for installation, but it does not show anything on the screen when I built the website using the new code. Any ideas what else I could try?


Examples does not work anymore in Gmail

Hi guys,
I tried to use Zurb Ink to design my email template. It is working fine in Outlook but fail to render in Gmail and I have absolutely no idea why.
Even in Litmus, the rendering is not ok :

But, when you look at the testing on the example page, the rendering seems ok (https://litmus.com/pub/85a1b19)... Is there any chance the code is different between the example we download and the code used on Litmus ?

Thats odd. Did you run the html with CSSinliner before sending?

I just tried with the inliner and it worked... I completely missed this step... Thank you.
My main issue here is that I use a python script to generate the email. Is there any inliner compatible with Zurb Ink in python ?

Take a look at https://github.com/peterbe/premailer

I was looking for Premailer that works in C# for the INK, but somehow Premailer.NET here on github doesnt seem to work (breaks the sidebar example for instance). Anyone using C# with INK out there?
I did read the INK cssinliner is using https://github.com/zurb/premailer so you might get better luck with phython.

I would recommend https://github.com/peterbe/premailer over https://github.com/zurb/premailer for python. I've been using it in production for some time and it is very solid and actively maintained. The other one has a last commit of 2013.

Thank you ! I'll give it a try :)


Update data residency for Assistants

Based on https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency , the data will be stored in the same Geo but not region.

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

Thank you so much for your contribution. We are currently going through a repo migration that starts next week, so all open PRs against the Azure OpenAI content are being closed out. I am tracking your requested change internally. I need to double check with the PM who owns this area to confirm this change in language.

#please-close


GWT docs incomplete

The page https://github.com/mongodb/morphia/wiki/GoogleWebToolkit says to download the gwt module jar and add the inherits node to gwt.xml module
Where is the GWT module JAR? Without it i get the error: [ERROR] Unable to find 'org/mongodb/morphia/Morphia.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?

https://github.com/ismetozalp/morphia-gwt
On Friday, July 3, 2015, Fuzzo<EMAIL_ADDRESS>wrote:

The page https://github.com/mongodb/morphia/wiki/GoogleWebToolkit says:
"
To use morphia with GWT all you need to do is download the gwt module jar
and add this to your .gwt.xml file:
"
Where is the GWT module JAR? Without it i get the error:
"
[ERROR] Unable to find 'org/mongodb/morphia/Morphia.gwt.xml' on your
classpath; could be a typo, or maybe you forgot to include a classpath
entry for source?
"
—
Reply to this email directly or view it on GitHub
https://github.com/mongodb/morphia/issues/818.

With the new docs site, i should disable the wiki or at least link to the
new site http://mongodb.github.io/morphia/.  I'll do that now.
--------------------------------
*{ name     : "Justin Lee", *
title    : "Software Engineer",
twitter  : "@evanchooly http://twitter.com/evanchooly",
web      : [ "10gen.com", "antwerkz.com" ],
location : "New York, NY" }
On Fri, Jul 3, 2015 at 2:36 PM, ismetozalp<EMAIL_ADDRESS>wrote:

https://github.com/ismetozalp/morphia-gwt
On Friday, July 3, 2015, Fuzzo<EMAIL_ADDRESS>wrote:

The page https://github.com/mongodb/morphia/wiki/GoogleWebToolkit says:
"
To use morphia with GWT all you need to do is download the gwt module jar
and add this to your .gwt.xml file:
"
Where is the GWT module JAR? Without it i get the error:
"
[ERROR] Unable to find 'org/mongodb/morphia/Morphia.gwt.xml' on your
classpath; could be a typo, or maybe you forgot to include a classpath
entry for source?
"
—
Reply to this email directly or view it on GitHub
https://github.com/mongodb/morphia/issues/818.

—
Reply to this email directly or view it on GitHub
https://github.com/mongodb/morphia/issues/818#issuecomment-118406647.


Add coreos.platforms stage

Process all necessary operations related to CoreOS platforms is crucial and specific to CoreOS. This step is essential for CoreOS exclusively.

Our approach to handling 'platforms.json' may change as we advance with the OSBuild work. However, we don't have a clear vision about how it will be in the future yet, particularly as we also manage similar components within the osbuild composer to configure cloud parameters. We probably will know better when we start working with the cloud artifacts.

As a summary, let's add it know to unblock us, and if we find a better approach in the future we can always go back and remove it.

I did some clean up. If I understood we still need some test for this new stage + new util funcs. I working in this last part.

From @bcl

I'd also like to see some tests, take a look at the newish testing framework in stages/tests/ for ideas.

Would it be OK if we worked on that next week after the next dev cutoff? We talked with @mvo5 earlier today and he was offering mentorship to help create the tests.

Well at least we appeased the CI machine and everything passed!

@bcl as @dustymabe mentioned, would it be ok to work with the remaining items as a follow up?

From @bcl

I'd also like to see some tests, take a look at the newish testing framework in stages/tests/ for ideas.

Would it be OK if we worked on that next week after the next dev cutoff? We talked with @mvo5 earlier today and he was offering mentorship to help create the tests.

Thank you, in the interest of time, let's do the tweaks/tests in a followup to unblock the deadline.

Thank you @mvo5 for being so helpful!


Enable-WriteCore-feature-for-privatedns

Contributing to the Azure SDK
Please see our CONTRIBUTING.md if you are not familiar with contributing to this repository or have questions.
For specific information about pull request etiquette and best practices, see this section.

API change check
APIView has identified API level changes in this PR and created following API reviews.
Azure.ResourceManager.PrivateDns


Add task_thread_pool to benchmarks

Add https://github.com/alugowski/task_thread_pool to the benchmarks.
task_thread_pool is a C++11 thread pool. It's not work-stealing, with performance between BS::thread_pool and the two work-stealing pools.
On my Mac:
| relative |               ms/op |                op/s |    err% |     total | matrix multiplication 256x256
|---------:|--------------------:|--------------------:|--------:|----------:|:------------------------------
|   100.0% |               84.86 |               11.78 |    0.5% |     15.24 | `dp::thread_pool - std::function`
|    69.9% |              121.44 |                8.23 |    4.8% |     21.32 | `BS::thread_pool`
|    71.9% |              118.07 |                8.47 |    5.7% |     21.19 | :wavy_dash: `task_thread_pool` (Unstable with ~16.3 iters. Increase `minEpochIterations` to e.g. 163)
|   117.7% |               72.08 |               13.87 |    3.2% |     12.98 | `riften::Thiefpool`

| relative |               ms/op |                op/s |    err% |     total | matrix multiplication 512x512
|---------:|--------------------:|--------------------:|--------:|----------:|:------------------------------
|   100.0% |               55.32 |               18.08 |    0.4% |      9.92 | `dp::thread_pool - std::function`
|    48.8% |              113.34 |                8.82 |    4.0% |     20.24 | `BS::thread_pool`
|    54.9% |              100.85 |                9.92 |    2.9% |     17.86 | `task_thread_pool`
|   105.6% |               52.37 |               19.09 |    0.4% |      9.44 | `riften::Thiefpool`

@alugowski Thanks for submitting this! Some really interesting results on my machine (Windows 11) with MSVC and Clang 16.
I've updated the benchmark results to reflect the new results with your library. Thanks again!


Stage2 clang: llvm-tblgen will not compile

Under chroot, LLD and clang will not compile because llvm-tblgen fails to compile:
[14/22] Building CXX object utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenHwModes.cpp.o
In file included from /sources/llvm-project-15.0.5.src/llvm/utils/TableGen/DAGISelMatcherOpt.cpp:14:
/sources/llvm-project-15.0.5.src/llvm/utils/TableGen/CodeGenDAGPatterns.h:1046:23: error: expected expression
    return Operands[ON];
                      ^
1 error generated.

Source for TableGen builds fine if built with the stage0 clang

Perhaps, stage1 should have been compiled from source that wasn't patched to use the dynamic loader at /llvmtools/lib and the packages built for llvmtools will then need to have the executables patched with the dynamic loader at /llvmtools/lib

^ Tried it. Same exact errors.
Tried the GCC+libstdc++ built for llvmtools: Same error.

But yet, stage0 clang can be reconfigured to build stage2 for the final system.
If so, was there a reason for building stage1 clang?

For now, stage0 will build stage2 clang. This change is introduced with commit 550cf2c3fc9990ea85f367d0215912214f7e0eb2
I may end up moving stage0 clang from cgnutools to llvmtools:

Build mussel to produce cross-gcc
Use cross-gcc to build stage0 clang and install in llvmtools
Use stage0 clang to build rest of llvmtools
Enter chroot. Build final system clang with stage0 clang

If successful, this would reduce build time as clang [& friends] will be built only twice as stage0 and final system compiler... instead of 3 times.
Interestingly, stage0 clang runs both on the host [glibc] and under chroot [musl]


Unable to run fanuc driver

Output:
gridx@GXVN00009:~/fanuc-driver/fanuc $ ./bin/Release/net6.0/fanuc --nlog ../../../../examples/fanuc-driver/nlog-example.config   --config ../../../../examples/fanuc-driver/config-example-makino.yml
Bitness: 64-bit
Argument '--nlog' = '../../../../examples/fanuc-driver/nlog-example.config'
Argument '--config' = '../../../../examples/fanuc-driver/config-example-makino.yml'
Unhandled exception. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.DllNotFoundException: Unable to load shared library 'libfwlib32-linux-armv7.so.1.0.5' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibfwlib32-linux-armv7.so.1.0.5: cannot open shared object file: No such file or directory
   at l99.driver.fanuc.Focas.cnc_startupprocess(Int64 level, String filename)
   at l99.driver.fanuc.Platform.<>c__DisplayClass134_0.<StartupProcess>b__0() in /home/gridx/fanuc-driver/fanuc/platform/StartupProcess.cs:line 16
   at l99.driver.fanuc.Platform.<>c.<.ctor>b__39_0(Func`1 nativeCallWrapper) in /home/gridx/fanuc-driver/fanuc/platform/Platform.cs:line 31
   at l99.driver.fanuc.Platform.StartupProcess(Int16 level, String filename) in /home/gridx/fanuc-driver/fanuc/platform/StartupProcess.cs:line 14
   at CallSite.Target(Closure , CallSite , Object , Int32 , String )
   at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid3[T0,T1,T2](CallSite site, T0 arg0, T1 arg1, T2 arg2)
   at l99.driver.fanuc.strategies.FanucStrategy..ctor(Machine machine, Object cfg) in /home/gridx/fanuc-driver/fanuc/strategies/FanucStrategy.cs:line 12
   at l99.driver.fanuc.strategies.FanucExtendedStrategy..ctor(Machine machine, Object cfg) in /home/gridx/fanuc-driver/fanuc/strategies/FanucExtendedStrategy.cs:line 38
   at l99.driver.fanuc.strategies.FanucMultiStrategy..ctor(Machine machine, Object cfg) in /home/gridx/fanuc-driver/fanuc/strategies/FanucMultiStrategy.cs:line 8
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Span`1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at l99.driver.base.Machine.AddStrategyAsync(Type type, Object cfg) in /home/gridx/fanuc-driver/base-driver/base/Machine.cs:line 99
   at CallSite.Target(Closure , CallSite , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid1[T0](CallSite site, T0 arg0)
   at l99.driver.base.Machines.CreateMachines(Object config) in /home/gridx/fanuc-driver/base-driver/base/Machines.cs:line 138
   at CallSite.Target(Closure , CallSite , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
   at l99.driver.fanuc.FanucService.ExecuteAsync(CancellationToken stoppingToken) in /home/gridx/fanuc-driver/fanuc/Program.cs:line 41
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at l99.driver.fanuc.Program.Main(String[] args) in /home/gridx/fanuc-driver/fanuc/Program.cs:line 19
   at l99.driver.fanuc.Program.<Main>(String[] args)
Aborted

I am unable to figure out this shared library thing.

@goutamkumar77
What OS and architecture are you running on?
Also, when you built the source, are the Focas libraries in bin/Release/net6.0  alongside the built binary?

@goutamkumar77 Oh, and if you are running ARM with 64bit, then you will either need to figure out how to link 32bit Focas libraries... or run as a container, built on top of 32bit base.

OS: debian
Architecture: arm64

OS: debian Architecture: arm64

@goutamkumar77 Oh, and if you are running ARM with 64bit, then you will either need to figure out how to link 32bit Focas libraries... or run as a container, built on top of 32bit base. There are no 64bit ARM Focas libraries, only 32bit.

Got it. Thanks. Will try.

Actually, what happens if you build against .NET 6 Arm32?

OS: debian Architecture: arm64

@goutamkumar77 Oh, and if you are running ARM with 64bit, then you will either need to figure out how to link 32bit Focas libraries... or run as a container, built on top of 32bit base. There are no 64bit ARM Focas libraries, only 32bit.

Got it. Thanks. Will try.

hello,this problem how to solve


[gVim] Font ligatures don't display correctly when directly placed under cursor

Steps to reproduce
I disabled cursor blinking for the purpose of screenshots (set guicursor+=a:blinkon0), but the behaviours are the same with or without this line.

Enable ligatures (e.g., set guiligatures=!\"#$%&()*+-./:<=>?@[]^_{\|~)
Use a font that supports ligatures (e.g., set guifont=JetBrainsMono\ 12)
Place the cursor over a character that is a part of a ligature
The underlying (non-ligatured) character is shown, which is a bigger problem in insert mode because both the non-ligatured character and the ligature are shown

Expected behaviour
I expected only the ligature to be shown.
Version of Vim
9.0.1736
Environment
OS: Arch Linux
Typeface/font: JetBrains Mono
gVim: 9.0.1736
Colour theme:  PaperColor
Logs and stack traces
No response

Can anyone replicate this? Or fail to replicate? That would also be helpful.
Just want to add that my desktop environment is KDE. This bug continues to exist on my machine with gVim 9.0.2143.

I think I'm seeing something similar.
OS: Windows 10
Typeface/font: Iosevka
gVim: 9.1.0
Color theme: gruvbox
The ligature starts in a broken state, but eventually fixes itself (mostly) after a while. But whenever you bring the cursor on-top of a ligature again, it looks broken again. By pressing Ctrl-L (which IIRC redraws the screen) the problem is completely "fixed" until you start moving the cursor again or write more ligatures.
I have not specified any set guiligatures in my .vimrc, but AFAIK from a related issue reported here, that does not seem to do anything since ligatures will always be used, as long as you use a font with ligatures (see #13435 for more info). The only special thing I have in my .vimrc re: to ligatures is set rop=type:directx which was needed to get ligatures to show up at all in gvim.
Here's a short GIF to show what's happening here (every time the ligatures look correct, it's due to me manually pressing Ctrl-L):

Hmm, I think I see the problem. gui_undraw_cursor in gui.c is only expanding the cursor in GTK. This is also why guiligatures doesn't actually do anything in Windows gvim. When you hover over the ligature it only redraws the cursor at the position and one character before it. In reality, it needs to redraw the whole ligature (i.e. search for those guiligature characters before and after). So fix looks quite easy, just need to make gui_adjust_undraw_cursor_for_ligatures work for Win32. But yeah, I think my problem is different from the one detailed in the original ticket.

I'm seeing this issue in 8.2.2121 under GTK (refer to the xref above), so it doesn't seem to be just a Windows thing.


Look into supporting batch processing

Converting a batch of books is a very common use case. I'm not sure if supporting batch conversion is something we would do entirely on the UI side or if the engine has some built-in capabilities. Either way, the UI would require some work to accommodate this.
Relevant discussion: https://github.com/daisy/pipeline/discussions/798

I know that<EMAIL_ADDRESS>uses the cli for batch processing of the CSUN files. The question is how can the CLI be used to automate processes? I would also think that Bookshare would need this functionality documented.
Tom, can you chime in?

I have used PowerShell and batch files to convert batches of titles. If the GUI could also do this without adding lots of complexity, that would be neat.

From: George @.>
Sent: Wednesday, November 20, 2024 5:39:32 PM
To: daisy/pipeline-ui @.>
Cc: Subscribed @.***>
Subject: Re: [daisy/pipeline-ui] Look into supporting batch processing (Issue #259)
I know that<EMAIL_ADDRESS>uses the cli for batch processing of the CSUN files. The question is how can the CLI be used to automate processes? I would also think that Bookshare would need this functionality documented.
Tom, can you chime in?
—
Reply to this email directly, view it on GitHubhttps://github.com/daisy/pipeline-ui/issues/259#issuecomment-2489500924, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ACFL563NUTXOVUPNJHF56ST2BTXQJAVCNFSM6AAAAABSFNHMDSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBZGUYDAOJSGQ.
You are receiving this because you are subscribed to this thread.Message ID: @.***>


[PIO-12] Add Scala style rules, FileTabChecker, NonASCIICharacterChecker and SpaceAfterCommentStartChecker

As described in https://issues.apache.org/jira/browse/PIO-12, it seems there are some basic rules are missing. This PR adds the rules below:

FileTabChecker
This complies http://docs.scala-lang.org/style/indentation

NonASCIICharacterChecker
Currently, there is a weird non-ascii characters such as, ⇒ instead of => and → instead of ->.

SpaceAfterCommentStartChecker
Please refer this. Both comply Java doc style and Scala doc style.

Hi @dszeto, I remember similar PR was reviewed by you before. Could you take a look please?
I can

add some rule for Scala or Java documentation style check if you tell me which one is preferred
correct the header rule to check Apache license in here.

The latter seems related with PIO-3. I can deal with them together here or just do the former one.

@HyukjinKwon LGTM


Remove moj-analytical-services/operations-engineering Repository

Background 👀
In Github, we have two organisations:

ministryofjustice
moj-analytical services

Originally the team created scripts to manage the ministryofjustice organisation, found in the ministryofjustice/operations-engineering repository.
The team then started to manage the moj-analytical services organisation.
The choice was made to clone the repository into moj-analytical-services/operations-engineering for the benefit of quickly getting up and running and managing the estate.
Since then, it has become apparent there is a maintenance burden, trying to keep both repositories inline, duplicating errors and bug fixes.
The purpose of this ticket is to remove the moj-analytical-services/operations-engineering repository completed.
Doing this will involve refactoring the original repository to handle the management of multiple organisations easily - reusing common components and reducing maintenance burden and risk whilst also increasing the speed of development, allowing us to deploy features and fixes faster.
Task 🚀
There are a few options for migrating the scripts and jobs over to remove the duplicate repository:

Lift and shift: copy and paste all scripts/jobs as they are. This will be the quickest solution but doesn't immediately remove the duplication and maintenance burden. However, this method does make it easier to maintain.
Refactor and remove: Refactor the scripts in the main repository until they are in a state where they can perform the same job as the moj-analytical-services version, then remove the moj-analytical-services version. This method will take more time, though it will seriously decrease our maintenance burden going forward.

Useful 🧠

ministryofjustice/operations-engineering Main repostiory.
moj-analytical-services/operations-engineering Needs removing.

Acceptance Criteria 🎯

Remove the moj-analytical-services/operations-engineering repository

Chosen to do this ticket in two phases:
PHASE 1 - Lift and Shift
essentially copy and paste the code from MoJAS to MoJ to quickly remove the duplicate repository
PHASE 2 - Basic Refactoring
Refactor the code start using common components across the duplicate scripts

Phase 1 is complete with the repository now being a public archive https://github.com/moj-analytical-services/operations-engineering

Phase 2 is complete with some basic refactors implemented.
Ideally, all duplication would be removed, requiring more complex work for each script.
Therefor, I'll mark this ticket as complete and create two more tickets to refactor each duplicate script.


Sources Map ID error

Another bug in Windows version:
In the Layers tab, if I try to change the source, the map ID displayed is incorrect.
For instance, my map is: "tmsource://c/Users/FLP/Countries.tm2source"
When I go to local source, then choose my map in the list, it displays:
"tmsource://c:/Users/FLP/Countries.tm2source", with a : after the c, which is incorrect, the source won't load, I have to manually correct the map ID before clicking on Apply.
Also, I tried to add several sources by adding a comma between map IDs as stated in the comment but it does not work, the apply button don't work. How can I add several sources ? (for instance my local source and the remote mapbox streets) ??

@camilleanne I second @markiliffe and @flemmens request.
Actually I've seen quite a share of confusion on the interwebz regarding Studio's Local Sources.
For instance, you are saying that "..regarding compositing multiple sources, you can only composite remote sources".
But in the GUI if I browse to Layers -> Change Source -> Local there's a (possibly)misleading text indication under the "local path" toolbar..
Is that a bug or am I missing something? (see attached image)

And what about the case when you are dealing with not uploadable data, as @flemmens is asking (say for privacy/license concerns)..
Am I, de facto, forced not to use Studio altogether since I have to upload such data on my Mapbox account?
Thanks in advance for your answer!

@flemmens Mapbox Studio is "Tilemill 2" -- Tilemill being for the creation and styling of raster tiles and Mapbox Studio for the creation and styling of vector tiles. The use case you put forth (huge amounts of proprietary data that you cannot distribute, but would benefit from Mapbox data and layers) is a good candidate for Atlas Server which provides a Mapbox.com environment, but your own servers, and also integrates with Mapbox Studio.
We offer Mapbox Streets as an mbtiles download for Atlas Server users -- but Mapbox Streets is an enormous file which is why we only offer it enterprise. Also the most up to date version of Mapbox Streets exists as individual tiles on our servers, not an mbtiles file.

@markiliffe

@miccferr I've ticketed out what you are seeing and a clearer explanation in that UI will be in a future release. You're right, it's misleading. If you had tried to composite two local sources, you would have gotten an error, even though the hint implies you can. And if you data you cannot upload to Mapbox.com,  Atlas Server is your best bet.
Also, if you have your own map server that is capable of serving map tiles compatible with Mapbox.js, you can composite Mapbox maps with your own data following this pattern: https://www.mapbox.com/mapbox.js/example/v1.0.0/layers/ with Mapbox Streets being served from Mapbox.com, and your data served from your own server.
see also: https://www.mapbox.com/mapbox.js/api/v2.1.5/l-mapbox-tilelayer/


Setup continuous integration for JS

As of now, we're not running linting and tests as part of CI for this repo. They do run locally and have E2E tests too.

Caveat. E2E test might be a problem as token might be scoped to current repository only.
To prevent a complex seed data for issues and pull requests, E2E is sourcing data from a known repository and using this repository to create/update reports.

I'll probably tackle this in 2 separate PRs: one for linting & code quality and another for E2E.
If we need to create a GH PAT, we could consider using @aws-powertools-bot and give it access to that other known repo.


add rct1 "scrambled eggs" preview colour

adds the rct1 colour preset scheme to the ride presets

I haven't looked into it. I was watching twitch the other day and someone was streaming rct deluxe and I noticed the twist thumbnail. I could simply google all of the rct1 thumbnails from the wiki and compare them to the ingame presets however.

It looks like you mixed tabs with spaces (even after the latest commit). Please use spaces throughout.

should be fixed


Feature request: Add Korean Cheonjiin input

Hello,
Amazing app by the way!
Would it be possible to add Korean inputs into this?
I don't think we need predictive typing as Korean is super straight forward to type using a T9 keyboard.
As a person who speaks both English and Korean it would be awesome if this can support them both :).

And hello to you!
I have nearly zero knowledge about the language. I only know you combine dots and letters to form vowels and consonants, but how it all works is beyond me. Could you please point me to an article, preferably something wiki-like, where I can first educate myself? Or, if you can explain how letters are built and what to put on each key, it would be even better.
Also, have in mind including Korean may not happen so soon. As you can see, many other bugs and features are in the queue.

Thanks heaps for replying, you've made me think about how this actually
works which as a native I haven't really thought about. I'm okay
with waiting, I don't expect this to be implemented as it's so different to
alphabet based languages.
We might start with how Korean works.
[image: image.png]
That is what the standard Chunjiin keypad looks like.
1 =ㅣ, 2 = dot, 3 = ㅡ and these make the vowels which will be explained
below.
4 ~ 0 = Consonants

= changes between Korean, English, numbers, and symbols. (My phone also
has a vibration mode switch (long press) but I don't expect other phones to
be the same)

= Equivalent to right arrow (->) on other phones with physical keypads.
There are 21 vowels:
ㅏ,ㅐ,ㅑ,ㅒ,ㅓ,ㅔ,ㅕ,ㅖ,ㅗ,ㅘ,ㅙ,ㅚ,ㅛ,ㅜ,ㅝ,ㅞ,ㅟ,ㅠ,ㅡ,ㅢ,ㅣ
You are correct about combining dots to other letters to write them.
Combining follows the order that would either go left to right, or top to
bottom. This is the same method for writing each complete syllable
(explained later).
All vowels can be broken down into 'sticks' (1 = ㅣ, 3 = ㅡ)  and dots (2).
I'll list all vowels as examples are the best:
ㅏ = ㅣ(1)  + dot (2)
ㅐ = ㅣ(1)  + dot (2) + ㅣ(1)
ㅑ = ㅣ(1)  + dot (2) + dot (2)
ㅒ = ㅣ(1)  + dot (2) + dot (2) + ㅣ(1)
ㅓ = dot(2) + ㅣ(1)
ㅔ =  dot(2) + ㅣ(1)  + ㅣ(1)
ㅕ = dot(2) +  dot(2) + ㅣ(1)
ㅖ = dot(2) +  dot(2) + ㅣ(1)  + ㅣ(1)
ㅗ =  dot(2) + ㅡ(3)
ㅘ = dot(2) + ㅡ(3) + ㅣ(1)  + dot (2)
ㅙ = dot(2) + ㅡ(3) + ㅣ(1)  + dot (2) + ㅣ(1)
ㅚ = dot(2) + ㅡ(3)  + ㅣ(1)
ㅛ = dot(2) + dot(2) + ㅡ(3)
ㅜ = ㅡ(3) + dot(2)
ㅝ = ㅡ(3) + dot(2) +  dot(2) + ㅣ(1)
ㅞ =  ㅡ(3) + dot(2) +  dot(2) + ㅣ(1) + ㅣ(1)
ㅟ = ㅡ(3) + dot(2) + ㅣ(1)
ㅠ = ㅡ(3) + dot(2) + dot(2)
ㅡ =  ㅡ(3)
ㅢ = ㅡ(3) + ㅣ(1)
ㅣ = ㅣ(1)
Keys from 4 to 0 are all consonants, and typing them should be fairly
obvious:
ㄱ = 4
ㅋ = 44
ㄴ = 5
ㄹ = 55
And so on..
But note that while it's not shown on the keyboard, there are 'double'
consonants that need to be explained.
They are all listed below:
ㄲ= 444 (NOT ㄱ(4) + space(#) + ㄱ(4) !!!)
ㄸ= 666
ㅃ= 777
ㅆ= 888
ㅉ= 999
Let's start with an example:
If you want to write a word, you would divide it into each syllable.
For example:
Computer = com pu ter = 컴퓨터 (each of these complex looking characters are a
syllable)
Korean is always written and(typed) in this order: Starting consonant -
vowel - ending consonant (if there is one).
This is actually the same in English, using syllable 'com' as an example: C

O - M

As you can see from the 'computer' example. Korean has vowels that can be
placed in two locations:
컴 : has a vowel (ㅓ) placed on the left of the starting consonant (ㅋ)
퓨: has a vowel (ㅠ) placed on the bottom of the starting consonant (ㅍ)
These are the only places that vowels go, and these are decided by the fact
if they are vertical or horizontal. If a vowel includes ㅣ(1) , this is a
vertical vowel. And if it includes ㅡ(3) this is a horizontal vowel. There
are vowels that have both (e.g. ㅢ), and these just go in both locations
(e.g. 의).
Notice how the syllable 'com' has a starting consonant (c) and an ending
consonant(m). Syllable 'pu' only has a starting consonant and a vowel.
Don't worry about 'ter' because 'er' doesn't really have an equivalent in
Korean.
Now these ending consonants go at the bottom of each syllable as you can
see in com(컴).
컴 =  44 2 1 00
The tricky part is deciding whether the ending consonant is the starting
consonant for the next syllable. I'm a mechanical engineer with little
coding skills but I think this is a spot for an if statement that goes
something like:
if (the next typed letter is a vowel (keys 123)):
Make that ending consonant the starting consonant of the next syllable.
This would mean that words like 애플 would type properly. Not 앺ㅡㄹ. (012177355)
There are 28 ending consonants (some of them are double):
ㄱ, ㅋ, ㄲ, ㄳ, ㄺ, ㄴ, ㄵ, ㄶ, ㄷ,ㅌ,ㅅ,ㅆ,ㅈ,ㅊ,ㅎ,ㄹ,ㄽ,ㄾ,ㅀ,ㅁ,ㄻ,ㅂ,ㅍ,ㄼ,ㄿ, ㅄ, ㅇ.
A syllable would a double ending consonants would look like: 앎 (0125500).
The right arrow (->) key (#)  has an important role in the Chunjiin method.
This is actually the reason this method isn't the best designed, but it is
the most popular T9 method thanks to Samsung distributing it on their
phones.
Example: Typing 안녕.
This would be 012552210. The problem is that you can easily type 아령 due to
55 in the middle. This is when you would type it like 0125#52210 in order
to prevent two ㄴ(5)s turning into ㄹ.
If there is a tip that I can think of while testing if this works, while it
is allowed to write standalone vowels (such as ㅏ on its own) in Korean
especially in texting. When writing proper words, if a vowel ends up being
standalone in the middle of a word, then it would indicate that you've
either typed it wrong, or there is a bug. I'd be happy to help with testing
since this is my request anyway.
Using previous examples: 안ㄴㅕㅇ      All of the syllables would build nicely
into chunks. This should type as 안녕
: 앺ㅡㄹ          This too would need
to build into chunks. This should type as 애플.
Wowzers this was actually challenging to explain. It'd be awesome if this
can happen!

I have nearly zero knowledge about the language. I only know you combine
dots and letters to form vowels and consonants, but how it all works is
beyond me. Could you please point me to an article, preferably something
wiki-like, where I can first educate myself? Or, if you can explain how
letters are built and what to put on each key, it would be even better.
Also, have in mind including Korean may not happen so soon. As you can
see, many other bugs and features are in the queue.
—
Reply to this email directly, view it on GitHub
https://github.com/sspanak/tt9/issues/454#issuecomment-1986185451, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/BGZKLFRKTVYBJUJSC7M6TVLYXH6KVAVCNFSM6AAAAABEMVVID6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSOBWGE4DKNBVGE
.
You are receiving this because you authored the thread.Message ID:
@.***>

Keys from 4 to 0 are all consonants, and typing them should be fairly
obvious:
ㄱ = 4
ㅋ = 44
ㄴ = 5
ㄹ = 55

"ㄹ = 55" isn't obvious. I would have thought this is 45, because it looks like a combination of "ㄱ = 4" and "ㄴ = 5". Anyway, I've tried out Korean with Gboard and it seems to work exactly according to your explanations. I should be able to use it for reference later on.
I have more questions though. Do we want to keep the current functionality of holding a number key to type a number? If so, how do you type punctuation and other special characters? The only way I see it is, typing numbers is only possible in 123 mode, and holding 0-key and 1-key will show the special character lists (as if 0 or 1 were single-pressed in English). Or is there another way?
As for typing letters, I have only one concern. Currently, the entire app is designed to handle only the numeric keys for typing. All others are considered functional keys and pressing them results in performing some predefined action. The actions are listed when you configure the hotkeys.
Typing Korean will definitely require a new input mode, as it doesn't fit the current Predictive or ABC which are designed for European languages. And rerouting one more key to serve as Korean space, instead of the current space on 0-key, is not a problem. The thing is, on a standard keypad, the only available extra keys are #, *, and they are already taken. By default, pressing * opens the Settings, holding it adds a word to the dictionary; pressing # changes the typing mode (this means either switch to ABC/123/Predictive, or change the text case) and holding it changes the language.
I believe the functions on # are a must-have.
A potential solution is dropping the Add Word functionality (well, just unassigning it from the Settings). It won't be necessary, because in Korean one always types letter-by-letter. Or it could be the "Show Settings" function, but I think it would be more useful. Then, I could add an extra "Korean Break Word" or "Korean Space" function, which could be assigned from the Hotkeys settings to whatever physical key you like. The thing is, I don't like the idea. It is a very special exception to general workflow.
Having said all he above, I'm open to other suggestions, how to fit the two extra letters and the Spacebar on the keypad.
And finally, the on-screen virtual keypad must also be redesigned, but it should be easier. I guess I'll replace the hardcoded "?" with space and "!" will be the special character key.

You are correct about not being able to type punctuation on Korean mode.
Chunjiin always comes with the ability to type English (alphabet). The
modes are changed by using * button.[image: 스크린샷 2024-03-09 081007.png]
See how they have two buttons (!#1, 한/영) where * on a physical T9 keypad
would be. On a physical keypad where they can't have two buttons split as
you can see in the picture, * is the change mode button which would change
the mode from Korean-Alphabet-123-Symbols(punctuations). Note that changing
from Korean to English is possible by just short pressing *.
I see that we have two actions we can do with #. Short pressing changes the
mode, and long press changes the language. Would it be possible to combine
that feature so you can change the mode and the language just by short
pressing it? Whether that is * or # does not matter as the hotkeys can be
customized.
For example: just by short pressing * (or #). This will go Language1-
Language 2- 123- Symbols. Monolinguals won't be affected, as if they only
have 1 language installed, this will skip over language 2. Bilinguals will
appreciate it more as this means that they can switch between languages
faster.
So in essence, what I'm suggesting is the ability to customize the sequence
of 'switch mode' buttons. This will free up * (or#) long press.
I am not sure about how the backend of the app works, but you could have
another version of hotkey assignment that will only become active when you
are in a particular language mode. So, basically an option to have more
than one preset hotkeys to go with different languages. This might open up
the ability to add more languages in the future (if that is what you want).
So this is what it would look like under settings:
Languages  > have a list of available languages > Language 1 > Hotkeys 1,
load dictionary, maybe a setting specific to language 1 etc...
Language 2 > Hotkeys 2, load dictionary, maybe a setting specific to

language 2 etc...
And under Hotkeys 2, maybe a function to match the Hotkeys 1 settings.
That's pretty much my suggestion 1.
As for another suggestion..
You're right about Korean not needing word predictions. This means that it
does not need <- and -> buttons. If we assign the -> button as "korean
space" then we can leave # as is. Potential problem could be not being able
to press the 'send' button in messengers. I see that we have a "press ok to
send in FB messenger" which can be expanded to other apps.
Which brings me to bugs. In facebook messenger, when I press ok it doesn't
send. The ok button acts like "enter" on a normal keyboard. Also, I think
it will be nice for the app to just start typing without me pressing on the
chat bubble. As of the moment, if I click on a chat:

Click on a chat (which is glitchy on its own, but I think that's FB
messenger issue not yours)
Click on the bottom of the screen to select the 'reply area'
Type
Press -> button to select send as "ok" button just acts like 'enter'
actually press send using the ok button.

Thank you for your effort. By the way, the English part of the app is
awesome.
On Sat, Mar 9, 2024 at 10:10 PM Dimo Karaivanov @.***>
wrote:

Keys from 4 to 0 are all consonants, and typing them should be fairly
obvious:
ㄱ = 4
ㅋ = 44
ㄴ = 5
ㄹ = 55
"ㄹ = 55" isn't obvious. I would have thought this is 45, because it looks
like a combination of "ㄱ = 4" and "ㄴ = 5". Anyway, I've tried out Korean
with Gboard and it seems to work exactly according to your explanations. I
should be able to use it for reference later on.
I have more questions though. Do we want to keep the current functionality
of holding a number key to type a number? If so, how do you type
punctuation and other special characters? The only way I see it is, typing
numbers is only possible in 123 mode, and holding 0-key and 1-key will show
the special character lists (as if 0 or 1 were single-pressed in English).
Or is there another way?
As for typing letters, I have only one concern. Currently, the entire app
is designed to handle only the numeric keys for typing. All others are
considered functional keys and pressing them results in performing some
predefined action. The actions are listed when you configure the hotkeys.
Typing Korean will definitely require a new input mode, as it doesn't fit
the current Predictive or ABC which are designed for European languages.
And rerouting one more key to serve as Korean space, instead of the current
space on 0-key, is not a problem. The thing is, on a standard keypad, the
only available extra keys are #, *, and they are already taken. By
default, pressing * opens the Settings, holding it adds a word to the
dictionary; pressing # changes the typing mode (this means either switch
to ABC/123/Predictive, or change the text case) and holding it changes the
language.
I believe the functions on # are a must-have.
A potential solution is dropping the Add Word functionality (well, just
unassigning it from the Settings). It won't be necessary, because in Korean
one always types letter-by-letter. Or it could be the "Show Settings"
function, but I think it would be more useful. Then, I could add an extra
"Korean Break Word" or "Korean Space" function, which could be assigned
from the Hotkeys settings to whatever physical key you like. The thing is,
I don't like the idea. It is a very special exception to general workflow.
Having said all he above, I'm open to other suggestions, how to fit the
two extra letters and the Spacebar on the keypad.
And finally, the on-screen virtual keypad must also be redesigned, but it
should be easier. I guess I'll replace the hardcoded "?" with space and "!"
will be the special character key.
—
Reply to this email directly, view it on GitHub
https://github.com/sspanak/tt9/issues/454#issuecomment-1986802202, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/BGZKLFR4W6Y3VJ7NNJBL7CDYXLGYBAVCNFSM6AAAAABEMVVID6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSOBWHAYDEMRQGI
.
You are receiving this because you authored the thread.Message ID:
@.***>

See how they have two buttons ([#1], 한/영) where * on a physical T9 keypad
would be

Attachments from emails appear corrupted here. I can not see the image.
Nevertheless, I think I got the idea. I'll consider all the ideas and information you have shared, but honestly, I don't want to do too many customizations, because no other language needs them, and because such code usually becomes hard to maintain as the everything around it evolves. I'll think about it and figure out the best course of action, when I get back to Korean.

This means that it does not need <- and -> buttons

The physical keys move the text cursor to the left and right. When the cursor is at the edge of a text field, they select the closest button or menu item. This is crucial for phones without touchscreen. And even on the rest of them, it is quite useful. I even intend to add the same functionality to the on-screen keyboard.

Which brings me to bugs. In facebook messenger, when I press ok it doesn't
send. The ok button acts like "enter" on a normal keyboard.

Perhaps, you misunderstood how the option works? See the manual for v29.0, in particular, the OK key section and the Compatibility section. If you still think something is not right, please create a new issue. I would like to keep the board tidy and have each problem in a separate issue.

Just wanted to bump this up. As an expat living in Korea with an Android flip phone, implementing this would be a dream. Maybe I can look into this myself when I have some free time!

In order to prevent massive changes, I want to propose reassigning the ㅣ, ㅇ, and ㅁ keys. This is the layout I'm fiddling with:
layout:
  - [SPECIAL] # 0
  - [PUNCTUATION] # 1
  - [.] # 2
  - [ㅣ, ㅡ] # 3
  - [ㅇ, ㄱ, ㅋ] # 4
  - [ㅁ, ㄴ, ㄹ] # 5
  - [ㄷ, ㅌ] # 6
  - [ㅂ, ㅍ] # 7
  - [ㅅ, ㅎ] # 8
  - [ㅈ, ㅊ] # 9

It's not ideal and natives that are used to the usual way will probably hate it. But for me, I just need some way to somewhat comfortably type Korean on my phone.
Challenges:

In order to type 여, I have to press 4 2 2 3 (ㅇ..ㅣ). In ABC mode (called 가나다 in Korean), typing 2 2 quickly will result in 2 rather than ...
There needs to be some post-processing to turn ㅇ..ㅣ into 여. Could you point me to the part of the code where this kind of thing is possible/would fit in well, and maybe give me your thoughts on why it may be difficult, what could go wrong, etc?

You might not like this approach, and that's fine. I'm okay with my changes not being merged. I'd still like to develop this for my own use.

First of, your post reminds me that I don't actually know the correct layout. I only got that:
1 = ㅣ, 2 = dot, 3 = ㅡ. But what goes on the keys 4-9, and 0?

Could you point me to the part of the code where this kind of thing is possible/would fit in well, and maybe give me your thoughts on why it may be difficult, what could go wrong, etc?

Well... no. It is not possible to do it in a few lines of code or explain it in a couple of sentences. The post-processing to combine the vowels and the consonants does require massive changes.
If you want to experiment, you could roughly do the following:

Disable the language validation in app/build.gradle, because it is not even possible to build the project with this .yml file.
Add the locale name and the dictionary file. Use a dictionary containing one word.
Optionally, fix the validation in DictionaryLoader. It will fail, because the word will not contain any of the "alphabet" characters.
Go to app/java/io.github.sspanak.tt9/ime/ and have fun... Basically, I can't give you hints, because I am not sure how to do it myself. I know there must be a new mode, for example ModeCheonjin in the modes directory. It is where most of the magic will happen. Probably, there will be small changes in the XXXHandler files to make them work with the new mode.
That's all I have in mind at the moment, nothing specific.

All in all, this is going to be a difficult feature to implement. Beware, you may waste a lot of time, if you start doing it.

I appreciate your answer and warning. It sounds like a bigger project than I have time for right now. But maybe I'll revisit this later. Thank you for your time.

I appreciate your answer and warning. It sounds like a bigger project than I have time for right now. But maybe I'll revisit this later. Thank you for your time.

No problem. I was also thinking that creating a keyboard is a much simpler task, when I started.

your post reminds me that I don't actually know the correct layout. I only got that:
1 = ㅣ, 2 = dot, 3 = ㅡ. But what goes on the keys 4-9, and 0?

Answering myself, Gboard has a 10-key layout that can be used as an example.

There seem to be many different layouts floating around. Attaching some here. Maybe some are more similar/easily adjustable to the current state of the software.

Samsung, LG, and some others all had their own variations on the keyboard layout back then, which is why you can find some variations. I'm not sure which one ended up being the one modern Android went with or if it's customizable in its settings, but I suspect that eventually most might have settled on using Samsung's as the default?
If it helps, a modern Android-powered flip phone I have from a local company has gone with the layout pretty much matching Samsung's layout (the third picture). The only addition to the layout shown in the picture is that the asterisk button also shows icons indicating it's the one you use to switch between Hangeul, roman, and numerical input.

Thanks for the sample photos!
They layouts all look pretty much the same. Only the special characters and the functions are distributed differently. And Gboard is also very similar to them, which is great. I can use it as an example.

I'm certain this is probably far off still, but I am also looking for an alternate T9 korean keyboard to use as the default one on mive style folder (also follows chujin/samsung layout) does not allow for predictive text in English or Korean either.
I'm not too experienced in working with Android from development perspective (only tried to modify a much smaller project), but if there's any way I can help test this when you do work on the feature, I am very willing to help :)

Sure, I will upload a testing APK when I have something working. I have no intention of releasing untested code anyway.
And, I am getting closer to this task. Please, have some more patience.

Hey, folks!
Could someone please provide examples of words and their respective digit combinations? I would appreciate examples of all possible cases, such as no ending consonants/with ending consonants, double ones, standalone vowels (if possible), any special cases, like the already mentioned 0-key alternatives, and whatnot. I would also be great if the digit combinations cover all keys from 0 to 9.

Yes that looks correct!
Few things that you might know, but may have missed out.

Space is assigned to different buttons depending on the phone. Note the first picture in the previous comments does not have a space, I think some phones used arrow key (->). I think this may require a special GUI, and make it inapplicable in a typical T9 Android phones on the market today. The second picture (white phone), space is assigned to a button above the "red phone" button. And the third picture (Samsung phone) has space assigned to #. It might be worth making space assignable to different buttons.

It is possible to type ㆍ and ：separately. Allowing this does not have any practical use, as this is grammatically incorrect, and I do not remember people using them separately intentionally (e.g. emojis). Only time you'd see ㆍ and ：are when people made a typo. As for the other vowels (such as ㅏ and ㅗ), they need to be typed separately as they are typically used for emojis.

 You put (ok or space) between each character, which should be unnecessary (most of the time). You "could" put space between them, but word such as 대한민국 can be typed without doing that. So this would be: 대한민국 =<PHONE_NUMBER>0154324.

This is because inputting a vowel after a final consonant changes that final consonant into the first consonant of the next character.
I think the code should have this logic. Sorry, I don't actually code. Thus, I'll describe it in words.
Press 6 and ㄷ (consonant) appears,
Press 1 and ㅣ(vowel) is added on to ㄷ, making 디
Press 2 and ㆍ is added on to 디, making 다
Press 1 and ㅣ(vowel) is added on to 다, making 대.
Now the tricky part
(without pressing ok or space!!)
Press 8 and ㅅ (final consonant) is added to 대, making 댓
Press 8 again, and ㅅ(final consonant) changes to ㅎ, making 댛
Now because the next letter that comes is a vowel (either ㅣ or ㅡ)
Press 1 and ㅣis added, taking away the ㅎ of 댛, and makes 대히
Press 2 and ㆍ is added on to 히, making 대하
Press 5 and ㄴ is added, making 대한
So basically, imagine you typed first consonant + vowel + final consonant.
Inputting a vowel (without pressing ok or space), would take the final consonant, and use it as the first consonant of the next character.
Inputting a consonant,  ㆍ, ： (without pressing ok or space) would start a new character.  e.g. 대ㆍ (61212). Of course, this would be a typo (user error).
Then you might be wondering why we need ok (or space) to start a new character! This is actually what makes Chunjiin method inferior compared to other methods, but like someone else mentioned in the comments , all T9 phones today tend to use it.
I'll give you a word. Hello =  안녕
Note how the final consonant (ㄴ) of the first character (안) and the first consonant(ㄴ) of the second character (녕) are the same!
Now typing 안 = 0125
And typing 녕 = 52210
This is where space is used in between characters. If you don't, the final consonant of 안 (ㄴ=5) turns into (ㄹ=55). This causes the word hello = 안녕, to turn into dumbbell =아령!
Speaking of dumbbell = 아령, the sequence would look like this on screen:
0125 = 안
press 5 again, and makes 알
press 2, (ㆍ), this makes 알ㆍ  (note how ㆍ appears as if this is a next character)
press 2, (ㆍ), this makes 알： (： still appears as a next character)
press 0 (ㅇ),  this makes 아령
I think I typed more than what you probably wanted to read, but I hope this helps.
Appreciate your amazing work!

OK, so not confirming each character makes things much more complicated. Currently, TT9 cannot go back and edit previous letters and words but I'll see what I can do. I guess, the correct logic for doing this would be:

Keep consuming digits as long as possible to form a single character.
If there is a vowel (the digit sequence already contains 1, 2 or 3), and the next digit is 1, 2 or 3 (one more vowel), terminate the previous character where the vowel ends (when the 1-2-3-s end) and use the consonant digits (4-9 and 0) + the incoming one to start a new character.
If the current digit sequence contains only one vowel, but it just became too long to match any character, keep the previous character and use the next digit to start a new character.

I also typed more than what you probably wanted to read, but I am trying to explain it to myself, to understand it better. :smile:
As for ㆍ and ：, I'll keep them for consistency, it isn't a problem. Someone may need to type them in a specific case, such as when explaining to someone else on GitHub what they are.

I assumed that it would be a lot harder to not confirm each character :(.
For 1 and 3, I assume that "as long as possible" means time?
In that case you are correct. I forgot to mention that ending a character with a vowel (e.g. ㄷ(consonant)+ㅐ(vowel)) for a long time (I think was about 1 second from distant memory, definitely no longer than 2 seconds), this automatically starts the next character. Even though this is not commonly used as most people type faster than that.
For method 2, you might have to be careful. We are defining keys 1,2 and 3 as "vowels", but technically, they are "components that make up the vowels". In practice, the expected behaviour is to:
Press 21, this makes ㅓ
Press 1 again, this should make ㅔ
If I understood method 2 correctly,  pressing 211 would cause it to output ㅓㅣ, or even ㆍ ㅣ ㅣ. Which is not ideal.
There are scenarios where method 2 would work - scenarios where it grammatically makes sense. As an example,
Pressing 22, makes ㅣㅣ.  This is correct, as there are no vowels in Korean that has ㅣㅣ together.
I hope this helps!
I now see that this is massively complicated...

We are on the same page, no worries. As a developer, I am probably explaining everything in a non-human-friendly manner. :laughing:
211 will produce ㅔ both when used alone, or in combination with a consonant, including the NULL consonant (not sure how it is called).
"As long as possible" means: as long as you keep typing digits that make up a character, be it "3", "211" or something longer like "52210". But if you type one more digit, like another "3" after each of these, the digit sequences would be too long to match any character, so that "3" at the end must be the start of a new character. In other words, keep the longest possible digit sequence and try to find a matching character. If there is no such character, then the last digit belongs to a new character.

I assumed that it would be a lot harder to not confirm each character :(.

Every automatic thing is more complicated, because the developer must describe the possible scenarios in the code and figure out which is the optimal one at the moment.

I now see that this is massively complicated...

Oh, there is more. I also have to change the dictionary file format, then I have to change the way the files are imported in the database, and only then I can get to the typing part. But this is the way to East Asian language support. If it wasn't for Korean, I would have had to do it to support Japanese, Chinese, Indic languages, and potentially, Amharic or North American languages, if ever.
In the end, I don't complain, it is sort of a programming challenge quite interesting to do. Not something I would ever do in a big corporate environment.

I would love to help but I neither have a Korean T9 phone to test it out nor have I ever used one, so I'm afraid I might provide you with incorrect digits.

I'll give you more words that requires to confirm each character. Before examples, let's make it a rule that I will put (space) between each character where it is compulsory. Otherwise I will just put space (like an empty space) between the numbers for ease of reading.
장마 = 9120(space)0012
런닝맨 = 55215(space)510(space)001215
곡괭이 = 4234(space)4231210(space)01
This is probably a good time to tell you about underlining.
The alternative is to wait for a second between characters. The current character that you are typing, and the one before gets underlined as you type. I think this means that the (two most recent) characters are subject to 'potential' modification (e.g. The final consonant may turn into the first consonant in the next character).
If the underline is removed after a second, indicating that you are typing a new character.
So,
장마 = 9120(wait 1 second)0012
런닝맨 = 55215(wait 1 second)510(wait 1 second)001215
곡괭이 = 4234(wait 1 second)4231210(wait 1 second)01
would work as well. Except that 1 second is a looong time when you are texting, and no one actually uses this.
All of the words above requires each character to be confirmed. If you don't, they would end up typing like this:
장마 -> 자아
런닝맨 -> 러리앤
곡괭이 -> 고쾌미
Also, a case where you would have to delete a character before, and delete a character afterwards:
않 = 012588
Say, typing 않 would look like:
안 = 0125
안ㅅ = 01258
않 = 012588
And an example sentence to put it all together:
도움이 되었으면 좋겠습니다 (which means: I hope this helps)
= 623 03200(space) 01(space)(space) 6231 021888 03 002215(space)(space) 92388 4211888(space) 837 51 612
Now you might be wondering why there is (space)(space).
Like I mentioned above, the last two characters that you are working on gets underlined. By pressing (space), you take the cursor after the last character (thus, removing the underline). And by pressing (space) once again, it creates an actual space between the words.
Regards,

Thanks! It looks like there is more work do.

Here's a teaser, folks!
https://github.com/user-attachments/assets/d26cb524-3c32-4fef-a3da-a83ea53ec8c9
Is anyone up for testing? I think I am done with coding. I'll give it a day or two on my phone, to ensure the app is (almost) stable, then I can upload an APK for you test, if there are any volunteers.

Alright, I've removed the unnecessary punctuation and tried to reduce the number of displayed characters on the screen. It looks a bit better, but at some point in the future I'll probably have to improve the layout much more.
I kind of like the quick access to punctuation by multi-pressing instead of by holding the key, but, As you said, it may cause confusion when trying to type "에" vs "어,". I can not make the best decision, so I've added an option to toggle between the two ways of typing. You'll be able to try both and let me know which one works better.
And speaking of the APK, I found and fixed several bugs today, so I'll put it on hold a bit more until I am sure there isn't anything critical. I'll keep you posted.

Oh wow it works well!
I think you haven't given the function to assign korean space to # though. (Not sure what F1234 are)
No glitches so far, just taking my time to get used to v40. I came from v20 or something :)
I'll let you know if I find any glitches.

Not sure what F1234 are

F1-F4 are the same as on a computer keyboard. However, on smartphones, these are usually labelled "email", "FM radio", "torchlight" etc. They are the extra function keys above the numpad. Probably, your phone has such special keys, that's why TT9 displays them. Unfortunately, on the application side, I can see them as F1 through F12, and these are the only names I can show.

I think you haven't given the function to assign korean space to # though

This may not be obvious, so I'll explain. By default, both "#" and "*" have some functions assigned. In order to use "#" as space, you must first unassign its current function. So, find "Next Input Mode" or whatever it is called in your language. It will say it is assigned to "#". Set it to "--" (nothing). Then go back to "Korean Space". When you click it you will see that "#" is now available as an option.
It may be a bit cumbersome in some cases and I was thinking of always displaying all possible keys and allowing automatic re-assignment and setting the other function to "--", like in old computer games. I'll probably do it in some future version.

just taking my time to get used to v40. I came from v20 or something :)

Please, do upgrade more often. There are many, many new improvements, including dictionary updates, speed optimizations and whatnot, that, I am sure, you will like.
There is one more thing I forgot to mention. As we agreed, the default way of typing special characters is by holding "1" or "0". If you want to try out typing with multi-press, go to Settings, scroll down to the version info and click it. A "secret" debug screen will open. On that screen find the "Hold to type special chars in Korean" option and toggle it.

Gotcha, this is so amazing!

Keeping this open in case there are some more bugs and until we decide whether to use holding or multi-pressing for typing punctuation.

Since there are no comments or complaints, I assume Korean works fine and I am closing this. I'll keep the "Hold to type special chars in Korean" option for one more version. I'll most likely keep the "hold" variant, unless I get enough requests to use multi-click.

Hey, just wanted to leave a comment to say thanks for this. As a TT9 user in Korea using the AT-M120, this is a super useful and valuable update for me. And no issues so far!
Besides the Latin, I have also added the Asian punctuation characters: "『", "』", "。", "、". Do you think you will ever need them? If not I will remove them.
I'm not sure if this is valuable input, but I don't think there's any need to support distinct CJK punctuation like 『, 』, 。, 、, etc. While you do see these in Korean text occasionally (really only 『 and 』), I don't think I've ever seen them outside of things like articles, newspapers, books etc (ie, professionally typeset material). Like hanja/chinese characters, they're only used in specific contexts, and mobile keyboards don't support their input.

Thanks for the feedback! So, let's keep Korean as it is.