:hammer: yarn workspaces

TODOs

[x] upgrade examples dependencies (other PR)
[x] add jest at root level
[ ] test code in other project via link
[ ] update README (split them)
[ ] add size badge for both 'full' and 'core' packages
[ ] circleci
[ ] split tests between core and full

Coverage decreased (-11.8%) to 85.496% when pulling 7580c16811e258799909175429e933432d132b07 on workspace into f0b23dffc99a06a949c493b4acf57ced8418ec96 on master.


Any change of a homey plugin?

Hello,
unfortunately i could not find a good tutorial for develop plugins. Maybe someone with a homey can write a plugin? Maybe, if  we can find enough people, who will spend money for writing a plugin.

Crowd funding this is a great idea tho, but homey isn't that well adopted as a home automation controller.
There is more to it then just these 3 api requests, every device has it's own capabilitie (onoff, dim, rgb etc.) There aren't any docs for it at the moment, and getting al the api endpoints mean you will need to have a homey. (and check the network tab / sniff the api requests)

That's right! But the homedash shows the possibility of this.

I'm interested in this as well. Unfortunately I currently have no time to dive into this further, but want to co-operate if someone feels the urge to get started on a minimally working plugin. ;)

Did anybody ever look further in to this?  I've received a homey today and would like to get it working with home bridge, I was surprise dot discover that a decide that was designed purely with the idea of integration, wasn't able to integrate with Apple HomeKit.

Officially Apple does not support Homekit with multi-vendor domotica hubs like Homey. This is due to security constraints and prevention of bad user experience. The HomeBridge open source project is an unofficial approach to bridging this GAP. Although Apple will never support this they might consider not changing their API, certificates, protocol so that more people will see the benefits from using Homekit. But they could change things whenever they want which renders HomeBridge related integrations useless. It is unlikely that Athom will ever support HomeKit via HomeBridge but they might try to convince Apple that integrating multi-vendor devices via Homey to HomeKit does not impose security threads and/or bad user experience issues or whatsoever.


What resolution is the pretrained ResNet50?

你好，我想咨询一下提供的ResNet50预训练权重是在什么分辨率下完成的？比如224x224？或者448x488？

224X224
We use the pretrained Resnet50 from torchvision, referring to https://github.com/open-mmlab/mmdetection/blob/6b87ac22b8d9dea8cc28b9ce84909e6c311e6268/configs/base/models/faster_rcnn_r50_fpn.py#L13


[Test] Disable SILOptimizer/accessutils.sil on armv7k.

The test is failing for armv7k.

@swift-ci please smoke test and merge

@swift-ci please smoke test and merge


Subscription fingerprint includes the operation name

Describe the bug
Not entirely sure this is a bug but I'd like to make sure.
The subscription fingerprint changes when the operationName of the graphql subscription changes.
This makes it easy to Ddos by sending a lot of subscription that vary only with their name
Versions
ruby: 3.1.1
rails (or other framework): 7.0
graphql: 2.0.7
graphql-anycable: 1.1.3
anycable: 1.3
GraphQL query
How do you subscribe to subscriptions?
subscription F180a0bde0a1 {
    aCommentWasUpdated {
        id
    }
}

Expected behavior
If possible all of those subscriptions would have the same fingerprint
Actual behavior
We ended up with 1000s of different fingerprints

We rely on GraphQL-Ruby to generate these fingerprints via their GraphQL::Subscriptions::Event#fingerprint here: https://github.com/anycable/graphql-anycable/blob/736501cedd9820f3c481c6fd3b8da2c1b605f8be/lib/graphql/subscriptions/anycable_subscriptions.rb#L150-L153
Which in turn uses GraphQL::Query#fingerprint and GraphQL::Query#operation_fingerprint that always includes selected operation name (as query can have multiple operations but only one is used).

While it is possible to get access to parsed query string from GraphQL-Ruby and juggle with it (extracting only part of query for currently selected operation and hashing it), I would  prefer to avoid it if possible.
So, please open issue in GraphQL-Ruby repo here: https://github.com/rmosolgo/graphql-ruby/issues


Blog not appearing

New blog created:
http://codeforcroatia.org/blog/open_zagreb_hack_night-2

is not appearing on list of blogs: http://codeforcroatia.org/blog/

is not appearing on frontpage timeline: http://codeforcroatia.org/

@themightychris it is displayed now both on jomepage feed as well in blog feed:
http://codeforcroatia.org/blog
Was it you?

May be timezone issue.

This is fixed on cfc-staging and cfc production, so closing this issue


Casks/microsoft powerpoint.rb

After making all changes to the cask:

[x] brew cask audit --download {{cask_file}} is error-free.
[x] brew cask style --fix {{cask_file}} reports no offenses.
[x] The commit message includes the cask’s name and version.

Additionally, if adding a new cask:

[x] Named the cask according to the token reference.
[x] brew cask install {{cask_file}} worked successfully.
[ ] brew cask uninstall {{cask_file}} worked successfully.
[x] Checked there are no open pull requests for the same cask.
[x] Checked the cask was not already refused in closed issues.
[x] Checked the cask is submitted to the correct repo.

Microsoft Powerpoint 2016 15.40 being split out of the Office Suite.

https://github.com/caskroom/homebrew-cask/pull/41092#issuecomment-347339947


Can't figure out how to work with associations

Could you please provide full, working example of how to deal with associations? From start to finish. I have already spend days on figuring it out but with no success. I am begging.

An example of how you define associate in the model is like this:
export default function(sequelize: Sequelize, dataTypes: DataTypes):
  SequelizeStatic.Model<ModelAInstance, ModelAAttributes> {
  let ModelA = sequelize.define<ModelAInstance, ModelAAttributes>("ModelA", {
    name: {type: dataTypes.STRING, allowNull: false, primaryKey: true},
    description: {type: dataTypes.TEXT, allowNull: true}
  }, {
    indexes: [],
    classMethods: {
      associate: (models: Models) => {
        ModelA.belongsTo(models.ModelB, {
          foreignKey: "modelBAttr",
          targetKey: "modelBAttr"
        });
      }
    },
    timestamps: false
  });

  return ModelA;

In TypeScript, Sequelize or any ORM can be a bit of a pain when trying to create a perfect type definition for models. I'm sorry, but I don't have a full example at the moment due to tight schedules. I'm sure Sequelize people would gladly help.

#1 is also related.


Fix empty attribute projections for TagHelpers.

Added TagHelperParseTreeRewriter tests, attempted to cover all empty attribute edge cases.
Added Codegen tests to validate output and DesignTimeLineMappings.

#271

/cc @pranavkm

:watch:

Addressed code review comments.

:watch:

:shipit: with one incorrect suggestion I made reversed and (maybe) a code comment or two improved


XAML Examples

How would you use these in XAML? I tried using the RoundedBorderControl, it shows up, but just shows a square instead of having rounded borders.
Here is my code:
In ContentPage tag:
xmlns:qcontrols="clr-namespace:MyApp.Controls;assembly=MyApp"
XAML control code:
<qcontrols:RoundedBorderControl BackgroundColor="Red" CornerRadius="80" WidthRequest="100" HeightRequest="100" />
Control Code:
using System;
using Xamarin.Forms;
using NControl.Plugins.Abstractions;
using NGraphics;

namespace MyApp.Controls
{
	/// <summary>
	/// Rounded border control.
	/// </summary>
	public class RoundedBorderControl: NControlView
	{
		#region Private Members

		/// <summary>
		/// The color of the background.
		/// </summary>
		private Xamarin.Forms.Color _backgroundColor;

		#endregion

		/// <summary>
		/// Initializes a new instance of the <see cref="NControlDemo.FormsApp.Controls.RoundedBorderControl"/> class.
		/// </summary>
		public RoundedBorderControl()
		{
			base.BackgroundColor = Xamarin.Forms.Color.Transparent;
		}

		#region Properties

		/// <summary>
		/// The corner radius property.
		/// </summary>
		public static BindableProperty CornerRadiusProperty =
			BindableProperty.Create<RoundedBorderControl, int> (p => p.CornerRadius, 8);

		/// <summary>
		/// Gets or sets the corner radius.
		/// </summary>
		/// <value>The corner radius.</value>
		public int CornerRadius
		{
			get
			{
				return (int)GetValue(CornerRadiusProperty);
			}
			set
			{
				SetValue(CornerRadiusProperty, value);
			}
		}

		/// <summary>
		/// Gets or sets the color which will fill the background of a VisualElement. This is a bindable property.
		/// </summary>
		/// <value>The color of the background.</value>
		public new Xamarin.Forms.Color BackgroundColor
		{
			get
			{
				return _backgroundColor;
			}
			set
			{
				_backgroundColor = value;
				Invalidate();
			}
		}

		#endregion

		#region Drawing

		/// <summary>
		/// Draw the specified canvas.
		/// </summary>
		/// <param name="canvas">Canvas.</param>
		/// <param name="rect">Rect.</param>
		public override void Draw(NGraphics.ICanvas canvas, NGraphics.Rect rect)
		{
			base.Draw(canvas, rect);

			var backgroundBrush = new SolidBrush(new NGraphics.Color(_backgroundColor.R,
				_backgroundColor.G, _backgroundColor.B, _backgroundColor.A));

			var curveSize = CornerRadius;
			var width = rect.Width;
			var height = rect.Height;
			canvas.DrawPath(new PathOp []{
				new MoveTo(curveSize, 0),
				// Top Right corner
				new LineTo(width-curveSize, 0),
				new CurveTo(
					new NGraphics.Point(width-curveSize, 0),
					new NGraphics.Point(width, 0),
					new NGraphics.Point(width, curveSize)
				),
				new LineTo(width, height-curveSize),
				// Bottom right corner
				new CurveTo(
					new NGraphics.Point(width, height-curveSize),
					new NGraphics.Point(width, height),
					new NGraphics.Point(width-curveSize, height)
				),
				new LineTo(curveSize, height),
				// Bottom left corner
				new CurveTo(
					new NGraphics.Point(curveSize, height),
					new NGraphics.Point(0, height),
					new NGraphics.Point(0, height-curveSize)
				),
				new LineTo(0, curveSize),
				new CurveTo(
					new NGraphics.Point(0, curveSize),
					new NGraphics.Point(0, 0),
					new NGraphics.Point(curveSize, 0)
				),
				new ClosePath()
			}, null, backgroundBrush);

		}

		#endregion
	}
}

I'll update the samples with some details regarding the Xaml support. The reason why this is not working is the dirty hack I've made with the background color. New'ing it doesn't seem to be working in Xaml.


Add Profile:

A pull request should be created from this issue if not kindly ping @dinxsh ⚠

/assign


[#414] Fix SsoMiddleware error in FileUpload tests

Addresses # 414
Description
This PR fixes a concurrency issue in the FileUpload tests that was causing an exception in the pipelines when two tests ran for the same skill bot and tried to access the same file in the server.
Detailed Changes

Updated FileUploadTests class to create and upload a different file for each test case adding a GUID to the file name.
Deleted the Media/TestFile.txt file that was no longer needed.

Testing
This image shows the tests passing after the changes.

Promoted to MS in PR# 433


Invalid type check

Hi all,
So a callable cannot be an array, this code looks invalid;

/**
     * @param callable $callable
     *
     * @return callable
     */
    private function bindToContainer(callable $callable): callable
    {
        if (is_array($callable) && $callable[0] instanceof Closure) {
            $callable = $callable[0];
        }
        if ($this->container && $callable instanceof Closure) {
            $callable = $callable->bindTo($this->container);
        }
        return $callable;
    }

Location: https://github.com/slimphp/Slim/blob/4.x/Slim/CallableResolver.php#L171

Callables can be arrays:
$callable = [Foo::class, '__construct'];

See:
https://www.php.net/manual/en/function.is-callable.php

Ups ma bad, just forgot it was PHP who says potatoes can be tomatoes cos both look like eggs... :P
BTW "all-able" sounds better for these type cases, right? :)


Delete comment feature

🛠 Fixes Issue #337
###This feature is allowed for the admins only
https://user-images.githubusercontent.com/56798376/169603307-4773ee16-9e72-49d3-b3a9-376157c222bc.mp4

👨💻 Changes proposed

✔ Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

📄 Note to reviewers

📷 Screenshots

Please review my PR @arpit456jain @raghavTinker @KKhushhalR2405 @singhmansi25

@muhammadgalhoum
In the video, when u use muhammadgalhoum mail id, are u assigned as staff, as u are able to see the delete button for comment.
If possible make this feature available only for admin for now.
Your views on it @arpit456jain ?!

@muhammadgalhoum In the video, when u use muhammadgalhoum mail id, are u assigned as staff, as u are able to see the delete button for comment. If possible make this feature available only for admin for now. Your views on it @arpit456jain ?!

yes that's the main requirement


Applications aren't created using Openshift origin 3.7.1 and lastest version of ocdev

Infos
./ocdev version
0.0.1 (04138b0)

minishift status
Minishift:  Running
Profile:    minishift
OpenShift:  Running (openshift v3.7.1+ab0f056)
DiskUsage:  13% of 17.9G

Scenario executed in a terminal on MacOs X machine
./ocdev app create spring-boot
Creating application: spring-boot
Switched to application: spring-boot

./ocdev app create spring-boot1
Creating application: spring-boot1
Switched to application: spring-boot1

./ocdev app create spring-boot2
Creating application: spring-boot2
Switched to application: spring-boot2

./ocdev app list
ACTIVE   NAME
  *      spring-boot2

But no projects/applications are showed
oc projects
You have access to the following projects and can switch between them with 'oc project <projectname>':

    default
    kube-public
    kube-system
  * myproject - My Project
    openshift
    openshift-infra
    openshift-node

Using project "myproject" on server "https://<IP_ADDRESS>:8443".

@cmoulliard this is being worked on in #105, we had to lose this temporarily when we decouple from OpenShift projects, we should have a fix soon.

This got fixed in https://github.com/redhat-developer/ocdev/pull/121


Could you support for Togainu no Chi(Steam)?

Hello.
Could you add support for Togainu no Chi(Steam version)?
Unpacking this file was successful, but the game does not run when the repacked file is used.
I will send you the game executable and script file.
This is key and npk information.
1884B591CE89E6ADF09D769E33E2A8895C02AB5C3AFC8F7E70D86FB09236DC33
NPK2
Encryption Key Found:
0x18, 0x84, 0xB5, 0x91, 0xCE, 0x89, 0xE6, 0xAD, 0xF0, 0x9D, 0x76, 0x9E, 0x33, 0xE2, 0xA8, 0x89, 0x5C, 0x02, 0xAB, 0x5C, 0x3A, 0xFC, 0x8F, 0x7E, 0x70, 0xD8, 0x6F, 0xB0, 0x92, 0x36, 0xDC, 0x33

Read this first, #30

Thank you!
I have succeeded in running the game.
I solved the problem thanks to you.


fix typo

Fixed typo in get_univeristy method to get_university in the method which returns all universities in a given region. though it is not tested to be working

It was just a README file, it does not affect the real method implemented in a codebase.
Merged.
Thanks,


using dict() on a stix2 object will not correctly serialize datetime properties

This is apparently is a bug in Pandas and not in STIX2 according to this https://github.com/mitre/cti/issues/17 . The suggestion is to apply a workaround:
Don't put them in dictionaries and instead serialize them and load the strings back to have a JSON object that you can pass to the pandas

Hi @Cyb3rWard0g, you should read oasis-open/cti-python-stix2#183. You should not use dict() to serialize a stix2 object and instead use a different approach. Initially I thought that was a bug, but the behavior of dict() is simply different.


Add metadata detection to RSpec/ScatteredSetup cop

Added metadata detection to hooks. Taught the cop to distinguish hooks also by that metadata.
Transformation of metadata is necessary though, since the following is the same in RSpec's terms:
before(special: true) { }
before(:example, :special) { }
before(:example, special: true) { }

NOTE: RSpec allows hash metadata to be present when no explicit hook scope is given.
However, if hook scope is omitted, symbolic metadata is not allowed, and that causes RSpec to raise an error.
Since we normally don't cover the cases when RSpec emits a meaningful warning, some of the validations were removed.
Fixes #850

Before submitting the PR make sure the following are checked:

[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[x] Added tests.
[x] Added an entry to the changelog if the new code introduces user-observable changes.
[x] The build (bundle exec rake) passes (be sure to run this locally, since it may produce updated documentation that you will need to commit).

@bquorning @Darhazer please take a look.

Thank you @pirj 👍

You're always welcome!

I don’t know why I haven’t done this before – I’ve added you to the rubocop-rspec team so you don’t have to push to your own fork anymore. That also makes it for me to pull down your branches for review locally :-D

Thanks, it's a honour for me!

offtopic: @bquorning you can use hub to easily checkout PRs


Repo sync for protected CLA branch

The pull request is created from main637921407065965637 to main to fix git push error for protected CLA branch

@ghogen : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Docs Build status updates of commit 06e45b8:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error: GitBranchDeletedOrForcePushed] Cannot sync git repo to specified commit because branch main637921407065965637 has been deleted or has been force pushed

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 06e45b8:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error: GitBranchDeletedOrForcePushed] Cannot sync git repo to specified commit because branch main637921407065965637 has been deleted or has been force pushed

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


hr on iPad

I tried to fix showing of hr over text on iPad by wrapping it into div with transparent border, it did helped but it show excess space before hr on chrome or firefox. So this was not good solution, maybe try to change layout to flex, using bootsrap Stack component with some defined gap. And remove wrapping div with transparent border as it is not good solution.

Source of recipe is stuck on section method if there are no pictures in recipe.

Its working on iPad so I closing this issue


Compiled .exe is changing execution behaviour when .lua source files are changed, without recompilation.

I created a .exe using "rtc -s main.lua ." (static compilation, integrating the source files in the current directory into the .exe) resulting in main.exe. If the .lua source files in the directory are changed, the execution of main.exe changes to match the changes in the source files without recompiling the .exe.
If main.exe is moved into a different folder (so it is not in the same folder as the .lua source files) the execution behaviour reverts to the behaviour matching the source files at the time it was compiled.

It's not really a bug, as LuaRT search path starts first with package.path and package.cpath values to search for modules.
If not found, the module is then searched in the executable embedded content.
Maybe I will modify this to search first for modules bundled with the executable.


feat: codeblock styling like chatgpt

Description
Styling CodeBlock in ChatGPT style.
Screenshots

ChatbotUI
ChatGPT

looks great!


Total page count

Hi @ansu5555 @ansuman5555
Am trying to customize the pdf viewer. How will i get the total number of pages on document load.
Thanks
Anson

#34 Added Total pageCount

Added in version 2.1.1


When viewing a gallery of images, the threshold between a horizontal swipe and a vertical/diagonal swipe is too small.

It makes it extremely tough to look through galleries in the inline viewer.

iOS 12 Beta 5, IPhone X, and beta version 1.5 build 32

Okay, cool. We’ve fixed this bug since the latest beta, so please reopen this issue if it resurfaces after the next release!


Change type for indices_query_cache_cache_count metric to counter

indices.query_cache.cache_count is the total number of cache entries that has been stored in the query cache, which should only increase or be reset.

thanks, are you sure it's a counter? I don't exactly know the meaning of the underlying json field. In case it gets adjusted on cache evictions, it's not a counter.
If you're sure about it, a _total is missing in the metric name (following the prometheus metric name conventions)

Yes, cache_count is a counter which gets incremented when an entry is stored in the cache and shouldn't get decremented on an eviction:
https://github.com/elastic/elasticsearch/blob/ed3230b3ebbddbe0cf049c76ce42fde79f1b793c/server/src/main/java/org/elasticsearch/indices/IndicesQueryCache.java#L305-L342
https://github.com/elastic/elasticsearch/blob/ed3230b3ebbddbe0cf049c76ce42fde79f1b793c/server/src/main/java/org/elasticsearch/index/cache/query/QueryCacheStats.java#L98-L103


Ensure the coverage for mixedref SDK in system tests

for tests for all JVM, add Mode150 and Mode650
for tests for openj9/ibm only, add Mode110 and Mode610
remove Mode110 and Mode610 in special tests if above modes are added in sanity/extended

Related: https://github.com/eclipse/openj9/issues/9231
Signed-off-by: lanxia<EMAIL_ADDRESS>

Target
JDK Version
JDK Impl
Platform
Grinder

sanity.system
8
openj9
x86-64_linux
Grinder/12971

sanity.system
8
openj9
x86-64_linux
Grinder/12971

Target
JDK Version
JDK Impl
Platform
Grinder

sanity.system
8
openj9
x86-64_linux
Grinder/12971

sanity.system
8
openj9
x86-64_linux
Grinder/12971

FYI @pshipton

FYI @pshipton


[$500] Android - Chat - Chat flickers if a PDF was previously sent or when a new one is sent

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 1.4.25-1
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
Action Performed:

Open the app
Navigate to any chat
Tap on ''+'' button
Select "Add attachment''
Upload a PDF file
Check the chat view

Expected Result:
Chat view should not flicker when there are previously sent PDF files or when a PDF file is sent in the chat
Actual Result:
Chat view flickers when there are previously sent PDF file, or when user send a PDF file
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/5b254928-088a-4613-8d32-2ccca2baa4a7
Slack___TEST_ing__3-2023-12-28_22_42_24.367-2024-01-15 16_09_19.026.pdf
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0184552ac59563af4b
Upwork Job ID:<PHONE_NUMBER>928300032
Last Price Increase: 2024-01-29

I Tried to produce the issue and followed below actions :
Open the app
Navigate to any chat
Tap on ''+'' button
Select "Add attachment''
Upload a PDF file
Check the chat view
got same response.

@sobitneupane do you have a native Android device by any chance?

Nope. I don't have Android device with me.

Proposal
Please re-state the problem that we are trying to solve in this issue.
Chat flickers if PDF was previously sent or when new one is uploaded.
What is the root cause of that problem?
The root cause of the issue is the image size is defaulting to width 200 and height 200 after upload and then GetSize() is called after upload which then calculates correct width and height and the image size is adjusted which causes the flicker.
What changes do you think we should make in order to solve the problem?
After the file is uploaded, the correct image width and height should be calculated rather than showing placeholder image of width and height 200. After the correct size is obtained from GetSize(), the correct attachment preview size can be displayed to avoid the flicker from placeholder image width/height of 200 to correct width/height. Then after obtaining the correct values store the image width/height in Onyx storage, so after the use changes chat reports, the image sizes are already available for the image to be displayed rather than showing defaults.
In ReportActionItemFragment, use UseEffect to intercept loading of attachment. After the attachment is uploaded, the fragment contains the imgUrl. The useState setIsAttachment loading is for displaying activity indicator while the attachment is uploading and correct size obtained.
https://github.com/Expensify/App/blob/c14ca54536a50ecf251bd3ef7ebb4561f8e0e716/src/pages/home/report/ReportActionItemFragment.js#L96
    useEffect(()=>{
        if (ReportUtils.isReportMessageAttachment(fragment)) {
            if (fragment.html === CONST.ATTACHMENT_UPLOADING_MESSAGE_HTML) {
                return;
            }
            const attachmentDetails = getAttachmentDetails(fragment.html);
            const previewSource = tryResolveUrlFromApiRoot(attachmentDetails.previewSourceURL);
            const authToken = lodashGet(props.session, 'encryptedAuthToken', null);
            const imgUrl = { uri: `${previewSource}?encryptedAuthToken=${encodeURIComponent(authToken)}` };
            const img = _.find(props.imageCache, (img) => img.imgUrl == previewSource);
            if (img) {
                setisAttachedmentLoading(false);
                return;
            }
// obtain image size and store in onyx storage.
            RNImage.getSize(imgUrl.uri, (width, height) => {
                setImageCache(previewSource, width, height);
                setisAttachedmentLoading(false);
            });

        }
    },[fragment])

What alternative solutions did you explore? (Optional)

Awaiting proposal review, Melvin!

@trjExpensify I will be able review the issue only in the weekend. Please feel free to re-assign the issue if it's high-priority or urgent.

This weekend is cool!

👋 How'd you get on @sobitneupane over the weekend?

Oops I could not get to it before weekend. I will review it by EOD tomorrow NPT.

Thanks!

@sourcecodedeveloper
I believe the flicker that we are talking about is constant flickering of the pdf thumbnail. Not the change from placeholder thumbnail.
https://github.com/Expensify/App/assets/25876548/e03a12de-8624-4a85-b07b-42d07063a925

The root cause of the issue is the image size is defaulting to width 200 and height 200 after upload and then GetSize() is called after upload which then calculates correct width and height and the image size is adjusted which causes the flicker.

I cannot reproduce the issue
https://github.com/Expensify/App/assets/25876548/7cab69e3-bfde-4c28-a0aa-ada59c0ccbd0

Okay, I'm happy to close this out then! I'm sure if it comes back someone will flag it. :)

Issue is reproduced on build <IP_ADDRESS>
https://github.com/Expensify/App/assets/93399543/5f39df6e-b757-426f-975b-6b13765531ed

@sobitneupane I was able to reproduce the issue.
android.bug.webm
Also, fortunately the original proposal I had proposed does resolve the flickering issue.
android.poc.webm

Cool, @sobitneupane if you could give this a review please. Thanks!
(Internal: Adding this to #vip-vsb as a LOW chat attachment bug to fix)

@kbecciv In which android version was the issue reproduced?

@sourcecodedeveloper I am trying to reproduce the issue on my end. I could not reproduce the issue on Android Version 8 (real device). Did you reproduce it in simulator or real device? Is the issue reproducible only on uploading an attachment or is it reproducible even with existing attachments?

I would store the attachment width and height in Onyx,

So, we need to store attachment width and height for all the attachments, right? It doesn't feel like an optimal solution. May be if we can pin point the exact root cause, we can get better solution. But I am not sure if it is worth it as market share of Android 7.0 or less is less than 5%.

@sobitneupane I used the android simulator Android 7.0 API 24. The issue is also reproducible on Android 8.0 API 26. The issue happens right away as soon as the chat report is opened with existing attachments, no need to upload any attachments.
Storing width and height in Onyx is option 1, option 2 would be to replace the ImageWithSizeCalculation component with the Image component. Option 2 would be simpler and easier. I have tested option 2 on Android 8 and the issue does get resolved also included in proposal as alternate option.

The latest version of Android is 13.0
This bug is apparently only reproducible on versions 10.0 and below?
@kbecciv did you get confirmation what version this was tested and reported on?

@trjExpensify @sobitneupane Issue reproduced on Samsung Galaxy S9+, Android 10

Cool, so has anyone been able to reproduce this on Android 11, Android 12, Android 13 or Android 14? The latest 4 versions account for 75% of the market share.

@trjExpensify I tested and the issue is reproducible on Pixel 2 Android 11, 12, 13 and 14. Pixel 3 Android 14 did not have the issue. So the issue seems to vary across device models.
@sobitneupane Try using the emulator for testing purposes and use Pixel 2. For alternate solution, no need to store attachment width and height for attachments. The ImageWithSizeCalculation is not needed and the Image component can be used instead. The ImageWithSizeCalculation component is only used in the thumbnail component so can be replaced safely. I have tested and replacing ImageWithSizeCalculation with Image resolves the flickering.

Tester is still able to reproduce the issue.
https://github.com/Expensify/App/assets/93399543/73cbf7df-fa16-4799-a4ee-b8240f1cb7d2

@sourcecodedeveloper

The ImageWithSizeCalculation is not needed and the Image component can be used instead. The ImageWithSizeCalculation component is only used in the thumbnail component so can be replaced safely. I have tested and replacing ImageWithSizeCalculation with Image resolves the flickering.

ImageWithSizeCalculation is a very old component introduced by https://github.com/Expensify/App/pull/685 PR. Can you please explain what purpose  ImageWithSizeCalculation is serving and what drawbacks will we have by replacing it with Image? Will it have any effect in UI and performance?

@sobitneupane I went through some previous commits for ImageWithSizeCalculation, the component has been slowly phased out. Previously ImageWithSizeCalculation was used by ImageView both index.js and index.native.js but was removed with the Image component, so no drawbacks replacing the component with Image and also no side effects in the UI and performance.
https://github.com/Expensify/App/commit/ee56271061393a8e8b171c86a2337a8d4d272964
The ImageView index.js is still using Image but the index.native.js is using LightBox. The ThumbnailImage does not have separate index files for web and native and is basically tied to the ImageWithSizeCalculation.

I could finally reproduce the issue using the pdf attached in the issue. Looks like it is only reproducible with pdf having large widths.
Only change that is required is to solve the issue is
- resizeMode={RESIZE_MODES.cover}
+ resizeMode={RESIZE_MODES.contain}

https://github.com/Expensify/App/blob/20ca041595e76cdd289977e55b2af3fbb9618868/src/components/ImageWithSizeCalculation.tsx#L83
But the change was made by https://github.com/Expensify/App/pull/18485/ PR to solve https://github.com/Expensify/App/issues/18040 issue.
@sourcecodedeveloper Would you like to investigate further?

@sobitneupane I can do test build and get back.

@sobitneupane The problem with using RESIZE_MODES.contain is the thumbnail(long images) do not fill the container rather the thumbnail is contained and empty area is visible on the top and bottom. So need to use RESIZE_MODES.cover and also resolve the flickering.
The ThumbnailImage component uses the useThumbnailDimensions hook, which is using aspectRatio prop of Layout.
https://github.com/Expensify/App/blob/8bdb753045cf0eee6cf1d342adf8b76040cabac4/src/hooks/useThumbnailDimensions.ts#L22
According to documentation,
https://reactnative.dev/docs/layout-props#aspectratio
Consider the following points,

On a node with a set width/height, aspect ratio controls the size of the unset dimension.
On a node with a measure function, aspect ratio works as though the measure function measures the flex basis.

Considering point 1 and the useThumbnailDimensions, the hook only sets one of the props width or height and the aspectRatio controls the size of the other dimension.
https://github.com/Expensify/App/blob/8bdb753045cf0eee6cf1d342adf8b76040cabac4/src/hooks/useThumbnailDimensions.ts#L24
Going back to the ImageWithSizeCalculation component, the component declares onMeasure function
https://github.com/Expensify/App/blob/8bdb753045cf0eee6cf1d342adf8b76040cabac4/src/components/ThumbnailImage.tsx#L102
Considering point 2, if measure function is provided, the aspect ratio functions as though the measure function is measuring the flex basis, but from the definition of onMeasure function, the function is not handling flex basis but returning image dimensions.
The root cause of the flickering would be how aspectRatio behaves when used along with measure function. Only point 1 is needed. The onMeasure function may have been used to provide dimensions but react interprets the measure function for measuring flex basis and not for returning image dimensions.
The aspectRatio prop is necessary to provide when sizing thumbnails, removing aspectRatio is not suitable so rather the solution would be to remove the measure function from ImageWithSizeCalculation and calculate image size in ThumbnailImage component using GetSize() method of image.
Given the root cause, the issue becomes easier to solve, need to add useEffect in ThumbnailImage component and then call GetSize method of image.
useEffect(()=>{
        RNImage.getSize(source, (width, height) => {
            updateImageSize({width, height});
        });
},[source])

Also remove the onMeasure callback from ImageWithSizeCalculation component. I have tested on Pixel 2,3,4 and the issue is resolved.

What do you think about this, @sobitneupane?

I cannot find comments from @sourcecodedeveloper any longer.
We are waiting for proposals. Here is my finding so far.

Proposal
Please re-state the problem that we are trying to solve in this issue.
Upload pdf in chat. The pdf flickers on Android (Pixel 2, 3, 4).
What is the root cause of that problem?
The root cause of the issue is the use of aspect ratio along with the measure function measure the flex basis but the expectation is to get the image dimensions. According to layout prop documentation
https://reactnative.dev/docs/layout-props#aspectratio

On a node with a set width/height, aspect ratio controls the size of the unset dimension
On a node with a measure function, aspect ratio works as though the measure function measures the flex basis

The useThumbnailDimensions hook uses aspect ratio
https://github.com/Expensify/App/blob/bee752ac593f40d96391199f680b14466076ab9d/src/hooks/useThumbnailDimensions.ts#L22
The aspectRatio is applied on the node
https://github.com/Expensify/App/blob/bee752ac593f40d96391199f680b14466076ab9d/src/components/ThumbnailImage.tsx#L99
The ImageWithSizeCalculation component also uses onMeasure function which affects the functionality of the aspect ratio.
https://github.com/Expensify/App/blob/bee752ac593f40d96391199f680b14466076ab9d/src/components/ThumbnailImage.tsx#L102
Instead of providing the flex basis, the onMeasure function provides the image dimensions.
What changes do you think we should make in order to solve the problem?
The aspect ratio property is necessary to resize thumbnail, so the aspectRatio needs to be kept instead the onMeasure function is affecting the functionality of the aspectRatio and can be replaced with the GetSize function of image.
In ThumbnailComponent, add useEffect and call getSize.
https://github.com/Expensify/App/blob/bee752ac593f40d96391199f680b14466076ab9d/src/components/ThumbnailImage.tsx#L45
    useEffect(() => {
        if (updateImageSize == null) {
            return;
        }
        const sourceURLWithAuth = addEncryptedAuthTokenToURL(previewSourceURL as string);
        RNImage.getSize(sourceURLWithAuth, (width, height) => {
            updateImageSize({width, height});
        });
    }, [updateImageSize, previewSourceURL, isOffline]);

Remove onMeasure function call from so the aspectRatio only controls the size of the unset dimension and not act as flex basis
https://github.com/Expensify/App/blob/bee752ac593f40d96391199f680b14466076ab9d/src/components/ThumbnailImage.tsx#L102
What alternative solutions did you explore? (Optional)

@sobitneupane The problem with using resizeMode={RESIZE_MODES.contain} is the the thumbnails (long images) have empty space on top and the bottom. The other PR used resizeMode={RESIZE_MODES.cover} so the long images would fill the container.
I have revised the proposal to explain the layout prop and how aspect ratio functions when applied on node with onMeasure function.

@sobitneupane I am waiting for feedback regarding https://github.com/Expensify/App/issues/34520#issuecomment-1956874620
I explained why resizeMode={RESIZE_MODES.contain} cannot be used. PR 18485 added resizeMode={RESIZE_MODES.cover} so the long images would fill the container. For solution I had explained how the aspectRatio functions when applied to node using measure function.

Strange, so what happened here to all of @sourcecodedeveloper's comments? @jsdev2547 is this your new account handle or something?
Anyhow, @sobitneupane I think this is ready for your input please!

@sobitneupane Please provide input.

Thanks for the proposal @jsdev2547. I am not totally convinced by the RCA.
My findings so far is the width and height value returned by onMeasure is fluctuating(687, 688). It is resulting the change in imageDimensions and thumbnailDimensionsStyles. So, the thumbnail image is re-rendering infinite times resulting the flicker. One possible solution would be to return width and height by ceiling or flooring the value instead of returning aspect ration. But it would require more detailed RCA.

@sobitneupane I can confirm the issue is reproducible for when height is greater than width, with the long images. Also need to understand how the aspectRatio functions when applied to node with measure function i.e measure the flex basis but the expectation of the measure function is to return image width and height not flex basis. Another approach I can try is use GetSize in the measure function instead of calculating size from image load and perhaps the fluctuation would get resolved.

@sobitneupane I have revised proposal. The root cause for the flicker is the android native is using expo-image component and the imagecomponent after call to onLoad is already calculating the image aspect ratio but then the call to onMeasure calls updateImageSize which calls setImageDimensions which causes re-render and the aspect ratio is re-calculated based on thumbnail dimensions. The effective approach is to use useRef instead of setState for setImageDimensions.

Let us know what you think about that RCA @sobitneupane!

Thanks for the update @jsdev2547.
But the proposed change has some glitch. The size of the thumbnail changes on opening the chat and on uploading new attachment.
https://github.com/Expensify/App/assets/25876548/5c0e8f71-4a1e-47b8-bf70-6b45528482f6

@sobitneupane The thumbnail size is initially set to 200 after the image has been loaded the correct image size is loaded which is why the thumbnail is resized. I checked and the thumbnail is also resizing on staging so the thumbnail resizing is unrelated to the proposed solution.
poc.webm
The thumbnail resizing issue is separate from the flickering but the resizing issue can also be addressed but displaying loading indicator while the image size is getting calculated and only display the image once the correct image size is available.
Please confirm if the thumbnail resizing issue should also be addressed along with flickering issue.

The thumbnail size is initially set to 200 after the image has been loaded the correct image size is loaded which is why the thumbnail is resized. I checked and the thumbnail is also resizing on staging so the thumbnail resizing is unrelated to the proposed solution.

My bad. I was also able to reproduce the issue in staging IOS/native and Web.

Please confirm if the thumbnail resizing issue should also be addressed along with flickering issue.

@jsdev2547 Yep. It would be great if we can also address the thumbnail resizing issue.

The thumbnail resizing issue is separate from the flickering but the resizing issue can also be addressed by displaying loading indicator instead of the initial placeholder image of default width and height. The Image thumbnail is displayed after the image is loaded.

I am not sure if it looks better with loading indicator or not.

Issue not reproducible during KI retests. (First week)

@sobitneupane I have attached poc using loading indicator. The flickering and the resizing issue is resolved.
android-poc.webm

@sobitneupane I have attached poc using loading indicator. The flickering and the resizing issue is resolved.
android-poc.webm

@sobitneupane I have attached poc using loading indicator. The flickering and the resizing issue is resolved.
android-poc.webm

I'm not really a big fan of the loading indicators that get replaced with the thumbnail, tbh. What do you think, @sobitneupane?

I agree @trjExpensify. I also don't think we should go with loading indicator.
@jsdev2547 As you can easily notice in the following video, your proposed change will make thumbnail with default Width more distinct. Also, on uploading a new image, it would remain in the default size until the screen is refreshed.

Before
After

@sobitneupane I have revised proposal and instead of adding useRef in the thumbnailImage component, I have added useRef in the android Image component BaseImage.native.tsx. Adding useRef in thumbnailImage was making the default width more distinct and the resizing issue more visible. Adding useRef in BaseImage.native component does not add on further delay to resizing issue and also does not have any impact on uploading new attachments and also resolves the flickering.
I have added video of the revised proposal and also branch for testing,
android-poc.webm
Please test using the branch. As for the resizing issue, need to discuss if the issue is still notable and requires to be addressed after adding useRef in BaseImage.native component. Some options to address resizing issue, currently when the user uploads attachment, the chat report displays "Uploading attachment...", similarly when the image size is getting calculated, the chat report could display "Loading attachment...", or use placeholder image which is replaced by the thumbnail after the image size is calculated.

Issue not reproducible during KI retests. (Second week)

Thanks for the proposal @jsdev2547
Your latest proposal looks good. But let's make sure it doesn't cause any regression by testing all the components using BaseImage.
🎀 👀 🎀 C+ reviewed

@srikarparsi I was able to reproduce with the steps in issue body. Is it not reproducible any longer? I might have tested in older version. I will retest in latest main and update here asap.

@srikarparsi The issue is still reproducible with the steps in issue body.
https://github.com/Expensify/App/assets/25876548/26e00ac9-5def-4b91-8859-1622e3fda25d

Ah got it thank you, I thought the focus shifted to the images resizing but see that that was a byproduct of one of the fixes. @jsdev2547's proposal looks good to me as well.

@sobitneupane Thanks for the review. I have PR(https://github.com/Expensify/App/pull/38766) ready for review.

Hi @sobitneupane and @jsdev2547, QA reported that they are still able to reproduce the issue. Can you please take a look into it when you get a chance.

@sobitneupane I have tested on main and not getting any flickers.
android.webm

👋 checklist time, @sobitneupane!

[ ]  [@sobitneupane] The PR that introduced the bug has been identified. Link to the PR:

https://github.com/Expensify/App/pull/18485

[ ]  [@sobitneupane] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake. Link to comment:

https://github.com/Expensify/App/pull/18485#issuecomment-2049300608

[ ]  [@sobitneupane] Determine if we should create a regression test for this bug.

Yes.

[ ]  [@sobitneupane] If we decide to create a regression test for the bug, please propose the regression test steps to ensure the same bug will not reach production again.

Regression Test Proposal:

Go to any chat and upload pdf/image with width much larger than height.
Verify the pdf thumbnail/image does not flicker in Android/native.

Do we agree 👍 or 👎

Thanks! As it's quite the edge case, I'm down to not a regression test for it.
Payment summary as follows:

$500 to @sobitneupane for the C+ review (go ahead and submit)
$500 to @jsdev2547 for the fix.

@jsdev2547 an offer wasn't sent, so can you confirm your Upwork handle?

@trjExpensify Please check, I did receive offer (https://github.com/Expensify/App/issues/34520#issuecomment-2010595315)

@trjExpensify I accepted the offer, need to process payment.

$500 approved for @sobitneupane


Want to use【Plugin.TableOfContents()】, but it's not working.

Thank you for developing the Quartz project, I really enjoy it.
However, I encountered difficulties when adding plugins. I want to use 【Plugin.TableOfContents()】, and I updated it in the 【quartz.config.ts】 file as 【Plugin.TableOfContents({maxDepth: 3, minEntries: 1, showByDefault: true, collapseByDefault: false}),】.

However, the TOC still doesn't display on the webpage. Could you please advise me on how to adjust it?

I sincerely appreciate your assistance.

your screen might be too small to display the left + right sidebars, if you zoom out a little it should appear
this is a problem but I'm closing to reduce duplicates (see https://github.com/jackyzha0/quartz/issues/455)


Error message when running Chameleon

An error message related to Internet Explorer not being initialized prior to running Chameleon was thrown.
After opening Internet Explorer and clicking the default settings, Chameleon ran fine.
This can be mitigated by providing a parameter for one of the API calling methods.

Hi,
Does this script work with Windows 11?  Also, the note above about mitigating by passing a parameter to one of the API methods -- is that already implemented in the script or is that something I should address in my personal copy?


Refactoring for _link_allowed function

Is the high complexity you identified really necessary? Is it possible to split up the code (in the five complex functions you have identified) into smaller units to reduce complexity? If so, how would you go about this? Document your plan.

Looking at the code, we can see that it is structured as a number of if-clauses with conditions a link should follow. If it does not fulfill one of the criteria, the function returns false. One way to split this into blocks would be to divide these if-clauses into categories depending on the condition they test. For example, one could create the categories
*deny or allow url depending on its content

deny or allow domain for the link

Now, we can use this division of the code to create two helper methods, one for each of these cases

check_url - does the checks on the contents of the url compared to the allowed contents
check_domain - does the checks on if the domain is an allowed or denied domain.

We then get the three of the if-clauses from before (checking if the url is valid, if there is any extensions and if the text is restricted), as well as two if statements checking the result of the helper functions.
Then, the complexity is (counted by hand)
M = \pi - s + 2 = 7 - 6 + 2 = 3
which is lower.

Tests of the new helper functions should be added, to make sure they give a correct result. Also, the whole program should be tested, to see that the changes haven't introduced any new bugs.
Lastly, the new methods need to be documented.


[CLOSED] Remove AAIB and DFID importers and tests

 Issue by bestie
Monday 06 October 2014 at 09:51 GMT
Originally opened as https://github.com/alphagov/specialist-publisher/pull/268

These imports have been completed and so the code and tests are no longer
required.
I have a refactor in the works that will break these test and @evilstreak and I agreed it's better to remove code and tests we don't need rather than keep running and maintaining them.

bestie included the following code: https://github.com/alphagov/specialist-publisher/pull/268/commits

 Comment by evilstreak
Monday 06 October 2014 at 09:53 GMT

:+1: As noted in the description, I approve of this. I'll leave it to someone else to have a reckon and hit merge.

 Comment by kalleth
Monday 06 October 2014 at 09:55 GMT

:+1:


MSEARCH-661: Add instance search by normalized LCCN

Purpose
Add query search option that search instances by normalized LCCN
Approach

add new search option called LCCN
normalize LCCN: trim leading and trailing whitespaces, lowercase, allow leading and trailing whitespaces, match with just numbers
search 010 $a

Changes Checklist

[ ] API Changes: Document any API paths, methods, request or response bodies changed, added, or removed.
[ ] Database Schema Changes: Indicate any database schema changes and their impact. Confirm that migration scripts were created.
[ ] Interface Version Changes: Indicate any changes to interface versions.
[ ] Interface Dependencies: Document added or removed dependencies.
[ ] Permissions: Document any changes to permissions.
[ ] Logging: Confirm that logging is appropriately handled.
[x] Unit Testing: Confirm that changed classes were covered by unit tests.
[x] Integration Testing: Confirm that changed logic was covered by integration tests.
[ ] Manual Testing: Confirm that changes were tested on local or dev environment.
[x] NEWS: Confirm that the NEWS file is updated with relevant information about the changes made in this pull request.

Related Issues
MSEARCH-661

Could you please include changes from https://github.com/folio-org/mod-search/pull/494


.ttf fonts not working with compressed pdf on Safari browser.

Hey everyone!
I'm using the librery for a Angular proyect and it's works fantastic. However, I'm having a weird problem when I try to use embedded fonts and compressed pfd on Safari (only here). The result is a pdf with strange caracters :(
The strange thing is that if the pdf is not compressed, it's works good!
Here some stuffs to get context:

Installed jsPDF by npm
Angular 8
Code use:

import jsPDF from 'jspdf';
import RobotoRegularFont from '../../../assets/fonts/Roboto/Roboto-Regular.ttf';
... // other code
generateAndDownloadPDF() {
   const doc = new jsPDF('p', 'mm', 'a4', true);
   doc.addFont(RobotoRegularFont, 'Roboto', 'normal');
   // other code
   doc.setFont('Roboto');
   // other code
  doc.save('export.pdf');
}

Before using this code I tryed with the exaple on the README.md but had the same problem.
The fonts works for all browsers and differents SO in compress mode except Safari.
Any thought what can be happening?
Thanks :)

Thanks for the report. Duplicate of #2743. There is already a fix under way: #2944.


configfile difficult to use

Like Xsp4 it's possible to add command line options into a configuration file.
This is good when using Systemd as systemctl daemon-reload is then not necessary as editing command line options in hyperfastcgi.service is then not needed.
However, the configfile is a little different to Xsp4's.
In fact all the properties need to be present, and a null xml file needed if not using appconfigfile and appconfigdir. Furthermore, the Type of the property needs to be included.
Here is an example
<?xml version="1.0" encoding="UTF-8" ?>
<Settings>
    <!-- It is necessary to include all the Options -->
	<Setting Name="applications"  Type="string" Value="/:/var/www" />
	<Setting Name="logfile"       Type="string" Value="/var/log/hyperfastcgi/hfc.log" />
	<Setting Name="loglevels"     Type="string" Value="All" />
	<Setting Name="printlog"      Type="Bool"   Value="True" />
	<Setting Name="verbose"       Type="Bool"   Value="True" />
	<Setting Name="root"          Type="string" Value="/var/www" />
	<Setting Name="socket"        Type="string" Value="tcp:<IP_ADDRESS>:9020" />
	<Setting Name="appconfigfile" Type="string" Value="/etc/hyperfastcgi/nullxmlfile.config" />
	<Setting Name="appconfigdir"  Type="string" Value="/etc/hyperfastcgi/nullxmlfile.config" />
	<Setting Name="stoppable"     Type="Bool"   Value="True" />
</Settings>

I'm sorry if I've missed mention of this in your documentation/ I'm sure this isn't mentioned.
If I'm right, perhaps you'd like to include something similar.
If it's something you weren't intending to support, do please ignore my comments.
Thanks very much for this interesting alternative to fastcgi-mono-server.

There is already config file which supports most of the command line options. How to use it with descriptions of all config options you can find in README.md. Also you can look at config samples, and sample scripts for ubuntu init.d, systemd and upstart


Support for library mode

This turned out to be far simpler to implement than I expected, despite the crazy large diff (mostly spec updates)
:package: Changes

Added --mode library
Moved TypeScript to a peer dependency
Renamed modules to namespaces and external modules to modules

:rocket: Try it out
The changes in this PR have been published as typedoc@next. You can install it and try it out with:
npm install typedoc@next typescript
npx typedoc --mode library --out docs src/index.ts

📚 Library Mode
This is the flagship feature for 0.170.18. With this mode, TypeDoc will take each of the specified input files and generate documentation for that input file as one module. It will resolve any re-exports of that module and treat them as if they were declared in that file. Note that if you have multiple entry points that export the same symbol from a helper file, this will result in multiple copies of that symbol in your documentation
Note that input files are still expanded before conversion. If you specify a directory, every file in that directory and subdirectories will be treated as a library entry point.
🔓 TypeScript Peer Dependency (shipped in 0.17)
TypeDoc has kept TypeScript as a dependency for a long time. The cited reason for this is that the project uses internal compiler APIs that any new version of TypeScript could break.
However, in practice, the internal APIs that TypeDoc uses have remained stable since I first started working on the project over a year ago. In addition to this, many TypeDoc users hacked around TypeDoc's strict version limitations by removing TypeScript from TypeDoc's node_modules folder.
TypeDoc still uses internal APIs. I expect it will break with some future version of TypeScript, but giving users the ability to use a newer TS version is a good thing. For now, the peer dependency will require at least the minor version of TypeScript kept in TypeDoc's dev dependencies.
➡ Renamed External Modules (shipped in 0.17)
"External Modules" have been renamed to be properly called "Modules", and the legacy "Modules" have been renamed to "Namespaces". This is a major breaking change for plugins and themes with custom CSS, but has been overdue for a long time.
❓ Unresolved Questions

For library mode, if there is only one entry point, should the module be removed and all reflections be present in the root reflection? (This would look like --mode file but with exports from the entry point only)
The way library mode works makes it behave as if --excludeNotExported was set, does this make sense? I think it does... Should library mode remove the only exported checkbox in the generated docs?

Closes #109
Closes #639
Closes #880

After some more thought... This is the best I've come up with. TypeDoc doesn't have a way to describe a symbol that exists but is only exported under a different name, and I'm loath to add one. It doesn't fit with the rest of the architecture, and I'm not ready to rebuild the models yet (though I really want to! The inheritance doesn't make sense in many cases)
If a name is exported more than once, one export should be chosen as canonical and all other references to that symbol should be created as references. The canonical name should be taken from the first point that applies:

The symbol is directly exported from an entry point under its local name (defined in that file and exported there)
The symbol is re-exported from an entry point under its local name. If it is re-exported under the same name from multiple entry points, arbitrarily pick one (I'm not sure there is value in defining some process here, maybe earlier entry points should be preferred?)
The symbol is directly exported from an entry point under a different name (export { a as b }).
The symbol is re-exported from an entry point under a different name (export { a as Canonical } from 'f' or export { default as Canonical } from 'f'
The symbol is exported as default - only in this case will there be no documentation available with a different name for the symbol than default.

Thoughts?

If at the end the final exported names are correct in each file it is ok.
It will reduce the number of references.
Le dim. 2 févr. 2020 à 20:58, Gerrit Birkeland<EMAIL_ADDRESS>a
écrit :

After some more thought... This is the best I've come up with. TypeDoc
doesn't have a way to describe a symbol that exists but is only exported
under a different name, and I'm loath to add one. It doesn't fit with the
rest of the architecture, and I'm not ready to rebuild the models yet
(though I really want to! The inheritance doesn't make sense in many cases)
If a name is exported more than once, one export should be chosen as
canonical and all other references to that symbol should be created as
references. The canonical name should be taken from the first point that
applies:

The symbol is directly exported from an entry point under its local
name (defined in that file and exported there)
The symbol is re-exported from an entry point under its local name.
If it is re-exported under the same name from multiple entry points,
arbitrarily pick one (I'm not sure there is value in defining some process
here, maybe earlier entry points should be preferred?)
The symbol is directly exported from an entry point under a
different name (export { a as b }).
The symbol is re-exported from an entry point under a different
name (export { a as Canonical } from 'f' or export { default as
Canonical } from 'f'
The symbol is exported as default - only in this case will there be
no documentation available with a different name for the symbol than
default.

Thoughts?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/TypeStrong/typedoc/pull/1184?email_source=notifications&email_token=ABIKMMK2F32TTKL57DSQMFLRA4QYDA5CNFSM4KIWC33KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKR7OVA#issuecomment-581171028,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABIKMMLBZ72S4AQNSP5MXBLRA4QYDANCNFSM4KIWC33A
.

This does not seem to work if I specify --theme minimal? (TypeDoc 0.17.0-3)

I'd continue to work on my PR #1196 and it seems correct now
My fork module is also available in @paztis/typedoc over npm (https://www.npmjs.com/package/@paztis/typedoc).
You can try if you want.
On my side it covers all my needs now. It may covers also yours.
Can you check at it ?

@Gerrit0 I'm a huge fan of the naming adjustments for namespaces but have another nuance that might be interesting to consider:

Exported symbols that are both namespaces and interfaces

Suppose you want to define an RPC Transport interface, you might have an interface like:
/**
 * The interface for rpc-compatible transports.
 */
interface Transport {
    /**
     * Dispose of this transport and free any allocated resources.
     */
    dispose(): void;
    /**
     * Register a RPC message listener with the transport
     *
     * @param handler A handler function to be called with each RPC message received from a peer
     */
    onMessage(handler: (msg: unknown[]) => void): {
        dispose(): void;
    };
    /**
     * Send an RPC message to the peer over this transport
     *
     * @param msg The array-encoded message that should be sent to the peer over the transport
     * @param transfer An optional array of objects that should be marked as transferrable when the transport supports it
     */
    sendMessage(msg: unknown[], transfer?: unknown[]): void;
}

However, your library already provides ready-made factories for common Transports, so you throw those in a namespace sharing the name with the interface:
declare namespace Transport {
    function fromNodeMessagePort(port: import("worker_threads").MessagePort): Transport;
    function fromDomWorker(worker: Worker): Transport;
    function fromDomMessagePort(port: MessagePort): Transport;
}

Now, typedoc will consider Transport a namespace that happens to have both functions and methods and will totally drop the fact that there is an exported interface:

I hope that this is something that you might consider addressing as well! ❤

Hello! I appreciate this PR as it could be more suitable for my use case. However, I have a request for the navigation sidebar.
Let's say I have this test library at https://github.com/MoeLava/typedoc-lib-test to generate docs for. Currently, it looks like

but would it be possible to make it look something like

instead?

Quick note on progress here - There are still several issues with the implementation here that I want to address. Some have been mostly addressed by @paztis's work in #1196, but not all the edge cases that I want to cover before a full release. I hope to have some time in a couple weeks to spend a few days on this and get it wrapped up. This PR is being rescheduled for 0.18.
Some of the changes in this PR will be cherry picked to master for a 0.17 release that upgrades TS to 3.8. These are:

--disableSources
--gitRemote
TS as a peer dependency
Check compilation errors before converting
Support for [[`link`]] style links

Library mode is coming eventually... I just need to find a few days to concentrate on it.

@ggoodman TypeDoc's declaration merging has some issues, I think that's a bit out of scope for what I'm trying to do here, but please feel free to open an issue to discuss it. I think it would be a good change (The only merging that makes sense to me is merging multiple interfaces or namespaces of the same name or a namespace + class of the same name. Merging interfaces and namespaces seems like a disaster waiting to happen)
@MoeLava that's a tricky change. How would we tell how far to expand containers? In this case the expanded docs are clearly more useful, but what if each of those namespace had 50 members instead of 2? I don't really want to define some arbitrary nesting level that effects the output... (apparently there is some hard coded limit with 9 members in the TOC already that I didn't know about until recently)
I think a better solution might be a collapsible TOC. There could be an option --tocExpandThreshold to govern how many children should cause the parent to be collapsed or open by default... that said, I think that is also probably a separate issue.
PS: You might want to try changing your docs command to typedoc --out docs src/index.ts --mode library

First off, this has been a great thread to read through - thanks for all the hard work on this project.
I'm just getting started with TypeDoc and trying out library mode but I'm running into an issue with the display of imported types. The interface declaration is missing, but the annotations on those types are being documented. The types are imported from a private TypeScript package shared between internal projects.
I'm not sure if it exactly relates to any of the issues discussed here thus far but here goes:
Here's a structural example of the project I want documenting and the dependency:
Project I want documenting
// (myFile.ts)
import { TypeGroupA } from 'sharedTypes'
export { TypeGroupA }

export class MyClass {
  public myFunc(): TypeGroupA.Details {
    // do something that returns TypeGroupA.Details
  }
}

In 'sharedTypes' dependency
// (index.ts)
export { TypeGroupA, TypeGroupB, TypeGroupC } from './typegroup1';
export { TypeGroupD } from './typegroup2';

// (typegroup1.ts)
import * as TypeGroupA from './typegroupa';
import * as TypeGroupB from './typegroupb';
import * as TypeGroupC from './typegroupc';

export {
  TypeGroupA,
  TypeGroupB,
  TypeGroupC
};

// (typegroupa.ts)
/**
* Interface description
**/
export interface Details {
  name: string;
  iq: number;
}

Now, strangely in the generated TSDoc I see the comment of the interface, but not the interface itself...

Seems like if it gets that far it should be displaying the interface types... a bug something I'm doing?

I should add that navigating to file:///.../docs/interfaces/ does display all of the expected interfaces as separate html files. Indeed they are even displayed with a hierarchy when clicked (if they are extensions of other interfaces), but no details for any.

Hey, great PR! I've tried this mode with tsdoc@next and can give you some feedback on it!
Here is my typedoc.json
{
  "inputFiles": ["./src/index.ts"],
  "out": "docs/",
  "mode": "library",
  "theme": "minimal",
  "excludeNotExported": true,
  "excludeExternals": true
}

And my structure is like this:
// index.ts

export * from './collision/ObjectCollisionMatrix'
export * from './collision/AABB'
export * from './collision/ArrayCollisionMatrix'
export * from './collision/Broadphase'
export * from './collision/GridBroadphase'
// ...

// ./collision/AABB.ts

/**
 * Axis aligned bounding box class.
 * @class AABB
 * @constructor
 * @param {Object} [options]
 * ...
 */
export class AABB {
  // ...
}

And so on.
However in the index, I still see the modules:

And I would like to see just the classes, something like this

If you want to see the full implementation see https://github.com/react-spring/cannon-es/pull/14
Hope this helps wit this PR, thanks for your work @Gerrit0!

@rubengmurray Definitely a bug! I'll add this to my test cases.
@marcofugaro That's really weird, I'll take a look at that too.
Unfortunately I haven't had much time to work on this since the last update, there are major issues with the existing implementation that seem to get worse the more I look at them... I'm going to try another approach which will hopefully fix them.

@Gerrit0 Do you nee help in getting this through?
It would amazing to have this on typedoc.

It's coming along, unfortunately I'm really busy finishing up last semester of college right now so I don't have much time to work on it. The implementation in this PR is also not going to work - it gives okay results, but has major issues that can't be fixed with the current converter architecture. I've made a list in https://github.com/TypeStrong/typedoc/issues/1266 on what needs to be done for this to be released.
Unfortunately I haven't spent much time separating out discrete tasks, so I can't really point you toward something that can be done independently.

Hey, thanks for this PR :smile:
I'm using<EMAIL_ADDRESS>and<EMAIL_ADDRESS>and no problems so far.
I run typedoc throught "docs": "typedoc --out docs --mode library src/index.ts" script in package.json
And it's working as expected

The implementation in this PR is also not going to work - it gives okay results, but has major issues that can't be fixed with the current converter architecture.

The output from library mode is so much better for my project that I intend to switch my docgen to use it.  I understand that this implementation is dead, but it just makes so much more sense!    I will probably be implementing a much simpler plugin that shows only whitelisted symbols in the groups and toc on the index page.

Have you try my version (https://www.npmjs.com/package/@paztis/typedoc) ? I've start from the feat/639 branch to improve the library mode. I've also an open PR over the project to merge it.

Hey everyone, I just wanted to thank everyone involved, you're doing fantastic and much-needed work!
I'm migrating date-fns to TypeScript and TypeDoc (I use it to generate JSON and then load to the database) is a lifesaver!

The implementation in this PR is also not going to work - it gives okay results, but has major issues that can't be fixed with the current converter architecture.

The output from library mode is so much better for my project that I intend to switch my docgen to use it. I understand that this implementation is dead, but it just makes so much more sense!

:+1: to this. I help maintain a huge monorepo project (with 85 packages, if you can believe it), and our existing typedoc-based API docs have been somewhere in between bad and useless. This is largely due to the fact that we've essentially been stuck with generating the docs for each package independently.
I've been playing around with library mode, and it has been a breath of fresh air. Now we get a unified API doc build, one in which the monorepo packages actually cross-reference each other (with working hyperlinks and everything!), and in which I don't have to handroll a janky static index.html to serve as a TOC.
So I think we too will be switching our docgen over to library mode as implemented in this PR (we already have a PR started for this at jupyterlab/jupyterlab#8320). @Gerrit0 If there's anything I can do to help pitch in and push library mode out the door (eg testing, "good first issue" PRs, etc), please let me know

That's awesome to hear @telamonian! I didn't know Jupyterlab used TypeDoc.
The main issues with this implementation are:

Models are built up piecemeal. TypeDoc historically has built docs by visiting nodes on the AST provided by TS. This causes several problems.  This sometimes results in documentation which is just... wrong, which is worse than no documentation to begin with.
Partially due to 1, TypeDoc cannot even begin to deal with complex import/exports. If you have circularity in imports, we will completely miss exported members.

The main issue with my attempt at solving this... is that I am really bad at saying no to scope creep. I'm slowly getting better here...
To fix the first issue we really need to revisit the models themselves. After discussion in #1244, I've come to the conclusion that TypeDoc shouldn't do it at all, instead producing 2+ declarations (with the exception of namespace + namespace, interface + interface, and interface + class)
Today, basically all the models are instances of DeclarationReflection, which contains a ton of extra properties that don't make sense on all members (For example, why can an enum member have call signatures)... giving each logical part of a program its own model will force fixing the first issue, so I decided to do it...
Once each part of a program had its own model, the converters had to be updated to use them. This mostly wasn't too bad. I've rebuilt almost all of the converters.
I also had to update the serializers for JSON output to work with the new models, but that wasn't too bad... I increased coupling a bit by moving serialization partially back into the models, but it's easier to follow what's going on there now.
What I hadn't foreseen and what's become the biggest time sink here is that the current themes are incredibly tied to the old models. They simply don't work with the new models. I tried updating the handlebars themes to work with this, but soon realized that missing out on the type info on what is available for each model was going to make this take ages... so I decided to start from scratch, building the rendered HTML with Preact (Didn't use React because Preact is smaller, and I'm not using anything fancy anyways)... did I say I'm bad with scope creep? Yea... I also decided to pull #1292 in and have spent a weekend and a half working on getting that working with support for specifying both light and dark themes (The Rust docs made me jealous)...
TLDR, this attempt basically turned into a full rewrite of TypeDoc, which like all rewrites doesn't support everything the original did. My current todo list (partially collected from scattered todo comments):

[ ] Support JS users using module.exports, global files source (smallish, shouldn't be too hard if familiar with the TS api)
[ ] Finish Object reflections in the converter (medium)
[ ] Fix converter for destructured exports. (smallish)
[ ] Take a look at existing plugins to see what events they use, if the existing emitted events meet those needs, or if we need other events. (medium)
[ ] Add indexed signatures to models that can have them. I forgot they existed when rebuilding the models... (medium)
[ ] Get highlighting working. This means let the user pick a dark and light theme to highlight code with, and generate HTML which uses CSS variables to set the color, so that it switches correctly. (I thought this was going to be easy, turned out to be hard, what I'm currently working on)
[ ] Correctly handle multiple entry points, producing re-exports when appropriate to avoid duplicating documentation. (I have the process this should follow written out somewhere... have thought about it a fair bit)
[ ] Fix {@link} and [[link]] (medium)
[ ] Merge the class and interface converters. There's a fair bit of duplicate code (fairly small)
[ ] Figure out how @event should work now that the models accurately represent the source and we can't just set the kind to ReflectionKind.Event
[ ] Fix the source reference plugin to get links relative to the root dir (small)
[ ] Add a log level flag so that verbose messages aren't printed by default (small)
[ ] Finish rebuilding the theme (much larger than I expected... and I am quite out of practice with this frontend work...)

[ ] Support hideGenerator flag (small)
[ ] Make overriding templates easy for users (???)
[ ] Write docs on how to do this (small-medium)
[ ] Talk with the people that built the markdown plugin about how to integrate. (not sure how much this will take, I don't like breaking people... but I have REALLY done it this time)
[ ] Make @category group reflections on the page by category (medium)
[ ] Display a page index for documented items on that page (smallish, dependent on previous)
[ ] Support for the media://file and [[include:file]] (small)

[ ] Review the existing tests. They're currently broken on the branch. I think the serialization tests can mostly just be rebuilt, but want to look more closely at them.
[ ] Create a rendered test with the new theme + minimal theme. The rendered tests might be something that can be simplified with Cypress or some such tool (???)
[ ] Write "how to build a TypeDoc plugin" (medium, going to use the sources plugin as an example most likely)
[ ] Update the development page on the website (medium)
[ ] Update plugins that were broken when rebuilding converters

[ ] Decorator plugin (medium)
[ ] Implements plugin (medium)
[ ] Deep comment plugin (small, probably merge with the existing comment plugin)

[ ] Test on a bunch of different projects, particularly large ones. (Apache Arrow, Jupyterlab) (??? depends on what issues are found)
[ ] Upgrade fs-extra, bump minimum node version to node 10 (tiny)
[ ] Rename inputFiles to entryPoints (breaking everything anyways, might as well make names make sense, small)
[ ] Review existing options to see which ones still make sense.

Stretch goals I want but am not going to delay a release over:

[ ] Highlight headings according to the color scheme chosen by users, not just code snippets (medium? Tricky. I spent a few hours on it, failed)
[ ] Switch to ESLint. TSLint is unsupported. (smallish? I haven't done it before)
[ ] Add a reflection for "union enums" https://github.com/microsoft/tsdoc/issues/164

So.. yea. Lots to do yet. If you (or anyone!) wants to help, please feel free to take any of the items on the above list and send a PR towards the library-mode branch. It definitely isn't ready as a beta, or even an alpha on npm... but I think the hardest parts have been done.

After spending an hour or so going through issues today I realized this probably can't be the next minor release. I'm going to keep working on it, but there are other bugs that I don't want to force people to wait until this is done to have fixed.... in fact, I'm going to call this a goal for 1.0. With the architecture changes that have been made, I think a stable API is much more possible.

Library mode was working magnificently for me. Is there an npm package or version that I can freeze to until this is merged? Typedoc isn't really useful for my libraries without it, but is extremely useful with it.

Pinning the version to 0.17.0-3 will let you keep using the existing implementation.

@Gerrit0 Just to let you know, jupyterlab has pinned to 0.17.0-3 and is still using library mode for our API docs. And they are spectacular (or at least much better than they were previously). Thanks for all the great work on this so far!

I just want to +1 this effort. It's the only mode that makes any sense to me. There's still a few minor issues - but overall it documents things in a way that is clear for consumers of our library, AND for devs of the library, and doesn't really require any extra plugins and doc tags to get it working as expected.

Thanks for the feedback! I'm glad it has been useful.
I just realized today that typedoc.org has been pointing people to this PR, which won't be merged. There is a beta up for TypeDoc 0.20 which acts as described in this PR (the mode option was removed, so I can't really call it library mode) See #1364 for updates on that.


Different listener in the same Gateway shouldn't have the same name

Description:

What issue is being seen? Describe what should be happening instead of
the bug, for example: Envoy should not crash, the expected value isn't
returned, etc.

According to https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.Listener

Name is the name of the Listener. This name MUST be unique within a Gateway.

However, it seems eg doesn't check the name currently.
Repro steps:

Include sample requests, environment, etc. All data and inputs
required to reproduce the bug.

Note: If there are privacy concerns, sanitize the data prior to
sharing.

A configuration like this can be accepted and generate (sometimes incorrect) xDS:
  kind: Gateway
  metadata:
    namespace: envoy-gateway
    name: gateway-1
  spec:
    gatewayClassName: envoy-gateway-class
    listeners:
    - name: http-1
      protocol: HTTP
      port: 8080
    - name: http-1
      protocol: HTTP
      port: 80

Environment:

Include the environment like gateway version, envoy version and so on.

The latest gateway
Logs:

Include the access logs and the Envoy logs.

good catch @muyuan0, can you raise this issue upstream, imo this should be fixed in the validation webhook https://github.com/kubernetes-sigs/gateway-api/blob/20be22d3a2976374772170a6a55a9c8228d1e8c8/apis/v1beta1/validation/gateway.go

good catch @muyuan0, can you raise this issue upstream, imo this should be fixed in the validation webhook<EMAIL_ADDRESS>
Done

Solved on the upstream.


[Add] Mind-blowing Social media buttons

Details
I Want To Add Social Media Animation Button.
Screenshots

https://github.com/Spyware007/Animating-Buttons/assets/111825539/73059259-b4ef-49fe-a3b6-f03c60c79e64
Type of Contribution

[ ] Update to an existing Animated Button
[X] Adding a new Button
[ ] Resolving a bug
[ ] Proposal to the Repository
[ ] Changes related to documentation or README.md
[ ] Other Changes

Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I am willing to work on this issue
[X] I am a GSSoC'23 contributor

please assign me the issue and add the Level batch.
So, I can add the button and raise the Pull request.. 🙏🏻

Please check #1346


WIP - Refactor application route mixin

This completely messes up the tests. Not sure why at the moment.

I can't really get my head around how I'm supposed to check that the function has been called now that it's not a part of route object.

Let's spend some time on this together next week. The tests are super complex with all the sinon and actually pretty brittle as well 😞

I'm closing this – we'll re-address the topic differently with decorators in the future.


Option to store raw(encoded) pixels to Image

It would be nice to add an option not decoding pixels(e.g. jpg/png) during glTF parsing for example faster glTF parsing.
For that purpose, easiest way is add an option something raw or undecoded flag to Image.

as_is frag approach looks working well, so close the issue.


systemd watchdog does not work by default in NixOS

Describe the bug
When maestral is configured as a systemd (user) service in NixOS by translating from the suggested unit file, maestral daemon crashes every 30 seconds with SIGABRT, in particular:
(long backtrace omitted)
Oct 26 18:38:41 nyc systemd[2776]: maestral.service: Failed with result 'watchdog'.
Oct 26 18:38:42 nyc systemd[2776]: maestral.service: Scheduled restart job, restart counter is at 3.

To Reproduce
Use the following NixOS module to configure maestral:
{ config, pkgs, ... }: {
  # https://maestral.app/docs/autostart
  systemd.user.services.maestral = {
    description = "Maestral daemon";
    wantedBy = [ "default.target" ];
    script = "${pkgs.maestral}/bin/maestral start -f";
    preStop = "${pkgs.maestral}/bin/maestral stop";
    onFailure = [<EMAIL_ADDRESS>];

    unitConfig.ConditionUser = "!@system";

    serviceConfig = {
      Type = "notify";
      NotifyAccess = "all";
      WatchdogSec = "30s";
      PrivateTmp = true;
      ProtectSystem = "full";
      Restart = "always";
    };
  };
}

Expected behaviour
Maestral daemon should start and run for a long time.
System:

Maestral version: 1.7.2
Python version: 3.10.13
OS: NixOS
Desktop environment: N/A, not using GUI
PyQt version (for Linux GUI): N/A, not using GUI

Additional context
I believe this is due to the fact that IS_WATCHDOG (daemon.py) is set by checking for WATCHDOG_PID to match the PID of the Python interpreter's process.  However, in NixOS, systemd ExecStart/ExecStop and similar commands are bash scripts, meaning that the "main process" PID does not match the maestral process's PID.
This can be worked around by changing the script and preStop attributes to use exec, like so:
{ config, pkgs, ... }: {
  # https://maestral.app/docs/autostart
  systemd.user.services.maestral = {
    description = "Maestral daemon";
    wantedBy = [ "default.target" ];
    script = "exec ${pkgs.maestral}/bin/maestral start -f";
    preStop = "exec ${pkgs.maestral}/bin/maestral stop";
    onFailure = [<EMAIL_ADDRESS>];

    unitConfig.ConditionUser = "!@system";

    serviceConfig = {
      Type = "notify";
      NotifyAccess = "all";
      WatchdogSec = "30s";
      PrivateTmp = true;
      ProtectSystem = "full";
      Restart = "always";
    };
  };
}

This was pretty tricky to debug, though.  I'm not sure why Maestral checks for the WATCHDOG_PID value to equal the output of getpid, but if that's for a good reason, it might be worth dropping a note in Maestral's documentation to use exec on NixOS.

Thanks for the detailed writeup!
The reason why daemon.py checks for WATCHDOG_PID comes from the systemd documentation at https://www.freedesktop.org/software/systemd/man/latest/sd_watchdog_enabled.html:

If the $WATCHDOG_USEC environment variable is set, and the $WATCHDOG_PID variable is unset or set to the PID of the current process, the service manager expects notifications from this process.

It ensures that $WATCHDOG_USEC was not set accidentally or from some parent process which handles notifications for us, but that notifications are actually expected from Maestral's process itself.

However, in NixOS, systemd ExecStart/ExecStop and similar commands are bash scripts, meaning that the "main process" PID does not match the maestral process's PID.

Huh, does this mean that ExecStart actually spawns a subprocess for the daemon? Or does it mess around with environment variables? I'm just curious how WATCHDOG_PID ends up having an incorrect value (notifications will still be sent if it's unset).

It ensures that $WATCHDOG_USEC was not set accidentally or from some parent process which handles notifications for us, but that notifications are actually expected from Maestral's process itself.

Makes sense, I am not familiar with the standard but I don't suggest deviating from it.

However, in NixOS, systemd ExecStart/ExecStop and similar commands are bash scripts, meaning that the "main process" PID does not match the maestral process's PID.

Huh, does this mean that ExecStart actually spawns a subprocess for the daemon? Or does it mess around with environment variables? I'm just curious how WATCHDOG_PID ends up having an incorrect value (notifications will still be sent if it's unset).

Yes, it spawns a subprocess, implicitly: the ExecStart command line is written to a bash script on disk (in the nix store) and the systemd unit file references the path to the bash script.  So the WATCHDOG_PID ends up being set to the pid of the bash process (the parent process), instead of the maestral process (child process).

I see, thanks for the info! Closing this as "won't fix" for now since this should ideally be addressed not on the Maestral side.


Books may be added via ISBN lookup

Quasi-done as of d382b6e03ec9969a8781b0d3df74af4773c129d9. There could be some significant improvements to parsing and books are not inserted into the DB yet.

We can also now ingest books with both ISBN-10 and ISBN-13 numbers (finally), see aab1fd9b545fbdc937885c1ddadb833af386d50b.


[TH2-1873] Added the ability to handle actions from the root window

Merged as part: https://github.com/th2-net/remotehand/pull/35


publish container images to ghcr.io

I looked into https://hub.docker.com/r/lycheeverse/lychee/tags and I didn't find any versioning that I can depend on.
I would like to have a container image carrying static lychee executable and whose tag is synced with lychee version released on GitHub. As of now, docker images are not tagged with new lychee version.
For example, we have 0.14.3 tag in GitHub releases but I don't have the image with that tag on DockerHub.
I think, we can create a workflow that will be executable once we cut a new release by pushing a tag. This workflow will build the container image in CI and then push it to ghcr.io or this organization.
Afterwards, we can use the image in a multistage pipeline or even standalone as well (docker run --rm ghcr.io/lycheeverse/lychee .)
I intend to use it in the following manner in a multistage pipeline.
FROM ghcr.io/lycheeverse/lychee:0.14.3 as lychee
COPY --from=lychee /usr/bin/lychee /usr/bin/lychee

Happy to help here.

Sorry, I don't understand what's the advantage of ghcr over Dockerhub. Why do we need both?

As of now, docker images are not tagged with new lychee version.
For example, we have 0.14.3 tag in GitHub releases but I don't have the image with that tag on DockerHub.

That's a bug. I think I'm missing the patch directive in the Docker workflow here:
https://github.com/lycheeverse/lychee/blob/13f4339710d76831d9daf961584d796cee4847d2/.github/workflows/docker.yml#L47-L55
Maybe that's all it takes to fix it.
I intend to use it in the following manner in a multistage pipeline.
FROM ghcr.io/lycheeverse/lychee:0.14.3 as lychee
COPY --from=lychee /usr/bin/lychee /usr/bin/lychee

This should already be possible (if the tag was available).
/tmp ❯❯❯ cat Dockerfile
FROM debian:latest
COPY --from=lycheeverse/lychee /usr/local/bin/lychee /usr/bin/lychee

/tmp ❯❯❯ docker build --tag foo .
[+] Building 0.6s (8/8) FINISHED
...

/tmp ❯❯❯ docker run --entrypoint /usr/bin/lychee foo
error: the following required arguments were not provided:
  <inputs>...

Usage: lychee <inputs>...

For more information, try '--help'.

Note that the path to lychee inside the Docker image is
/usr/local/bin/lychee (not /usr/bin/lychee).

I don't understand what's the advantage of ghcr over Dockerhub. Why do we need both?

We don't need both for sure, I just wanted to depend on ghcr.io for tagging. If the tagging issue is already solved via DockerHub registry then that will be great.
From a project perspective, using ghcr.io registry will allow everyone to run CI on forks otherwise, in current context, I've to change the name of the image in workflow file.
In case of ghcr.io we can use github.actor and more variables related to GitHub.
But I also don't want the project to maintain images in two registries so I'll tagging issue will solve the problem completely.

0.14.3 is out now. I retriggered the pipeline. Don't know why it wasn't triggered before, but it wasn't the tagging. That part works. So we just need to keep an eye out for the next release. Maybe I'm missing a trigger somewhere.
As you said, maintaining two registries would cause some overhead, so I'd prefer to avoid that. 😉
With that, I think we can close this.

@mre @thomas-zahner Thank you for the new release.
I think images for v0.15.0 is missing in the registry.
On DockerHub, I can see that we have latest, master, latest-alpine, master-alpine tag but not the semver tag that one can track with ongoing releases.
I'll take a more deeper look into the pipeline during the weekend and see if I can fix it if it's not fixed already.

@kranurag7, sure, let's look into it. Could you create a new issue, though, as this one is closed? 🙂


Dark mode: basic elements

Description
⚠ Adding color-scheme for a great rendering of basic inputs.
⚠ We could drop all those .text-body classes and some more changes in _reboot.scss to revert once #2313 is merged.
⚠ Need to determine whether the file input is not working from a mistake of us or a browser issue ?
Basic elements in dark mode, by using existing Sass var :

Sass var
Previous value
New value

$pre-color
var(--#{$prefix}pre-color, $gray-900)
var(--#{$prefix}body-color-subtle)

⚠ New CSS var :

CSS var
Light value
Dark value

--bs-body-color-subtle
$gray-900
$gray-300

Links

https://deploy-preview-2355--boosted.netlify.app/docs/5.3/content/reboot
https://deploy-preview-2355--boosted.netlify.app/docs/5.3/content/typography
https://deploy-preview-2355--boosted.netlify.app/docs/5.3/content/images
https://deploy-preview-2355--boosted.netlify.app/docs/5.3/content/figures
https://deploy-preview-2355--boosted.netlify.app/docs/5.3/content/reboot#forms
https://deploy-preview-2355--boosted.netlify.app/docs/5.3/dark-mode/#basic-text-elements
https://deploy-preview-2355--boosted.netlify.app/docs/5.3/dark-mode/#basic-form-elements

Two texts stay black in "Dark theme on component" section:

Note: let's add this use case in the main PR description to dig for a solution or an explanation on browsers side:


RestSharp update 106.5 breaks this package

See https://github.com/restsharp/RestSharp/issues/1198
In PostcodesIO the following error occurs when RestSharp is upgraded from 106.4 to 106.5:
System.MissingMethodException: Method not found: 'Void RestSharp.RestRequest..ctor(System.String, RestSharp.Method)'.
at MarkEmbling.PostcodesIO.PostcodesIOClient.CreateLookupRequest(String postcode)
at MarkEmbling.PostcodesIO.PostcodesIOClient.LookupAsync(String postcode)
Fixed for me by downgrading RestSharp back to 106.4.2 (in case this helps others)

Sorry to have not responded to this until now. It looks like jumping to the latest RestSharp doesn't have the same issue (upgrading to that for me didn't break anything). In any case, the next release (v1.0.0) will depend on the latest version.

Oh, also, ignore the 'duplicate' label being added. Clumsy fingers.


Fix AzureMessagingListenerAutoConfiguration not included in spring.factories

Description
Sync codes https://github.com/Azure/azure-sdk-for-java/pull/35716
All SDK Contribution checklist:

[ ] The pull request does not introduce [breaking changes]
[ ] CHANGELOG is updated for new features, bug fixes or other significant changes.
[ ] I have read the contribution guidelines.

General Guidelines and Best Practices

[ ] Title of the pull request is clear and informative.
[ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[ ] Pull request includes test coverage for the included changes.

API change check
APIView has identified API level changes in this PR and created following API reviews.
spring-cloud-azure-autoconfigure


The “quit” button underneath the end-of-session message doesn't seem to work

The “continue” button underneath the end-of-session message ("Upload complete...") didn't work for me. Would it be possible to make it work (i.e., the app will close when we press the button)? Or should we remove it and let the participants close the app by going to FIle --> Exit?

The text of the button should actually be "quit", not "continue". If it really says "continue" please open a new issue to fix that. The functionality should be fixed in the next release.

Sorry - it was "quit", not "continue".

I tested version 0.0.2 but the 'quit' button at the end of the 20-min meditation session still didn't work

Did it show any error messages or did clicking it just have no effect at all?

No error messages. Clicking it had no effect at all.


docs: update links and branch names

scan all docs md and reuse final naming for the org/repo. also let's change develop to master or main when merge 2.3 rc PR: https://github.com/zebrunner/community-edition/pull/542

done. @okamara - visit https://zebrunner.github.io/community-edition/ doc site and verify that:

all pictures are displayed
all links works fine
pay attention to the references to the github repositories etc

Wrong links on page for Zebrunner Reporting, Jenkins

verified, fixed.


[Bug] Notification actions not shown when Android app is in background

Description
Notification actions are notifications, which are actially local notifications with special action intents. In certain situations, push notifications are captured and reraised as local notifications. These conditions obviously work if the Android app is in foreground but not when it is bsckgrounded.
Steps to Reproduce

Start app
Subscribe to push notification
Register notification actions
Move app to background
Send notification with click_action identifier

Expected Behavior

Should show notification with action buttons

Actual Behavior

Shows only a plain notification without action buttons

Basic Information

Version with issue: N/A
Last known good version: N/A

Screenshots

Reproduction Link
Sample app

I have tested this on Android, and it works fine.  Thanks for this, spent a bunch of time on trying to get this working 2 weeks ago.

It's not an easy topic. If there is anything else you don't like, bugs, missing pieces, unlogic APIs, let me know. I do my best to keep this library alive 👍🏻
Closing this one for now.


containerd: TestContainerKillInitPidHost

This issue is a part of supporting containerd
    container_linux_test.go:1552: killing init didn't kill all its children:
            PID TTY      STAT   TIME COMMAND
              1 ?        Ss     0:01 /sbin/init =
              2 ?        S      0:00 [kthreadd]
              3 ?        I<     0:00 [rcu_gp]
              4 ?        I<     0:00 [rcu_par_gp]
...

This might get partial support in #1204
When done, it should implement support for killing all process of a container's cgroup, then we might need to check again if this still fails, and see the reason.
We can try running tests against that PR's branch, but not sure how much complete it is, as still in draft

@YJDoc2 maybe yes...


Is userAgent header necessary in android.js file?

I am not sure if you should add user-agent header in android.js file.
On some android devices data is not fetched and it may be caused by that:
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36",
For example Samsung browser user agent is missing.
Please let me know if i am correct.

Data wasn't fetching due to different bundle id on staging and production :facepalm:
Closing this issue