Type inference not working with zod-openapi and path parameters

What version of Hono are you using?
4.2.5
What runtime/platform is your app running on?
Wrangler
What steps can reproduce the bug?
Using path parameters (e. g. GET /customers/:id) with @hono/zod-openapi breaks type inference for the complete route.
This renders the Hono Client unusable with zod-openapi.
The following is a simplified example with only one route. If this is combined with another route, e. g. GET /customers (without parameter), type inference will break for this endpoint as well.
import { customerSchema, customersTable } from "@api/db/schema/customers";
import type { Env } from "@api/index";
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
import { and, asc, eq } from "drizzle-orm";
import { Hono } from "hono";
import { hc, type InferResponseType } from "hono/client";

const customersRoutes = new Hono<Env>().route(
  "/customers",
  new OpenAPIHono<Env>().openapi(
    createRoute({
      path: "/{id}",
      method: "get",
      request: {
        params: z.object({
          id: z.number().int().positive(),
        }),
      },
      responses: {
        200: {
          content: {
            "application/json": {
              schema: z.object({
                data: customerSchema,
              }),
            },
          },
          description: "The customer",
        },
        404: {
          content: {
            "application/json": {
              schema: z.object({
                error: z.string(),
              }),
            },
          },
          description: "Customer not found",
        },
      },
    }),
    async (c) => {
      const db = c.get("db");
      const userId = c.get("userId");

      const { id } = c.req.valid("param");

      const [customer] = await db
        .select()
        .from(customersTable)
        .where(and(eq(customersTable.userId, +userId), eq(customersTable.id, id)))
        .orderBy(asc(customersTable.name));

      if (!customer) {
        return c.json({ error: "Customer not found" }, 404);
      }

      return c.json({ data: customer });
    },
  ),
);

export default customersRoutes;

What is the expected behavior?
Type inference should return the correct response type:
type ResponseType = {
    error: string;
} | {
    data: {
        id: number;
        name: string;
        email: string | null;
        createdAt: string;
        updatedAt: string;
        deletedAt: string | null;
        userId: number;
        address: string;
        tel: string | null;
    };
}

What do you see instead?
The response type is inferred as any:
type ResponseType = any

Additional information
Working equivalent example without @hono/zod-openapi:
import { customersTable } from "@api/db/schema/customers";
import type { Env } from "@api/index";
import { and, asc, eq } from "drizzle-orm";
import { Hono } from "hono";
import { hc, type InferResponseType } from "hono/client";

const customersRoutes = new Hono<Env>().route(
  "/customers",
  new Hono<Env>().get("/:id", async (c) => {
    const db = c.get("db");
    const userId = c.get("userId");

    const id = c.req.param("id");

    const [customer] = await db
      .select()
      .from(customersTable)
      .where(and(eq(customersTable.userId, +userId), eq(customersTable.id, +id)))
      .orderBy(asc(customersTable.name));

    if (!customer) {
      return c.json({ error: "Customer not found" }, 404);
    }

    return c.json({ data: customer });
  }),
);

export default customersRoutes;

const client = hc<typeof customersRoutes>("localhost");
const get = client.customers[":id"].$get;
const response = await get({ param: { id: "1" } });
type ResponseType = InferResponseType<typeof get>;

Result:
type ResponseType = {
    error: string;
} | {
    data: {
        id: number;
        name: string;
        email: string | null;
        createdAt: string;
        updatedAt: string;
        deletedAt: string | null;
        userId: number;
        address: string;
        tel: string | null;
    };
}

The pattern works for routes without path parameters.

The iss was here:
createRoute({
      path: "/{id}",
      method: "get",
      request: {
        params: z.object({
          id: z.number().int().positive(), // <--
        }),
      },

Apparently params must be of type string. Maybe this could create type error somewhere?

You could use coerce:
export const PetIdRequestParamSchema = z.object({
  petId: z.coerce
    .number()
    .int()
    .openapi({
      param: {
        name: 'petId',
        in: 'path',
      },
      description: 'The pet identifier.',
      example: 123,
    }),
});

app.openapi(
  createRoute({
    method: 'get',
    path: '/{petId}',
    summary: 'Get a pet',
    description: 'Returns a pet.',
    tags: ['pet'],
    operationId: 'pets/get',
    request: {
      params: PetIdRequestParamSchema,
    },
    ..

Even coerce breaks type inference:

What seems to be working as a workaround is this:
params: z.object({
  id: z
    .string()
    .transform((v) => Number.parseInt(v))
    .refine((v) => !Number.isNaN(v) && v > 0, { message: "Invalid ID" })
    .openapi({ type: "integer" }),
}),

However, the whole type inference is extremely slow. I have to wait 15-30 seconds every time for any kind of IntelliSense so I am basically writing the code blind, hoping it won't error later. Any ideas how to solve this?
I am using

Drizzle with Zod Adapter
Hono with Zod Hono OpenAPI

hi @stabildev I must admit I found some issue with my suggested approach as well yesterday evening.
The earlier mentioned code:
export const PetIdRequestParamSchema = z.object({
  petId: z.coerce
    .number()
    .int()
    .openapi({
      param: {
        name: 'petId',
        in: 'path',
      },
      description: 'The pet identifier.',
      example: 123,
    }),
});

app.openapi(
  createRoute({
    method: 'get',
    path: '/{petId}',
    summary: 'Get a pet',
    description: 'Returns a pet.',
    tags: ['pet'],
    operationId: 'pets/get',
    request: {
      params: PetIdRequestParamSchema,
    },
    ..

seems correct:

however the generated OpenAPI spec looked like:
"/api/pets/{petId}": {
    "get": {
        "summary": "Get a pet",
        "description": "Returns a pet.",
        "tags": [
            "pet"
        ],
        "operationId": "pets/get",
        "parameters": [
            {
                "schema": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "description": "The pet identifier.",
                    "example": 123
                },
                "required": true,
                "in": "path",
                "name": "petId"
            }
        ],

note the the type being ["integer", "null"] which is incorrect as it is required and should not be null.
I solved it with:
export const PetIdRequestParamSchema = z
  .object({
    petId: z
      .preprocess((val) => {
        if (typeof val === 'string') {
          const num = Number(val);
          if (Number.isInteger(num)) {
            return num;
          } else {
            return NaN;
          }
        }
        return val;
      }, z.number().int())
      .openapi({
        param: {
          in: 'path',
          name: 'petId',
          required: true,
        },
        description: 'The pet identifier.',
        example: 123,
      }),
  })
  .strict();

so first I preprocess the received value, I manually convert it to number, and if that's not possible I return a NaN causing a validation error. It's a bit more code unfortunately but it works and the generated OpenAPI spec is correct as well:
"/api/pets/{petId}": {
    "get": {
        "summary": "Get a pet",
        "description": "Returns a pet.",
        "tags": [
            "pet"
        ],
        "operationId": "pets/get",
        "parameters": [
            {
                "schema": {
                    "type": "integer",
                    "description": "The pet identifier.",
                    "example": 123
                },
                "required": true,
                "in": "path",
                "name": "petId"
            }
        ],

PS: I'm not experiencing any slow type interference.. which IDE are you using?

hi @marceloverdijk
I'm using VS Code. Are you using the Hono client?
My inference chain looks like this (in this example for the Customer type):

Define Drizzle schema
createSelectSchema from drizzle-zod
Augment the schema using .pick and .extend in createRoute
Group related routes using e. g. app.route("/customers", new OpenAPIHono<Env>().openapi(getCustomersRoute, getCustomersHandler)
export type App = typeof app which is chained and includes all routers and middlewares
Fetch data using HonoClient client = hc<App>("...");
type CustomerResponse = Awaited<ReturnType<typeof client["customers"]["$get"]>
type RawCustomer = ExtractData<CustomerResponse> (utility type to narrow the response to the one containing non-null data field
type Customer = ReturnType<typeof transformCustomer> where transformCustomer: (in: RawCustomer) => Customer

I'm also using VC Code, but my chain is different. I'm using Prisma.

@stabildev cool we are using almost the same setup! I also have a bit slow type interference - but still usable - and I think its on the radar of the main developer. We split our api in sections, I might help?
export type Workspace = Extract<InferResponseType<(typeof workspaceClient.workspaces)[':idOrSlug']['$get']>, { data: unknown }>['data'];

you can see how we split our api here: https://github.com/cellajs/cella/blob/development/backend/src/server.ts
that said, the type performance I think is an issue. I think we need an typescript performance expert to somehow look into it. Would be interested in sponsoring that partially.

I was struggling with this as well, however I found a different workaround using with pipe operator form zod that may help you out:
z.string()
 .optional()
 .pipe(z.coerce.number().min(0).default(0))
 .openapi({ type: "integer" }),

This way you can still basically use your current schemas and zod goodies inside pipe, just make sure the initial check is z.string().
The caveat is that the RPC client typing is still string, but on your route it is parsed to number accordingly.
I'm not sure if this helps with type inference times, but it's worth a try.


Benchmark request

This issue is (only) meant for gathering some preliminary benchmark results for Transcrypt against CPython
Doing this test requires installation of Python 3.6 and Transcrypt as follows:

Download Python 3.6 from www.python.org.
Install Transcrypt: python -m pip install transcrypt.
Create a folder for the tests with the html and python code below in files pystone.html and pystone.py respectively
In this folder from the command prompt type transcrypt -b -n pystone.py
Open pystone.html in your browser to see the result
Also run pystone.py from the command prompt
Let us know your results for both Transcrypt (browser) and CPython (command prompt) in a comment to this issue. Results will be made public both in this issue and in the Transcrypt docs. This issue will remain open for 1 week.

[EDIT]
Summarized results:

Thanks for your cooperation!
[END EDIT]
The results on an Intel i7, 2.4 GHz, Windows 10, Transcrypt running in Chrome, are:

CPython:
Pystone(1.1) time for 50000 passes = 0.550
This machine benchmarks at 90909.0909090909 pystones/second

Transcrypt:
Pystone(1.1) time for 50000 passes = 0.196
This machine benchmarks at<PHONE_NUMBER>1632654 pystones/second

We'd like to have some information on how it runs on different machines, OS'es, browsers etc.
Please include some data on your hardware and OS.
The code is:
(HTML)

(Transcrypt / CPython)

#! /usr/bin/env python

"""
"PYSTONE" Benchmark Program

Version:        Python/1.1 (corresponds to C/1.1 plus 2 Pystone fixes)

Author:         Reinhold P. Weicker,  CACM Vol 27, No 10, 10/84 pg. 1013.

                Translated from ADA to C by Rick Richardson.
                Every method to preserve ADA-likeness has been used,
                at the expense of C-ness.

                Translated from C to Python by Guido van Rossum.

                Adapted to run both on Transcrypt and Python by Jacques de Hooge.

Version History:

                Version 1.1 corrects two bugs in version 1.0:

                First, it leaked memory: in Proc1(), NextRecord ends
                up having a pointer to itself.  I have corrected this
                by zapping NextRecord.PtrComp at the end of Proc1().

                Second, Proc3() used the operator != to compare a
                record to None.  This is rather inefficient and not
                true to the intention of the original benchmark (where
                a pointer comparison to None is intended; the !=
                operator attempts to find a method __cmp__ to do value
                comparison of the record).  Version 1.1 runs 5-10
                percent faster than version 1.0, so benchmark figures
                of different versions can't be compared directly.

                For Transcrypt, some not yet supported contructs were avoided
"""

LOOPS = 50000

import time

def clock ():
    return time.time ()

__version__ = "1.1"

[Ident1, Ident2, Ident3, Ident4, Ident5] = range(1, 6)

class Record:

    def __init__(self, PtrComp = None, Discr = 0, EnumComp = 0,
                       IntComp = 0, StringComp = 0):
        self.PtrComp = PtrComp
        self.Discr = Discr
        self.EnumComp = EnumComp
        self.IntComp = IntComp
        self.StringComp = StringComp

    def copy(self):
        return Record(self.PtrComp, self.Discr, self.EnumComp,
                      self.IntComp, self.StringComp)

TRUE = 1
FALSE = 0

def main(loops=LOOPS):
    benchtime, stones = pystones(loops)
    print (f"Pystone({__version__}) time for {loops} passes = {benchtime}")
    print (f"This machine benchmarks at {stones} pystones/second")

def pystones(loops=LOOPS):
    return Proc0(loops)

IntGlob = 0
BoolGlob = FALSE
Char1Glob = '\0'
Char2Glob = '\0'

Array1Glob = [0 for i in range (51)]
Array2Glob = [[0 for i in range (51)] for j in range (51)]

'''
Original code:
Array1Glob = [0]*51
Array2Glob = map(lambda x: x[:], [Array1Glob]*51)
'''

PtrGlb = None
PtrGlbNext = None

def Proc0(loops=LOOPS):
    global IntGlob
    global BoolGlob
    global Char1Glob
    global Char2Glob
    global Array1Glob
    global Array2Glob
    global PtrGlb
    global PtrGlbNext

    starttime = clock ()
    for i in range(loops):
        pass
    nulltime = clock () - starttime

    PtrGlbNext = Record()
    PtrGlb = Record()
    PtrGlb.PtrComp = PtrGlbNext
    PtrGlb.Discr = Ident1
    PtrGlb.EnumComp = Ident3
    PtrGlb.IntComp = 40
    PtrGlb.StringComp = "DHRYSTONE PROGRAM, SOME STRING"
    String1Loc = "DHRYSTONE PROGRAM, 1'ST STRING"
    Array2Glob[8][7] = 10

    starttime = clock ()

    for i in range(loops):
        Proc5()
        Proc4()
        IntLoc1 = 2
        IntLoc2 = 3
        String2Loc = "DHRYSTONE PROGRAM, 2'ND STRING"
        EnumLoc = Ident2
        BoolGlob = not Func2(String1Loc, String2Loc)
        while IntLoc1 < IntLoc2:
            IntLoc3 = 5 * IntLoc1 - IntLoc2
            IntLoc3 = Proc7(IntLoc1, IntLoc2)
            IntLoc1 = IntLoc1 + 1
        Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3)
        PtrGlb = Proc1(PtrGlb)
        CharIndex = 'A'
        while CharIndex <= Char2Glob:
            if EnumLoc == Func1(CharIndex, 'C'):
                EnumLoc = Proc6(Ident1)
            CharIndex = chr(ord(CharIndex)+1)
        IntLoc3 = IntLoc2 * IntLoc1
        IntLoc2 = IntLoc3 / IntLoc1
        IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1
        IntLoc1 = Proc2(IntLoc1)

    benchtime = clock () - starttime - nulltime
    if benchtime == 0.0:
        loopsPerBenchtime = 0.0
    else:
        loopsPerBenchtime = (loops / benchtime)
    return benchtime, loopsPerBenchtime

def Proc1(PtrParIn):
    PtrParIn.PtrComp = NextRecord = PtrGlb.copy()
    PtrParIn.IntComp = 5
    NextRecord.IntComp = PtrParIn.IntComp
    NextRecord.PtrComp = PtrParIn.PtrComp
    NextRecord.PtrComp = Proc3(NextRecord.PtrComp)
    if NextRecord.Discr == Ident1:
        NextRecord.IntComp = 6
        NextRecord.EnumComp = Proc6(PtrParIn.EnumComp)
        NextRecord.PtrComp = PtrGlb.PtrComp
        NextRecord.IntComp = Proc7(NextRecord.IntComp, 10)
    else:
        PtrParIn = NextRecord.copy()
    NextRecord.PtrComp = None
    return PtrParIn

def Proc2(IntParIO):
    IntLoc = IntParIO + 10
    while 1:
        if Char1Glob == 'A':
            IntLoc = IntLoc - 1
            IntParIO = IntLoc - IntGlob
            EnumLoc = Ident1
        if EnumLoc == Ident1:
            break
    return IntParIO

def Proc3(PtrParOut):
    global IntGlob

    if PtrGlb is not None:
        PtrParOut = PtrGlb.PtrComp
    else:
        IntGlob = 100
    PtrGlb.IntComp = Proc7(10, IntGlob)
    return PtrParOut

def Proc4():
    global Char2Glob

    BoolLoc = Char1Glob == 'A'
    BoolLoc = BoolLoc or BoolGlob
    Char2Glob = 'B'

def Proc5():
    global Char1Glob
    global BoolGlob

    Char1Glob = 'A'
    BoolGlob = FALSE

def Proc6(EnumParIn):
    EnumParOut = EnumParIn
    if not Func3(EnumParIn):
        EnumParOut = Ident4
    if EnumParIn == Ident1:
        EnumParOut = Ident1
    elif EnumParIn == Ident2:
        if IntGlob > 100:
            EnumParOut = Ident1
        else:
            EnumParOut = Ident4
    elif EnumParIn == Ident3:
        EnumParOut = Ident2
    elif EnumParIn == Ident4:
        pass
    elif EnumParIn == Ident5:
        EnumParOut = Ident3
    return EnumParOut

def Proc7(IntParI1, IntParI2):
    IntLoc = IntParI1 + 2
    IntParOut = IntParI2 + IntLoc
    return IntParOut

def Proc8(Array1Par, Array2Par, IntParI1, IntParI2):
    global IntGlob

    IntLoc = IntParI1 + 5
    Array1Par[IntLoc] = IntParI2
    Array1Par[IntLoc+1] = Array1Par[IntLoc]
    Array1Par[IntLoc+30] = IntLoc
    for IntIndex in range(IntLoc, IntLoc+2):
        Array2Par[IntLoc][IntIndex] = IntLoc
    Array2Par[IntLoc][IntLoc-1] = Array2Par[IntLoc][IntLoc-1] + 1
    Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc]
    IntGlob = 5

def Func1(CharPar1, CharPar2):
    CharLoc1 = CharPar1
    CharLoc2 = CharLoc1
    if CharLoc2 != CharPar2:
        return Ident1
    else:
        return Ident2

def Func2(StrParI1, StrParI2):
    IntLoc = 1
    while IntLoc <= 1:
        if Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1:
            CharLoc = 'A'
            IntLoc = IntLoc + 1
    if CharLoc >= 'W' and CharLoc <= 'Z':
        IntLoc = 7
    if CharLoc == 'X':
        return TRUE
    else:
        if StrParI1 > StrParI2:
            IntLoc = IntLoc + 7
            return TRUE
        else:
            return FALSE

def Func3(EnumParIn):
    EnumLoc = EnumParIn
    if EnumLoc == Ident3: return TRUE
    return FALSE

if __name__ == '__main__':
    main(LOOPS)

Thanks to all!


Feature/i18n

I added simple i18n feature to current project
I will update the backend later

Thanks!


Partially revert with plugin changes

Partially revert changes related to removing dependent plugins
Even though Java is required for normal plugin functioning for some cases it's okay without Java to make it work with other IDEs that don't have Java by default, for example GoLang. In that case only syntax highlight will work

In fact this plugin seems required only for the JPS plugin :thinking:


/password > / (not working)

I've password-protected the default Shopify store.
Custom front end lives on: godsent.gg
The checkout lives on a custom subdomain: checkout.godsent.gg
When I try to set up a custom redirect to link to the index page of godsent.gg:
/password > /
I'm greeted by the Redirecting template after clicking on the logotype on the checkout page, the "Click here" link wants to ref to:
checkout.godsent.gg/undefined but it should go to godsent.gg/
How do I solve this?

Solved it by modifying the source code in theme.liquid

@leeuwis Of course!
For this specific project, the user dashboard is not implemented.
So all that was needed is to redirect the customer to the index route of the custom storefront, in case the customer clicks the logo on the order confirmation page.
This means I could hardcode the desired URL on line 174 and 175 in theme.liquid.

Can you share the snippet please, if you dont mind.


Homework Submission for Units 3.17-3.18

Please submit your homework here.
Due at: Thursday at 9:00pm
Please turn in all of your homework, hacks, and classwork(filled in blanks) here.
(If you are having trouble with the binary search graph, maybe increase the range of the list by adding couple more 0's to 10001)
Feel free to message us if your having trouble with anything
Grades

Vivian Ni
Hw and notes

Azeem Khan
Notes and homework
Filled-in blanks are underlined and scattered throughout the post. All homework is at the bottom.

Hw and Notes Devon Shepherd

Mani Taleban
HW

Dash Penning
image:
https://github.com/dashpen/blog/issues/15
notebook:
https://dashpen.github.io/blog/lesson

Kalani Cabral-Omana
HW

Ethan Truong
HW

Derek Sol
HW

Tirth Thakkar Homework

Yuri Subramaniam

Aniket Chakradeo Hacks

Soham Kamat

Ekamjot Kaire
[notes/hw]
graphs and explanation

Samit Poojary
Homework

James Armstrong
12/15/22
period 3
Mort
hw and cw below

Sreeja Gangapuram
Graphs and My Explanation
Hacks and Other HW

Hacks 3.17-18

Shreya Sapkal
Notes
Hacks

https://genechang1.github.io/fastPage1/lesson/:NewCategory/

https://genechang1.github.io/fastPage1/lesson

Sarah Liu

Luke Angelini

aiden huynh

Homework
Graphs


Incompatible with Python 3.4

Current working version does not run under Python 3.4. Main issue is that the print statements are in the Python 2 syntax (print "hello") which results in errors when porting the code to Python3.X versions.

I'm actually rearranging this code to be a module that could be built and installed using pip. Not there yet, but I'm making it py3 compatible.

I had forgotten all about this. Glad the project isn't totally dead.

https://github.com/droogmic/Py3Row may be related and/or useful to upstream


Dialog focus and dropdown scrolls on web

On Flutter web I cannot use any of the dialogs. When they open, I can see the focus is still on the email body text. The only way to interact with dialogs is using the tab button until the dialog is selected. And to close, I have to use the address bar's back button.
Issues are on all dialogs (change font color, background color, insert link, insert image, etc.).
The scrolling on the font selection has a strange behaver. I can only select the first font option "Courier New". To select the other options I need to use the tab and enter on the keyboard. Once The last font is selected, I can actually use the mouse and select a previous ones.
Flutter version: 3.0.0.
tested the package on my current project and downloaded the example project, issue is the same.

I have this problem too. Any solution?

I am having the same issue....

I am also having the same problem.

This is an issue in Flutter as well as the pointer_interceptor package. Prior to v2.10, everything was working as expected and suddenly things changed. Haven't been able to find a concrete solution, for some people using html renderer has worked.

I'm facing the same issue. Any update?

You can add new SingleChilldScrollView on top of HtmlEditor Widget. This fixed my problem.


[Suggestion]: Spawner Tweaks

General Info

[ ] I would like to propose new content
[X] I would like to propose changes
[ ] I would like to propose another thing

Suggestion Description
Suggestion:
An option to allow/disallow certain Spawner Types from being affected by "Ageing Spawners"
There are quite a few mods which add their own Spawner types, most commonly known one is Apotheosis.
It would be fantastic to, as an example:
Be able to use Apotheosis Spawner's and their custom Spawner Modules for Mobfarms without "Ageing Spawners" breaking them.

Alternatively, an option to only have naturally spawned spawners break, and player places spawners stay.

Is the apotheosis spawner a separate spawner? Or does it overwrite vanilla spawners because if it does overwrite them there's no way to differentiate them from generated spawners and adjusted spawners

they overwrite vanilla i believe i had set player placed spawners to not break and every spawner ive placed has despawned thinking its a dungeon spawner the only spawners that stay are battle tower spawners and those spawners people cant silk touch because apotheosis rewrites vanilla spawners i believe in order to enable spawner movement and modification could you add like an addition to aptheosis to add the aging of spawners to be turned of by a item or something like that?


reinstate constructors

Such that ...
Array[Int64]::new(2, 4, 8)

... can be replaced with ...
Array[Int64](2, 4, 8)

Two options:

Retain the @static method, keep generic constraints there (little more flexible, similar to Java's class-level generics vs. constructor-level generics).
Make the constructor be "the real" thing, means generic constraints there == generic constraints for the whole class (considering how little use constructor-level generics actually got, probably a good idea).

Overriding and/or @private constructor can be done this way:
value X @private(val1: Y, val2: Z) {}
impl X {
  fun get(val: Y) = self(val, ...) // note the `self`
}


Add script to check for websites validity

This is a first attempt to ensure that we always have valid links on our JSON. I have divided it into several commits as I was cleaning up the JSON.

Most of them are related to websites that really ceased to exist
Some are fixing broken links on existing websites
Some are fixes to the URL format in JSON or adding URLS to entries without ones
Then there is the commit itself.

I didn't make it error out just like the other, because I still have to figure out two things:

Links to restricted sections of a website that is still valid, which require login and thus returns 404
Some websites (actually just premera.com) spuriously timing out.

Looks like a good start. I agree with your assessments of the issues to solve with it. That's the same reason that we run htmlproofer in cibuild without the LinkCheck routine--it ran into the same problems.
bundle exec htmlproofer ./_site --checks-to-ignore 'LinkCheck'

I changed the script a bit. Seems like using get_response instead of request_head made half of the 404 errors go away.
The other half I squashed when I stopped using URI.parse as I found out it was actually making valid links invalid.
Now we're just bound to the spuriousness of websites sometimes taking long to answer or becoming offline, but I think that's pretty ok. I wouldn't make it error out anyway, so that we don't blame PRs for things that are not their fault, as now we have a manageable list on the log to look into (currently 0 + any timeouts, which are 1-2)

I intend to merge this as is. Any other thoughts @Nightfirecat ?

I'll give this another look over tonight. As-is, this PR would not affect our CI at all. Is that intentional? I think even if we're using this script only to output info-level messages for unreachable sites (and not fail the build), we should be running it consistently rather than leaving it as a static asset which isn't run on a regular basis.

The commented out part is temporary, I intend to enable it for the CI as soon as we merge

I'm a little confused. In that case, why not uncomment it for this branch? Travis runs CI on PRs, so we would get the same result here as we would on master.

I got an error when uncommenting once, but it was an earlier version of the script. Didn't want to do many "fix ci" commits, as it would pollute the history and I also didn't want this PR to get squashed, because each commit is doing a unique thing on its own. Don't know if I was actually clearer now hahahaha

I'd like to rebase the history pretty significantly before we merge this anyway, since there's already a number of "Fix ci" or "Fix bug" type commits as-is

Ok, feel free to rebase then. I made it work, finally 🎉

@tupaschoal I did some quick-and-dirty changes. Mainly to keep responsibilities separate between the two scripts. validate_json.rb should be responsible for validating all aspects of JSON files, and ping_websites.rb should expect valid JSON in place before being run. lmk if this looks fine then I'll rebase and re-push for final review tomorrow

validate_json.rb should be responsible for validating all aspects of JSON files, and ping_websites.rb should expect valid JSON in place before being run

I laid on my bed thinking I needed to do this change hehe.
I agree with the changes, just a minor comment and I think we're ready to rebase and go

@Nightfirecat I rebased all the commits, squashing some, and it seems mostly fine for me now, can you please take a look so we can merge?
Thanks!

I don't like the idea of merging all three as "Remove sites that cause script errors", they did indeed, but because the website was offline and now we deal with this properly. As for merging, I'm ok with joining 8189c86a3ad1870e999ebe84963c28c77d83c4dd and ac1b17aa9ea5d650257ed3a6684c85f7f1d46666, which are removals, and keeping e18dbc8e77456f438ec74ba367d63d67b8d87898 on its own, which is just altering an entry.
If you are able to deal with those changes, feel free to do so and push later.

I mostly meant that I don't know what "Remove entries yielding Open/ReadTimeout" means realistically since URLs like http://www.mylife.com/showDeleteAccount.do redirect to a valid login page, but are removed in the commit without further explanation.

I mostly meant that I don't know what "Remove entries yielding Open/ReadTimeout" means realistically since URLs like http://www.mylife.com/showDeleteAccount.do redirect to a valid login page, but are removed in the commit without further explanation.

It means that when trying to open the URL they timed-out without receiving an answer. I double checked all the removals on these commits. mylife.com opened (the only one), it might have been offline on the day so I reverted it back.
I also squashed the two commits about timeouts and removed the comment on the script that was outdated. It looks ready to go now.

Looks ready to go (again) @Nightfirecat !

Pocoyo club comes and goes since I started developing this, I'll give it some days  and remove if still applicable

Hm, ok then. 👍

See https://travis-ci.org/jdm-contrib/jdm/builds/590011232


gha: Use k8s 1.28 in AKS

Kubernetes 1.27 is no longer available in standard support, hence any new cluster creation will fail with below error. This commit is to use k8s 1.28 instead by default.
https://learn.microsoft.com/en-us/azure/aks/supported-kubernetes-versions?tabs=azure-cli
ERROR: (BadRequest) Managed cluster cilium-cilium-10606103899-2-2 is on version 1.27.16 which is not supported in this region. Please use [az aks get-versions] command to get the supported version list in this region. For more information, please check https://aka.ms/supported-version-list

/test

/test

/test-backport-1.14

/test-backport-1.14


don't re add contracts from erc20Interactions if they are not supposed to

Closes #1220

@hboon done. Overloaded the add function.


Completed release candidate testing build 3015

Run through all of the test scenarios to validate the security plugin functionality
Configuration files

Before starting the cluster, add a role to roles.yml and a tenant to tenants.yml.
Start the cluster.
Open Dashboards and log in.
Security / Roles / Verify that the role exists.
Tenants / Verify that the tenant exists.

Create users

Open Dashboards and log in as admin.
Security / Internal User Database / Add a new internal user.
Provide a username and password.
Provide a backend role and a user attribute. [No backend role]
Submit.
Verify that the user is created.

Create role

Open Dashboards and log in as admin.
If you haven’t added any data, add the sample flight data.
Security / Roles / Add a new role.
Cluster Permissions / Add Permissions: Action Groups / read., indices:data/read/search*
Index Permissions / Add index permission / opensearch_dashboards_sample_data_flights*
Add Add Permissions: Action Groups / read., indices:data/read/search*
For Document Level Security Query, enter: {"match": {"FlightDelay": true}}
For Anonymize fields, enter: FlightNum
Tenant Permissions / Add tenant permissions / Add tenant pattern / Specify the tenant that you created earlier
Permissions / Add Field / kibana_all_read
Save Role Definition.
Verify that the role is created.

Map Role

Open Dashboards and log in as admin.
Security / Role Mappings / kibana_user
Add User / Specify the user you created earlier / Submit
Add a new role mapping / Choose the role you created earlier
Add User / Specify the user you created earlier / Submit.

Create Index Pattern

Change the tenant of the admin to newly created tenant
Add the index pattern by clicking discover tab
Discover / Add an index pattern: opensearch_dashboards_sample_data_flights
Next step / timestamp / Create index pattern
Move to Dashboards Basics to verify that the mappings worked and the roles are working as expected.

Dashboards Basics

Open Dashboards in an Incognito window and log in as the user you created earlier.
Explore on my own
DevTools:

GET kibana_sample_data_flights/_search
    {
      "query": {
        "match_all": {}
      }
    }

Verify that you have fewer than 10,000 hits. When I wrote this, I had 3,280 hits, all of which had “FlightDelay”: true (expected).
Verify that FlightNum is anonymized.

Multi-tenancy

Create Dashboard with admin and new tenant.
Check if new Dashboard is visible to the new user

Running with dev-tool requests
For creating tenant, user, role and role mapping
PUT _plugins/_security/api/tenants/security-test-tenant
{
  "description": "A tenant for security testing."
}

PUT _plugins/_security/api/internalusers/test-01
{
  "password": "abcd1234"
}

PUT _plugins/_security/api/roles/security-test-role
{
  "cluster_permissions" : [
    "read"
  ],
  "index_permissions" : [
    {
      "index_patterns" : [
        "opensearch_dashboards_sample_data_flights*"
      ],
      "dls" : """ {"match": {"FlightDelay": true}}""",
      "fls" : [ ],
      "masked_fields" : [
        "FlightNum"
      ],
      "allowed_actions" : [
        "read"
      ]
    }
  ],
  "tenant_permissions" : [
    {
      "tenant_patterns" : [
        "security-test-tenant"
      ],
      "allowed_actions" : [
        "kibana_all_read"
      ]
    }
  ]
}

PUT _plugins/_security/api/rolesmapping/security-test-role
{
  "users" : [ "test-01" ]
}

Configuration files

Before starting the cluster, add a role to roles.yml and a tenant to tenants.yml.
Start the cluster.
Open Kibana and log in.
Security / Roles / Verify that the role exists.
Tenants / Verify that the tenant exists.

Added to roles.yml:
petern_role:
  reserved: true
  index_permissions:
    - index_patterns:
        - 'bob'

Added to tenants.yml:
petern_test_tenant:
  reserved: false
  description: "Test tenant for testing"

Used ./opensearch-tar-install.sh to start the cluster
OpenSearch Cluster is operational ✅
% curl -k "https://admin:admin@localhost:9200/_cat/health?v"
epoch      timestamp cluster    status node.total node.data discovered_cluster_manager shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1651083177 18:12:57  opensearch yellow          1         1                       true      3   3    0    0        1             0                  -                 75.0%

OpenSearch Dashboard is operational ✅
Navigated to `http://localhost:5601`, signed in with `admin` `admin` permissions, was navigated to http://localhost:5601/app/home#/

Look for the role that was created in the yml ✅
* Opened `Security` from the side menu navigated to http://localhost:5601/app/security-dashboards-plugin#/app/security-dashboards-plugin/getstarted
* Clicked `Role` on the side bar, navigated to http://localhost:5601/app/security-dashboards-plugin#/roles
* Role `petern_role` was present

Look for the tenat that was created in the yml ✅
* Clicked `Tenants` on the side bar, navigated to http://localhost:5601/app/security-dashboards-plugin#/tenants
* Role `petern_test_tenant` was present

✅ Configuration works as expected

Create users

Open Dashboards and log in as admin.
Security / Internal User Database / Add a new internal user.
Provide a username and password.
Provide a backend role and a user attribute. [No backend role]
Submit.
Verify that the user is created.

As an admin user, created the user on http://localhost:5601/app/security-dashboards-plugin#/users
Created an Incognito browser window and signed in as the newly created user, landed on the welcome permissions
✅ Create users works as expected

Create role

Open Dashboards and log in as admin.
If you haven’t added any data, add the sample flight data.
Security / Roles / Add a new role.
Cluster Permissions / Add Permissions: Action Groups / read., indices:data/read/search*
Index Permissions / Add index permission / opensearch_dashboards_sample_data_flights*
Add Add Permissions: Action Groups / read., indices:data/read/search*
For Document Level Security Query, enter: {"match": {"FlightDelay": true}}
For Anonymize fields, enter: FlightNum
Tenant Permissions / Add tenant permissions / Add tenant pattern / Specify the tenant that you created earlier
Permissions / Add Field / kibana_all_read
Save Role Definition.
Verify that the role is created.

Navigated to http://localhost:5601/app/opensearch_dashboards_overview#/
✅ Create role works as expected

Map Role

Open Dashboards and log in as admin.
Security / Role Mappings / kibana_user
Add User / Specify the user you created earlier / Submit
Add a new role mapping / Choose the role you created earlier
Add User / Specify the user you created earlier / Submit.

Go to http://localhost:5601/app/security-dashboards-plugin#/roles/view/New_role
Click mapped users
Click map user
Add a user petern
Click Map
✅ Map Role works as expected

Create Index Pattern

Change the tenant of the admin to newly created tenant
Add the index pattern by clicking discover tab
Discover / Add an index pattern: opensearch_dashboards_sample_data_flights
Next step / timestamp / Create index pattern
Move to Dashboards Basics to verify that the mappings worked and the roles are working as expected.

Switched to petern_test_tenant as the admin user
Needed to get sample data via http://localhost:5601/app/home#/tutorial_directory
✅ Create Index Pattern works as expected

Dashboards Basics

Open Dashboards in an Incognito window and log in as the user you created earlier.
Explore on my own
DevTools:

GET opensearch_dashboards_sample_data_flights/_search
    {
      "query": {
        "match_all": {}
      }
    }

Verify that you have fewer than 10,000 hits. When I wrote this, I had 3,280 hits, all of which had “FlightDelay”: true (expected).
Verify that FlightNum is anonymized.

Number of hits that match:
GET opensearch_dashboards_sample_data_flights/_search?filter_path=hits.total.value
{
  "query": {
    "match_all": {}
  }
}

Response ✅
{
  "hits" : {
    "total" : {
      "value" : 3280
    }
  }
}

Looking at the FlightNum field:
GET opensearch_dashboards_sample_data_flights/_search?filter_path=hits.hits._source.FlightNum
{
  "query": {
    "match_all": {}
  }
}

Response ✅
{
  "hits" : {
    "hits" : [
      {
        "_source" : {
          "FlightNum" : "cb9a6abeadc566b9114e35dcc7ed0bb4fff1c11d76c2ee87e63ecfc7cc1fd1cf"
        }
      },
      {
        "_source" : {
          "FlightNum" : "0852d2f9b310ae589cd9d13bf4c1ce69a2c74f3d0e111065851104c4073443bd"
        }
      },
      {
        "_source" : {
          "FlightNum" : "a90608f7ce7796041affed20144472e360c0124f322d55350de8ad8e9271ea89"
        }
      },
      {
        "_source" : {
          "FlightNum" : "fd96089bf3dda2afaec2924c18fb20f5165b55bf6e854aad9b1db830af546f6f"
        }
      },
      {
        "_source" : {
          "FlightNum" : "fd5a23f895b93476854afe46f531e27912e721c2fdbc0103f17d6b13592b4e9c"
        }
      },
      {
        "_source" : {
          "FlightNum" : "eadafce25028ad5abc215360b4c296e808d931d5c193e8820153b7798fbbb43d"
        }
      },
      {
        "_source" : {
          "FlightNum" : "c37377380e2bf54ee38b6fb835666c5cf490c2982757f7a7ae84a682716a7768"
        }
      },
      {
        "_source" : {
          "FlightNum" : "9dfe98c49654c5f98612c8791ee0b6789ed44f911f2c485e86ae13625b0d6d85"
        }
      },
      {
        "_source" : {
          "FlightNum" : "18f08d4175b9e26e1b1d972c17998635d4d2544f7f49604952e52c4be280c8e0"
        }
      },
      {
        "_source" : {
          "FlightNum" : "38f19a0b4d20e0620c133c1b479efae9cb4e46c228e49f443066799feb153906"
        }
      }
    ]
  }
}

✅ Dashboards Basics works as expected

Multi-tenancy

Create Dashboard with admin and new tenant.
Check if new Dashboard is visible to the new user

Created new tenant as an admin
User petern cannot see the tenant via the switch tenant UX

✅ Multi-tenancy works as expected

Running security api with dev-tool requests
For creating tenant, user, role and role mapping

As an admin user making the following calls:
Create tenant
Request
PUT _plugins/_security/api/tenants/security-test-tenant
{
  "description": "A tenant for security testing."
}

Response ✅
{
  "status" : "CREATED",
  "message" : "'security-test-tenant' created."
}

Create User
Request:
PUT _plugins/_security/api/internalusers/test-01
{
  "password": "abcd1234"
}

Response ✅
{
  "status" : "CREATED",
  "message" : "'test-01' created."
}

Create role
Request
PUT _plugins/_security/api/roles/security-test-role
{
  "cluster_permissions" : [
    "read"
  ],
  "index_permissions" : [
    {
      "index_patterns" : [
        "opensearch_dashboards_sample_data_flights*"
      ],
      "dls" : """ {"match": {"FlightDelay": true}}""",
      "fls" : [ ],
      "masked_fields" : [
        "FlightNum"
      ],
      "allowed_actions" : [
        "read"
      ]
    }
  ],
  "tenant_permissions" : [
    {
      "tenant_patterns" : [
        "security-test-tenant"
      ],
      "allowed_actions" : [
        "kibana_all_read"
      ]
    }
  ]
}

Response ✅
{
  "status" : "CREATED",
  "message" : "'security-test-role' created."
}

Create role mapping
Request
PUT _plugins/_security/api/rolesmapping/security-test-role
{
  "users" : [ "test-01" ]
}

Response ✅
{
  "status" : "CREATED",
  "message" : "'security-test-role' created."
}

✅ Running security api with dev-tool requests works as expected

All responses are working as expected.


s390x: set CC for fedora

Fixes: #217
Signed-off-by: Alice Frosi<EMAIL_ADDRESS>

lgtm

/test

respinning failed jobs...
/test-failed

Fedora CI machine is broken (unrelated to this PR):
/tmp/jenkins/workspace/kata-containers-osbuilder-fedora-PR/go/src/github.com/kata-containers/tests/.ci/static-checks.sh: line 157: make: command not found
Build step 'Execute shell' marked build as failure


Unexpected behavior of self.add_instance when arraying and with orientation not R0

What is the expected behavior of calling TemplateBase.add_instance on an array (ie, nx>1 or ny>1), when there is also a rotation?
Is each element rotated in place, or is the whole array treated as a mosaic, and rotated?
Either way, the behavior does not currently seem correct?
Below, I place an instance of a master, which I array in a row of 5 columns.  The only difference is that I orient the second case by R90 (and place at a different location).
        self.add_instance(
            master=master,
            loc=(0, 0),
            orient='R0',
            nx=5,
            spx=10,
            unit_mode=False
        )

        self.add_instance(
            master=master,
            loc=(0, 20),
            orient='R90',
            nx=5,
            spx=10,
            unit_mode=False
        )

As can be seen, it looks like not only do the sub-instances get rotated, but also translated?

I would expect either:
Treat array as mosaic and rotate:

or
Rotate each sub-instance in place:

The bag behavior is rotate first, then array.  However, since cadence does
it the other way, I need to hack the values when passing to cadence.  Seems
like my hack doesn't work for 90 rotations.
Thanks for catching this bug.
Eric
On Thu, Dec 20, 2018, 8:21 AM sbuchbinder<EMAIL_ADDRESS>wrote:

Assigned #33 https://github.com/ucb-art/BAG_framework/issues/33 to
@pkerichang https://github.com/pkerichang.
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
https://github.com/ucb-art/BAG_framework/issues/33#event-2037138335, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AHck1EkMymjj7Gbk38vm9YHkK4BCIrC7ks5u6tgNgaJpZM4ZbQ56
.

Yes, I believe so.  Have you fix this yet, or should I take a look?

I have not looked into it further.
On Sun, Feb 17, 2019 at 10:13 PM Eric Chang<EMAIL_ADDRESS>wrote:

Yes, I believe so. Have you fix this yet, or should I take a look?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ucb-art/BAG_framework/issues/33#issuecomment-464599361,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ARbOFXfMNoJrWFLU6P0yz-7aoJrDTHk9ks5vOkSIgaJpZM4ZbQ56
.

@pkerichang --
This coincidentally became relevant to BPG development this week, so I wanted to bring it up again.
In addition to behavior of rotating instances with arrays (which I think might be fixable in the InstanceInfo?), can we also discuss the behavior of transforming Arrayable objects?
I believe that 90 degree rotations are not currently supported, and that even mirroring / R180 transformations are not correct.
As an example:
The correct desired behavior (if I change the blocks to not use any arraying of rects):

The current behavior when using arraying:

The objects are getting placed by calling the transform method of the Rect class. But if the rect is arrayed, transform does not adjust the nx, ny, spx, spy.
I think that the problem can be fixed with code similar to below:
def transform_arrays(nx: int,
                     ny: int,
                     spx: float,
                     spy: float,
                     orient: str,
                     ) -> Tuple[int, int, float, float]:
    """
    Transforms the array parameters of an object based on the passed transformation rotation.

    Parameters
    ----------
    nx : int
        number of arrayed rectangles in the x-direction
    ny : int
        number of arrayed rectangles in the y-direction
    spx : float
        space between arrayed rectangles in the x-direction
    spy : float
        space between arrayed rectangles in the y-direction
    orient : str
        the transformation orientation string

    Returns
    -------
    (nx, ny, spx, spy) : Tuple[int, int, float, float]
        The transformed array parameters of the object
    """

    mat = transform_table[orient]
    sp_new = np.dot(mat, np.array([spx, spy])).astype(float)
    n_new = np.dot(mat, np.array([nx, ny])).astype(int)

    return abs(n_new.item(0)), abs(n_new.item(1)), sp_new.item(0), sp_new.item(1)

However, this has its own problems, because BBoxArray does not support negative spx, spy, and also does not support 90deg rotations.
Do you have any thoughts on how to support transformation of Arrayables?


Ant Design 5: Upgrade Empty component

Please refer to SIP-139 https://github.com/apache/superset/issues/29268.
The Empty component should be upgraded to Ant Design version 5.
Similar work has been completed here.
When upgrading the component to Ant Design 5, please ensure to include:

Proper RTL test coverage if not present yet.
A Storybook file (if not present) or all necessary changes.
Include all relevant component options in the Storybook.
Clean up unnecessary custom styles.

When opening a PR:

Name your PR refactor({Component}): Upgrade {component} to Ant Design 5
Add screenshots of BEFORE/AFTER in your PR.
Update the project tracker when your PR is merged.
Make sure you or a committer has labeled your PR with frontend:refactor:antd5.

🎉 Preset Bounty Available: $150 USD 🎉
To claim this bounty, please carefully follow the steps below.

📋 Steps to Participate

Review Guidelines:
Read through the Preset Bounty Program Contribution Guide for complete details on bounty requirements.

Show Your Interest:
Complete the Preset Bounty Program Survey and comment this issue to express your interest.

Join the Slack Channel:
After completing the survey, you’ll receive an invitation to the dedicated Apache Superset Slack channel.

Get Assigned:
To officially start, ensure a Bounty Program Manager has assigned you to this issue.

Submit Your Solution:
When ready, submit your solution with the Fixes #{issue_number} notation in your Pull Request description.

Claim Your Bounty:
Sign up at GitPay.me and submit your solution via: https://gitpay.me/#/task/1032

💡 Additional Notes

Only developers assigned by a Bounty Program Manager should start working on this issue to win the bounty.
Be sure to follow the guide closely to avoid any delays in payment. Please, allow a few days after your PR has been merged for the bounty to be released.

Good luck, and happy coding! 🎉

@geido I would love to work on this issue.

Hey @geido, i am interested in taking this one.

Hey @syedbarimanjan let's chat on Superset Slack

Hey @syedbarimanjan let's chat on Superset Slack

On which channel?

Hey @geido  can you pease assign this issue to me?

Hey @geido can you pease assign this issue to me?

It's already assigned.


Failed to query external title database?

Everything on my home menu disappeared after a crash on Twilight Menu++, am trying to use this to get all my titles to re-appear and I'm getting this error?

This likely means something happened to title.db and it needs to be rebuilt. There are currently no automated tools to do this, but you can use https://github.com/ihaveamac/rebuild-title-database for this:

Overwrite it with a clean title.db using fix-titledb.py
Run rebuild-title-database.py to generate all the title info entries
Use https://github.com/wwylele/save3ds to import all the files from above into the new title.db

If you don't know how to do this or aren't comfortable using the command line, you can ask here or on Discord: https://ihaveahax.net/view/Discord


Questions regarding getUniqueId()

This is not a bug report, I have some question regarding the method getUniqueId().
Based on the documentation
iOS: This is IDFV or a random string if IDFV is unavaliable. Once UID is generated it is stored in iOS Keychain and NSUserDefaults. So it would stay the same even if you delete the app or reset IDFV. You can carefully consider it a persistent, cross-install unique ID. It can be changed only in case someone manually override values in Keychain/NSUserDefaults or if Apple would change Keychain and NSUserDefaults implementations. Beware: The IDFV is calculated using your bundle identifier and thus will be different in app extensions. android: Prior to Oreo, this id (ANDROID_ID) will always be the same once you set up your phone.
that this id only change when the user reset the phone to factory setting, however based on these questions https://github.com/react-native-device-info/react-native-device-info/issues/1193#issuecomment-815083492 https://github.com/react-native-device-info/react-native-device-info/issues/1183#issue-837115985 is shows that is changed on reinstall and that is no other way to get permanent  id.
I have tried to reinstall the app both for IOS and Android but the id is remain the same, but based on the mentioned questions they got different ids when reinstall the app.
My question is in which case exactly it changed expect factory reset?
Also in my case I am doing rewarding for new users who install the app for the first time, so Is it safe to validate them using this id? or is there any better approach?

I have tried to reinstall the app both for IOS and Android but the id is remain the same

I suspect the uninstall is not complete somehow? You should specify the exact steps, as most people reproduce the behavior on iOS at minimum where IDFV is a new value after complete uninstall (app delete) / fresh install.
I don't think a strategy based on identifying hardware devices in the absence of some user account is very secure at all. For your use case I would consider it a classic security tradeoff: that is the cost of circumventing some protection needs to be higher than the reward, then the behavior you want to stop is self-limiting. Stated differently: If a new app install is smaller than what most users value their time at, you can still give a reward (which makes people feel nice) but you don't have to worry about reinstall abuse because it's not really worth it.
Pending exact steps including all versions of everything (software and hardware models tested) I'm going to close this as it is not the experience of any other reporters and I suspect will not be reproducible


Merge pull request #1 from remaxjs/master

Change or update remax

Change or update

Change or update

Change or update remax

PR 错地方了


Make pager trigger unicode compatible

Problem: Pager Trigger's regex isn't matching the quoted portion due to some modern OSes converting ASCII double quote and apostrophe to "left/right double quote" and "left/right single quote".  i.e. U+0022 gets converted to U+201C/U+201D and U+0027 gets converted to U+2018/U+2019.
Solution: Extend the regex to allow these unicode characters to delineate the PagerDuty schedule.

I'm don't usually develop for nodejs.  I'm not sure why tests are passing for Node 8 and Node 10, but not Node 6.

Note entirely sure either. The test suite for this package is rather lacking (simply looks to see if the package compiles and whether things are registered, which isn't exactly useful for regression testing). #49 is a task to fix that bit, which will probably render most of the current tests obsolete.
If you wanted to be on the safe side and get past it, you could update:
https://github.com/hubot-scripts/hubot-pager-me/blob/1b6891f354060c3863b3a4c3bb91f689ee0d8d90/test/pager-me-test.coffee#L9

Thanks for the tip @stephenyeargin. Tests are passing now.

Released with v3.1.0


Conflicts with KeeAnywhere

Hey there Mr. Schofield - just giving you a heads up that the HIBP plugin causes the KeeAnywere not to be able to sync with Google Drive. Not a huge issue at all, but something to be aware of. I can follow up with details if you ever wanna zap this bug.

I just tried using KeeAnywhere without HIBP installed and it doesn't work either.

I believe this was a bug in KeeAnywhere.
KeePass 2.36, KeeAnywhere 1.4.1 and HIBP 0.3.1 seem to place nicely together (tested saving to google drive).


zedcloud/deferred: don't take lock while processing the deferred queue

The ctx.lock protects the concurrent access to the ctx.deferredItems, so no need to keep the mutex locked while processing the queue.
Why? Queue processing can take up to several minutes (depends on the send timeout), so that all other goroutines which produce new requests (callers of the SetDeferred() or RemoveDeferred() calls) will stuck for as long as the queue is not completely processed. This mutex contention badly impacts overall system responsiveness.
CC: @milan-zededa

LGTM, but based on the issue you were debugging there is still an issue that the main event look in zedagent can get stuck inside HandleDeferred for 6 minutes during which time it does not process any other events such as subscriptions, hence e.g., AppInstanceStatus will not be reflected in what is sent to LPS during that time.
So in addition to this PR I think we need to remove the calls to HandleDeferred from the event loop and have a timer+trigger channel goroutine do all the work.

This already done by @milan-zededa commits, which we tested and backported to the 8.12, but not yet published. Not this part of this work.

This already done by @milan-zededa commits, which we tested and backported to the 8.12, but not yet published. Not
part of this work.

Ack.


NPE during showing pages

Fixed here: https://github.com/OrienteerBAP/Orienteer/commit/175f0e74146e088828649681476d5e87414e93d2


Issue with HIT path constructors.

This is probably roughly the same bug as #35, but as it does not involve recursive HITs, I am creating a separate issue.
It is possible to create a path p:Path T a b such that p@1 does not reduce to b:
module bug where
import prelude
A:U=undefined
B:U=undefined
f:A->B=undefined
opaque A -- to print #A instead of undefined
opaque B
opaque f

data HIT
  = iA (_:A)
  | iB (_:B)
  | gl (x:A) <i>
    [ (i=0) -> iA x
    , (i=1) -> iB (f x)
    ]

x : A = undefined
opaque x

p1 : HIT = transport (<_> HIT) (gl {HIT} x @ 1)
p : Path HIT
         (transport (<_> HIT) (gl {HIT} x @ 0))
         p1
  = <r> transport (<_> HIT) (gl {HIT} x @ r)

p1 reduces to hComp HIT (iB (comp (<_> B) (f x) [])) [], but p@1 reduces to hComp HIT (iB (f (comp (<_> A) x []))) [].
However, this works:
p : Path HIT
         (transport (<_> HIT) (gl {HIT} x @ 0))
         p1
  = <r> comp (<_> HIT) (gl {HIT} x @ r)
        [(r=0)-><i> fill (<_> HIT) (iA x) [] @ i
        ,(r=1)-><i> fill (<_> HIT) (iB (f x)) [] @ i
        ]

Maybe the definition of composition for a path constructor should depend on its system ?

Should p1 and p@1 both reduce to just hComp HIT (iB (f x)) []?
I think that for a HIT with no parameters, transps/squeezes should not be applied at all to constructor arguments in transpHIT/squeezeHIT. I have attempted to fix this special case with this hack, provided without warranty of any kind: https://gist.github.com/tomjack/da36301ceb1d97c73aa15731332d0636

@mortberg did you ever review this fix? It would be nice to have a correct implementation of truncation.

No, but we are currently working on it. It is quite subtle and we want to find a solution without hacks, hopefully we can figure it out soon.


Migrate from Linuxbrew/brew to Homebrew/brew

Linuxbrew/brew has been merged into Homebrew/brew!
Linuxbrew/brew will no longer be updated.
See the blog post at https://brew.sh/2019/02/02/homebrew-2.0.0/

Cool. I'll test that as soon as possible. We need to make sure it works properly, as this is a one-shot change. There is no going back after that :)

CI is failing at…
==> brew man --fail-if-changed
Writing markdown to /home/linuxbrew/.linuxbrew/docs/Manpage.md
Writing man page to /home/linuxbrew/.linuxbrew/manpages/brew.1
Writing man page to /home/linuxbrew/.linuxbrew/manpages/brew-cask.1
==> FAILED

I'm not sure why this I presume passed with the previous PR but is failing now.
Unless of course somewhere in the course of brew test-bot it's actually updating to Homebrew/brew. That may be a likely explanation.

@MikeMcQuaid Could you please review this PR to migrate Linuxbrew users from Linuxbrew/brew to Homebrew/brew when brew update is run?

@iMichka @maxim-belkin I'd appreciate your testing this PR on one of your own installations of Linuxbrew. Monday is a holiday in Canada. I'll merge this PR on Tuesday.

🎆 Merged!


Makes Texture and TextureUniform in visual shaders to use UV by default

I suppose this will make the texture usage less frustrating - if by default UV coordinates will be used instead 0,0

Makes sense I guess, but are there other nodes that have a default input like this if none is defined? This might be a bit confusing to users?

Well besides this TextureUniformTriplanar already using a unique value for default uv input. In UE4 its common practice - to silently give some default values for various node inputs. But later, we may add a label for indicating that the port using predefined value.

@akien-mga fine ?


Let user select default currency and format

@FelipePSoares Where would you store this within the data classes/database? In User.cs?

Yes, in User.cs would be a good place. If you want to do that I can write this issue properly.

I slipted this issue in more issues to solve the problem:
#240
#241
#242
#243
#244
#245


chore: ignore nlsp settings

Additional comments

Agreements

[X] I hereby declare this contribution to be licensed under the Apache License Version 2.0, January 2004.
[X] I hereby agree to grant TOSIT a copyright license to use my contributions.

Force push is rewording commit message


UI issues on Donation web view.

-Alignment is not proper for setting icon n save button on Android device.

-
-While entering the doantion details,the screen is going up in android device.

will retest it..


[Guider] GitHub Pages workflow is invalid

Describe the bug
The documentation on how to deploy to GitHub Pages (https://neatojs.com/docs/guider/guides/deploy/github-pages) uses an invalid workflow. The Upload step uses both working-directory and uses, which according to this comment on another issue is invalid. This causes the deployment to fail. Screenshot:

Which package/app is affected (leave empty if unsure)
Guider
Link to the code that reproduces this issue
No response
Steps to reproduce
Deploy using the current workflow
Expected Behavior
To not fail
Extra details
No response

I'll fix, in the meantime, you can remove the line that causing it to fail, with your configuration it shouldn't be needed. (the defaults will work)

Fixed in latest feature branch, will be published soon:tm:


Getting user data in the notFoundRedirect callback

I am trying to dynamically choose where to redirect a user based on their user/role. However I cannot use useUser inside of the callback as it has an inject (assuming the store) that has to be used inside the setup. But doing it inside of setup doesn't work since definePage runs before useUser is registered in the setup. Any suggestions? Is there a way that the user data could exist in the transition?
<script lang="ts" setup>
import { userUser } from 'vue-auth3'

definePage({
  meta: {
    auth: {
      roles: false,
      notFoundRedirect: (transition: any) => {
        const authUser = useUser().value
        console.log(authUser)
      }
    },
  },
})
</script>

Use auth.user()

Use auth.user()

Which "auth" should I be using that from? Because if I switch out useUser for useAuth I still get this error: [Vue warn]: inject() can only be used inside setup() or functional components.
<script lang="ts" setup>
import { userAuth } from 'vue-auth3'

definePage({
  meta: {
    auth: {
      roles: false,
      notFoundRedirect: (transition: any) => {
        const auth = userAuth()
        const authUser = auth.user()
        console.log(authUser)
      }
    },
  },
})
</script>

Is there another way to get auth from inside of the notFoundRedirect? I cannot declare it outside of the definePage because that gets called before any of the rest of setup is called.

Is there a chance that the user could be passed into the transition parameter?

Is there a chance that the user could be passed into the transition parameter?

Do you have createAuth? auth = createAuth({...})

Is there a chance that the user could be passed into the transition parameter?

Do you have createAuth? auth = createAuth({...})

Using the createAuth returned from the plugin worked. Thank you. I am not sure why I was not thinking to use it in this way.


Failed to resolve dependency

Unfortunately the Library cannot be found on mavenCentral().
Should we use some other repository?
Thanks

Never mind.
Solved by adding jcenter() to the used repositories.


power supply is 9V battery icon when it's actually 12 V

There is a generic voltage source screw terminal icon if you wan to use that.

Hey @eagletusk. Unfortunately I didn't found it when I made the schematic, as it was my second time using fritzing. I will have this in mind for the next update. Thanks!


[HUDI-5847] Add support for multiple metric reporters and metric labels

Change Logs
The PR aims to add support for multiple metric reporters within a Metric Registry. Further it also adds labels to metrics.
Impact
NA
Risk level (write none, low medium or high below)
low
Documentation Update
Describe any necessary documentation update if there is any new feature, config, or user-facing change

The config description must be updated if new configs are added or the default value of the configs are changed
Any new feature or user-facing change requires updating the Hudi website. Please create a Jira ticket, attach the
ticket number here and follow the instruction to make
changes to the website.

Contributor's checklist

[ ] Read through contributor's guide
[ ] Change Logs and Impact were stated clearly
[ ] Adequate tests were added if applicable
[ ] CI passed

can you take a look at https://github.com/apache/hudi/pull/7934 and ensure there are no overlaps or do you need any coordination.

PR 7934 adds changes for supporting metric instances for different tables. This PR adds support for multiple reporters within a metric instance.
There would definitely be conflicts between these two PRs but otherwise PRs are tackling different issues.


We miss dismissable collections

It is supposed that the new versions come with improvements, but the materialize v1 comes without the functionality for collections dismissable, which is a surprise since some people have been working around with them since previous versions of the framework.
Expected Behavior
In this video you can see the expected behavior
I just want the previous functionality back so we can keep designing great interfaces.
Or even if it's possible improve it like in [indicate gestures] (https://material.io/design/interaction/gestures.html#properties) from the material.io guidelines, in which something similar to a collection shows an icon for dismiss action
Current Behavior
Currently you have just decided to say "it was removed". I tought that it was because of the dependencies you use, but as toasts work really good, I just think it could get back with the technology you are currently using.
Possible Solution
Use the same libraries of toasts to get collection dismissable work again
Steps to Reproduce (for bugs)

Alvin

Alvin

Alvin

Alvin

Context
This affect to me because I used before, and when I moved to next version, I didn't know it won't work anymore, so now I'm in troubles.
By the way, You've made a really good job with this project, it's just that it's sad that some thing that worked before don't anymore because it's not an improvement.

I also believe that dismissable collections were great UX.
Any reason they go removed?


Missing Loot Tables / Recipes

Minecraft v1.16.4
Forge v35.1.13
Noel v1.5.0
The Poinsettia isn't dropping when it is broken, and the mistletoe's recipe isn't working. There are also recipes that are no longer working, such as the stocking and is causing errors in the log. There may be other recipes or loot tables that are not working, according to the logs.
Error Log

peppermint double slabs also only drop a single slab, which is a big issue


PGcat raises confusing error when client attempts to connect with GSSAPI encoding request

LDescribe the bug
PGcat does not support GSSAPI encoding (which is fine) but by default psql will try to use GSSAPI when there is an entry available in klist. Normally when no GSSAPI encoded connection is available it will downgrade to an unencoded connection but with pgcat it will raise the following error message. The workaround is to specify the libc parameter gssencmode=disable but this workaround is not obvious from the error message that is presented to the client.
Problem
$ psql  'postgresql://postgres:postgres@hostname:6433/pgml'
psql: error: connection to server at "hostname" (xx.xx.x.xx), port 6433 failed: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.

Workaround
$ psql  'postgresql://postgres:postgres@hostname:6433/pgml?gssencmode=disable'
Timing is on.
psql (15.1, server 15.5)
Type "help" for help.

Expected behavior
The client should be able to gracefully handle not being able to connect with GSSAPI encoding.
Graceful handling of gssapi encoding rejection
$ psql  'postgresql://postgres:postgres@hostname:6433/pgml'
Timing is on.
psql (15.1, server 15.5)
Type "help" for help.

Expected error when gssencmode=require
$ psql  'postgresql://postgres:postgres@hostname:6433/pgml?gssencmode=require'
psql: error: connection to server at "hostname" (xx.xx.x.xx), port 6433 failed: connection to server at "hostname" (xx.xx.x.xx), port 6433 failed: GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)

Desktop

OS: Rocky9 Linux
Version

$ ./target/debug/pgcat --version
pgcat 1.1.2-dev4

What does PgCat logs say.
This message
psql: error: connection to server at "hostname" (xx.xx.x.xx), port 6433 failed: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.

Indicates that PgCat closed the connection immediately or panicked

This is what raises in the logs.
2024-09-04T15:25:41.785114Z  WARN ThreadId(04) pgcat: Client disconnected with error ProtocolSyncError("Unexpected startup code: 80877104")

80877104 refers to the GSSENCRequest message format documented in https://www.postgresql.org/docs/current/protocol-message-formats.html. Neither of the server or client error messages makes it obvious that the client needs to change the gssencmode query parameter without a lot of documentation searching.
I have a patch that will enable pgcat to handle this scenario more gracefully if you are interested in a PR.

PRs are always welcome! :smiley:

Just raised PR #797 to fix this issue.


remove node-gcm

This PR removes node-gcm as well as uses npm audit fix to address high-severity issues.

Closing as this is turning into a rabbit hole - will override transitive deps instead.


Minimal implementation of save user options between sessions

The first item to add is allow some debug mode, so a end user would not see wikidata dumps and other specific calculations that would increase memory usage.

Using localStorage, variable debug, to enable some extra information.
For who does not know what localStorage means, just click https://tags.etica.ai/#debug=1 to see debug infor, and https://tags.etica.ai/#debug=0 to turn off


Add "headers" config parameter to rest switch

Description:
Added a headers configuration parameter to the RESTful switch.
This allows for example specifying a Content-type to the HTTP request which may be required by certain web servers.
Related issue (if applicable): fixes #9943
Example entry for configuration.yaml (if applicable):
switch:
  - platform: rest
    name: Bedside lamp
    resource: http://<IP_ADDRESS>/switch/
    headers:
        Content-Type: application/json

Checklist:

[x] The code change is tested and works locally.

If user exposed functionality or configuration variables are added/changed:

[ ] Documentation added/updated in home-assistant.github.io

If the code communicates with devices, web services, or third-party tools:

[x] Local tests with tox run successfully. Your PR cannot be merged unless tests pass

Hi @mfrueh,
It seems you haven't yet signed a CLA. Please do so here.
Once you do that we will be able to review and accept this pull request.
Thanks!

Thanks! 👍 🐬  Great first PR !

This should really be added to the documentation, as I've just struggled with a REST switch for over two hours because of it.


Pass correct callback URL scheme to authentication

Before this fix, Safari would display an error about not being able to open the address instead of returning to the application. I assume this happened only when the scheme wasn't https as in my case.

Nice catch!


ValueError: could not convert string to float: 'Occ'

When I run the project of 'eval.py' ,there has question as follow:
Traceback (most recent call last):
File "/home/omnisky/anaconda3/envs/pysot/lib/python3.7/multiprocessing/pool.py", line 121, in worker
result = (True, func(*args, **kwds))
File "/mnt/omnisky/personal/fu/pysot/toolkit/evaluation/ar_benchmark.py", line 37, in eval
accuracy, failures = self._calculate_accuracy_robustness(tracker_name)
File "/mnt/omnisky/personal/fu/pysot/toolkit/evaluation/ar_benchmark.py", line 126, in _calculate_accuracy_robustness
tracker_trajs = video.load_tracker(self.dataset.tracker_path, tracker_name, False)
File "/mnt/omnisky/personal/fu/pysot/toolkit/datasets/vot.py", line 84, in load_tracker
for x in f.readlines()]
File "/mnt/omnisky/personal/fu/pysot/toolkit/datasets/vot.py", line 84, in
for x in f.readlines()]
ValueError: could not convert string to float: 'Occ'
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "../../tools/eval.py", line 146, in
main()
File "../../tools/eval.py", line 121, in main
trackers), desc='eval ar', total=len(trackers), ncols=100):
File "/home/omnisky/anaconda3/envs/pysot/lib/python3.7/site-packages/tqdm/_tqdm.py", line 1017, in iter
for obj in iterable:
File "/home/omnisky/anaconda3/envs/pysot/lib/python3.7/multiprocessing/pool.py", line 748, in next
raise value
ValueError: could not convert string to float: 'Occ'

@smile-fyl Hi, I met the same problem,did you solve it?THX

Sorry for this late reply, can you please provide detailed steps to reproduce this issue?

Since no further question is asked, I'm closing this issue for now.
Please create a new issue should you have other questions.


limit artifact lifetime

We are currently abusing the space of the Gitlab server. This should solve this.

I am pretty sure this doesn't mark any existing artifacts but only new ones. The default is 30 days.


[WIP] Unify cargo and rustc's error reporting

Fixes https://github.com/rust-lang/rust/issues/86854. This is still missing tests but otherwise I'm pretty happy with it :)
Don't print "run the command again with --verbose"
Here is a typical error seen by users of Cargo:
error[E0601]: `main` function not found in crate `wrong`
  |
  = note: consider adding a `main` function to `src/main.rs`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0601`.
error: could not compile `wrong`

To learn more, run the command again with --verbose.

The --verbose output is not particularly helpful in this case. The
error is unrelated to what cargo is doing, and passing --verbose will
not give useful information about how to proceed. Additionally, it's
unclear that --verbose is referring to the cargo command and not
rustc; this is especially true when cargo is wrapped by another build
system (such as Meson, x.py, or Make).
This omits the "run the command again with --verbose" output. --verbose
is still shown in cargo build --help, but it's not singled out above
all the other options.
Combine rustc and cargo's diagnostic summaries
This works by introspecting rustc's error output, using the JSON format
to determine whether it's a warning or error, then skipping it
altogether if it's a summary of the diagnostics printed.
Before:
$ cargo check --message-format short
src/main.rs:1:10: warning: trait objects without an explicit `dyn` are deprecated
src/main.rs:1:1: error[E0601]: `main` function not found in crate `wrong`
src/main.rs:1:9: error[E0038]: the trait `Clone` cannot be made into an object
error: aborting due to 2 previous errors; 1 warning emitted
error: could not compile `wrong`

After:
$ cargo check --message-format short
src/main.rs:1:10: warning: trait objects without an explicit `dyn` are deprecated
src/main.rs:1:1: error[E0601]: `main` function not found in crate `wrong`
src/main.rs:1:9: error[E0038]: the trait `Clone` cannot be made into an object
error: could not compile `wrong` due to 2 previous errors; 1 warning emitted

r? @alexcrichton
(rust-highfive has picked a reviewer for you, use r? to override)

The original example from https://github.com/rust-lang/rust/issues/86854 now looks like this:
error[E0308]: mismatched types
 --> src/lib.rs:1:11
  |
1 | fn f() -> usize {}
  |    -      ^^^^^ expected `usize`, found `()`
  |    |
  |    implicitly returns `()` as its body has no tail or `return` expression

For more information about this error, try `rustc --explain E0308`.
error: could not compile `playground` due to previous error

Thanks!
@bors r+

:pushpin: Commit 9c7cc545d738ca1e4eb04e8f2d5c3b224bf548d3 has been approved by ehuss

:hourglass: Testing commit 9c7cc545d738ca1e4eb04e8f2d5c3b224bf548d3 with merge cc80b40f1c78dda0d57f0df72ccb7fee811951eb...

:sunny: Test successful - checks-actions
Approved by: ehuss
Pushing cc80b40f1c78dda0d57f0df72ccb7fee811951eb to master...


Libsodium Install

Dear Community,
Need some help here.  I was following through the steps under "Setup Indy SDK build environment for MacOS" and ran into some issues with Libsodium.
Environment :  Mac OS High Sierra Version 10.13.5
Rustc version : 1.27.2
Log as follows:
######################################################################## 100.0%
Warning: libsodium 1.0.16 is available and more recent than version 1.0.12.
==> Downloading https://github.com/jedisct1/libsodium/releases/download/1.0.12/l
Already downloaded: /Users/andrewtan/Library/Caches/Homebrew/libsodium-1.0.12.tar.gz
==> ./configure --prefix=/usr/local/Cellar/libsodium/1.0.12
==> make check
==> make install
Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink include/sodium
/usr/local/include is not writable.
You can try again using:
brew link libsodium
==> Summary
🍺  /usr/local/Cellar/libsodium/1.0.12: 68 files, 1.2MB, built in 3 minutes 29 seconds
Andrews-Air:~ andrewtan$ brew link libsodium
Linking /usr/local/Cellar/libsodium/1.0.12...
Error: Could not symlink include/sodium
/usr/local/include is not writable.
Any idea what went wrong?
Any guidance is much appreciated.
Thanks.
Andrew

/usr/local/include is not writable.
Insufficient permission for brew link libsodium. Check that current user has write access to appropriate directories or run as sudo

@jovfer I am already in Admin mode but still facing this issue.
Have tried the other method "sudo" as well before but also having error.  See below error message.
Andrews-Air:~ andrewtan$ sudo brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/65effd2b617bade68a8a2c5b39e1c3089cc0e945/Formula/libsodium.rb
Password:
Sorry, try again.
Password:
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.

@jovfer Have managed to work around.  Not sure how the guide can be updated though.  The steps that I've taken to successfully compile in Mac OS as follows:

Uninstall Home Brew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

Install HomeBrew again
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Change the rights
sudo chown -R $(whoami) $(brew --prefix)/*

Follow through the other steps stated under https://github.com/hyperledger/indy-sdk/blob/master/doc/mac-build.md


Question: Process fulltext documents in txt format

Does Grobid support (or can it be used with) txt input format for full text parsing?
I have fulltext ACM data already in txt format, can I use this data in the same way someone would usually use Grobid's /api/processFulltextDocument endpoint, but instead of pdf input use this txt input instead?

Hello @XFishX !
No the models are expecting layout features, which are exploited for the structuring. If they are not present, the result will be unpredictable and risky.
A txt format introduces already some information loss. Normally full text data from publishers are available either in XML or in PDF. If you have some txt formats, there might be something strange in your pipeline/task that you would want to challenge "upstream".

Thank you I understand.
Is it possible for Grobid to obtain only the citations and references from academic papers (or body and bibliography snippets of these papers) in txt input format instead of PDF input?
Or do you know of any projects which might help obtain these specific features (citations and references), even though the layout structure is not present?
Any help will be greatly appreciated.

Is it possible for Grobid to obtain only the citations and references from academic papers (or body and bibliography snippets of these papers) in txt input format instead of PDF input?

With GROBID no, for the reasons indicated above.

Or do you know of any projects which might help obtain these specific features (citations and references), even though the layout and the structure is not present?

ParsCit was working with txt file input. I don't have other tools in mind for a txt input. As mentioned it's not a natural nor expected input for this range of task.

Thank you


No copy/paste in OS X

Copy/Paste didn't work in OS X (Yosemite). I copied from Chrome and attempted to paste in Sensitive with no results. Used the executable package of Sensitive linked in the Readme.

I reproduce the issue
will you fix it ?
Thanks

Here is an article in how to fix it:  https://pracucci.com/atom-electron-enable-copy-and-paste.html
Is this project maintained still where such a fix could be made?


Email token not going to Demo but to App URL

The button in the email sent from demo.lale.helpdies not go there but to app.lale.help. Might be a system variable somewhere...

Took a while to figure out, but was actually a simple change of a heroku config variable. Fixed.

LGTM.


Can't open Material Overrides for Edges in Godot v4.3.rc1

It is in the new Godot v4.3.rc1 version that the ability to manipulate Material Overrides for individual Edges is no longer available. When using edge edit button from the toolbar and Right Click the left edge of the shape nothing happens. But in older versions like Godot v4.2 everything works.

Godot v4.3.rc1
SmartShape2D v3.0.0

With the new version of Godotv4.3.rc2 everything works correctly.


Merge pull request #3 from Zychnnn/test

commit changes

👷 Deploy Preview for peaceful-cannoli-4afc02 processing.

Name
Link

🔨 Latest commit
fe5285b65e02afe9039a4c53a478c1ca423c1786

🔍 Latest deploy log
https://app.netlify.com/sites/peaceful-cannoli-4afc02/deploys/64df07dba8d62600081d5e06


Some changes for comptibility.

Use Compat.jl to work with julia 0.3 (It worked well)

Use another pull request.