Apple Numbers Ignores Hyperlinks from Production, not Development?

Hello,
I'm having a weird error and I doubt its axlsx or axlsx_rails, but I've tried Googling around and just can't find any reference to this issue.
Using Google Chrome, I generate xlsx files and download on Mac OSX.
Links are like this:
https://domain-name.us/q/1781/cps/6108
Generated:
cell = sheet.name_to_cell("#{alpha}10")
cell.value = "View"
sheet.add_hyperlink location<EMAIL_ADDRESS>cp.id), ref: "#{alpha}10", target: :external

where 'alpha' is generated by
alpha = ('B'..'Z').to_a[0..@carrier_plans_length]
alpha.each_with_index do |alpha, index|`

and represents  the cell alphabet character I want to reference for looping over several carrier plans.
When i download files generated locally from domain-name.dev:5000 they work fine and link to http://domain-name.dev:5000/q/1781/cps/6108. When on prod they link to https://domain-name.us/q/1781/cps/6108 but the prod ones aren't links in the Numbers opened file.
In Google Drive they work fine.
They format like they are links in Numbers:

But don't link! Any thoughts/ideas or pointers?
Thanks!

I'm not expecting it to do anything, but have you tried using shared strings? Sometimes it fixes OSX issues:
render "index", locals: {xlsx_use_shared_strings: true}
After that, I'm wondering if you could run a test in production, running a script with Rails runner, and generating some test spreadsheet with a link in it. Save it on a local drive. In other words, bypass axlsx_rails and the view pipeline. See if the link works. That isn't very likely to help either. But something is changing that spreadsheet.
Is your development server on localhost?

I run it on domain-name.dev:5000. domain-name.us is where the prod site lives. I'll try putting that local use_shared_strings in and report back on next deploy.
It works fine in Excel/Google Drive, so I think Numbers is doing something funky.

@straydogstudio sorry to bother, but I'm seeing this occur still, have you heard / seen anything around this?
It is now happening in spreadsheets downloaded in Mac OS (10.11.6) in Chrome / Windows (not sure version) in Chrome AND Internet Explorer. Links are completely not clickable. Any recommendations on how to troubleshoot this? I'm pretty stumped.
format.xlsx {
        template = if params[:orientation] == 'custom-vertical'
                     'show_custom_vertical.xlsx.axlsx'
                   elsif params[:orientation] == 'custom-horizontal'
                     'show_custom_horizontal.xlsx.axlsx'
                   elsif params[:orientation] == 'vertical'
                     'show_vertical.xlsx.axlsx'
                   else
                     'show.xlsx.axlsx'
                   end

        response.headers['Content-Disposition'] = "attachment;filename=#{@filename}#{params[:orientation]}_report.xlsx"
        render template: 'reports/' + template, locals: { xlsx_use_shared_strings: true }
      }

@rylanb I don't have much to offer. Have you tried the latest from the github repo?
There is still the possibility of a newer release of Axlsx (even though it is long overdue, the project is not dead. There is no ETA though.)
I might be able to spend some time next week. No guarantees though, as I have little or no time these days. :-P

@rylanb I mean latest Axlsx.

So after a LOT of troubleshooting, partially this is an issue with our code (for one sheet the hyperlinks are off 1 cell). So apologies there, I think this clears up what is happening on Windows.
Then what is happening is Microsoft Excel for Mac Version 16.9 seems to have broken link issues.
Thread about it for Word version 16.9:
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_mac-mso_365hp/hyperlinks-wont-work-in-word-for-mac-169/6c98d6dc-55f9-4105-bf80-550ad28266b8
Version 16.10 is supposed to fix this bug as best I can tell.
The issue on Mac led us astray and led me to comment again. So I think you don't have to look into anything here! Shakes first at MSFT!
Versions for reference:
gem 'axlsx', git: 'https://github.com/randym/axlsx.git', ref: '776037c0fc799bb09da8c9ea47980bd3bf296874'
gem 'axlsx_rails', '0.5.1'
Thanks for responding!

At least it helps to know where the problem is! As far as I know Axlsx merely produces the open standard for xlsx, but obviously there are complications.


Exception when sending data from server to client: Failed writing message. System.ArgumentException: The output byte buffer is too small to contain the encoded data, encoding 'Unicode (UTF-8)' fallback 'System.Text.EncoderReplacementFallback'. Parameter name: bytes

Hey.
my system:
Server: on .net core 2.1 preview 2 running on windows using kestel (also tried on azure using app service - same result)
Client - Java script client version: "@aspnet/signalr": "^1.0.0-preview2-final"
Protocol: Json
Scenario: when sending data from the server to the client (using the command: await m_Client.SendAsync("setTripGeneralData",generalData)) in several cases (of data) the following exception is thrown:
2018-05-02 16:01:43.815 +03:00|0HLDG5GH9MK8I:00000010|Debug|9|Microsoft.AspNetCore.SignalR.HubConnectionContext.||Failed writing message.
System.ArgumentException: The output byte buffer is too small to contain the encoded data, encoding 'Unicode (UTF-8)' fallback 'System.Text.EncoderReplacementFallback'.
Parameter name: bytes
   at System.Text.Encoding.ThrowBytesOverflow()
   at System.Text.Encoding.ThrowBytesOverflow(EncoderNLS encoder, Boolean nothingEncoded)
   at System.Text.UTF8Encoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, EncoderNLS baseEncoder)
   at System.Text.EncoderNLS.Convert(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, Boolean flush, Int32& charsUsed, Int32& bytesUsed, Boolean& completed)
   at System.Text.Encoder.Convert(ReadOnlySpan`1 chars, Span`1 bytes, Boolean flush, Int32& charsUsed, Int32& bytesUsed, Boolean& completed)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.Utf8BufferTextWriter.WriteInternal(ReadOnlySpan`1 buffer)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.Utf8BufferTextWriter.Write(String value)
   at Newtonsoft.Json.Utilities.JavaScriptUtils.WriteEscapedJavaScriptString(TextWriter writer, String s, Char delimiter, Boolean appendDelimiters, Boolean[] charEscapeFlags, StringEscapeHandling stringEscapeHandling, IArrayPool`1 bufferPool, Char[]& writeBuffer)
   at Newtonsoft.Json.JsonTextWriter.WriteEscapedString(String value, Boolean quote)
   at Newtonsoft.Json.JsonTextWriter.WriteValue(String value)
   at Newtonsoft.Json.JsonWriter.WriteValue(JsonWriter writer, PrimitiveTypeCode typeCode, Object value)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializePrimitive(JsonWriter writer, Object value, JsonPrimitiveContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteArguments(Object[] arguments, JsonTextWriter writer)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteInvocationMessage(InvocationMessage message, JsonTextWriter writer)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteMessageCore(HubMessage message, IBufferWriter`1 stream)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteMessage(HubMessage message, IBufferWriter`1 output)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.HubProtocolExtensions.WriteToArray(IHubProtocol hubProtocol, HubMessage message)
   at Microsoft.AspNetCore.SignalR.Internal.Protocol.HubMessage.WriteMessage(IHubProtocol protocol)
   at Microsoft.AspNetCore.SignalR.HubConnectionContext.WriteCore(HubMessage message)

this didn't happened with the alpha release of signalR core (and .net core 2) with the same data cases.
although the exception implies that the problem is with the size of the data, the data size is not big and in other cases i am sending bigger data amounts with success. i tried investigating the data to pin the difference but i couldn't found nothing sensuous. after saying that, i did tried sending parts of the problematic data and succeeded. only when sending all the problematic data together (its just a list of objects) i am receiving the exception, so maybe it does related to size - i don't know.
i couldn't find a way to enlarge the buffer so i cant test it.
i know that the json.net version was updated in this release of .net core, maybe its related?
any clew anybody?

@JamesNK @davidfowl This looks like an issue in the UTF8 encoder. Encoder.Convert throws if it can't encode a single character.
@yosigolan Do your payloads include non-ASCII characters? I think that's where our bug lies, so I just want to confirm that you're encoding characters outside the ASCII set. We support non-ASCII strings, but I think I see a bug in how we handle them that may be causing this :)

Hmmm. From the stack trace:
at System.Text.Encoder.Convert(ReadOnlySpan1 chars, Span1 bytes, Boolean flush, Int32& charsUsed, Int32& bytesUsed, Boolean& completed)

Is called here:
https://github.com/aspnet/SignalR/blob/dev/src/Common/Utf8BufferTextWriter.cs#L165
But the Encoder should be managing the buffer that text gets written to for us.

Approved by @muratg

Hey Everyone.
Thanks for the quick handle.
according the above i tried adding one more item at the start of my list and then it works. so @JamesNK i think your direction of "Maybe we get this error if the buffer only has 1 byte left." is correct and the problem the the structure of the data that creates this special case (1 byte left).
as a workaround i will catch the exception and when it happens i will try adding another item at the start of the list and send it again.
@anurse , will your solution be part of the next release? any timelines?
Thanks Yosi

oops. the exception is not bubbling up... so i cant catch it. so i don't have a workaround...
any ideas?
Thanks

oops. the exception is not bubbling up... so i cant catch it. so i don't have a workaround... any ideas?

Where are you trying to catch the exception? Can you show the code?

try
{
Task task = m_Client.SendAsync("setSitesData", sitesData, tripSelectedSitesList, lasViewedSiteIdString);
task.Wait();
//await m_Client.SendAsync("setSitesData", sitesData, tripSelectedSitesList, lasViewedSiteIdString);
}
catch (Exception e)
{
List newSites = new List();
newSites.Add(sitesData[0]);
newSites.AddRange(sitesData);
await m_Client.SendAsync("setSitesData", newSites, tripSelectedSitesList, lasViewedSiteIdString);
}
i also tried with await, the exception is not thrown.

We actually swallow the exception and log https://github.com/aspnet/SignalR/blob/1bba0fde87a9a2f1a835c6d2173421c089ed7c4e/src/Microsoft.AspNetCore.SignalR.Core/HubConnectionContext.cs#L157 so there's no way for you to catch it.
It's also happening on the server side. What does the code look like on the server side?

what do you mean on the server side? the code i attached is the server side.

what do you mean on the server side? the code i attached is the server side.

What is m_Client?

its just the name i give to my proxy on the server side:
private IClientProxy m_Client;

        public TripPlanSystemViewConnector(IHubContext<HubTripPlanSystem> tripPlanHubContext, string connectionId)
        {
            m_TripPlanHubContext = tripPlanHubContext;
            m_ConnectionId = connectionId;
            m_Client = m_TripPlanHubContext.Clients.Client(m_ConnectionId);
        }

Ah I see, this logic isn't even inside of a hub. Yea, I'm not sure there's a way to work around this. It's a genuine bug. You could try using a build from myget once we have the fix in here (https://github.com/aspnet/SignalR/pull/2190). But it's going to be broken in the next release (rc1) and fixed in the RTM release (which ships with the rest of ASP.NET Core 2.1)

I understand thanks. i assume you cant give me no estimated dates.
I will send the data twice for now until it will be fixed (in two different ways and hope that one of them wont fall in the problematic scenario).
by the way, i saw you in the asp.net community stand-up the other day, it was great.
Yosi

@davidfowl hey.
How can i get the fix from my get? from which feed? is it merged already?
Thanks

The PR hasn't been merged yet. Once it's merged, it'll be about a day or so before it's confirmed to be available on the feed. I'll try to remember to ping this thread but I may forget. The fastest way to get the fix once it is merged will be the aspnetcore-dev feed: https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json (as always, remember that those builds are completely unsupported and should not be used in production environments).

Hey @anurse
I see the PR was merged today, thank you very much. can i assume it will be on the dev branch (under myget) on Sunday?
Thanks Yosi

Note: the aspnetcore-dev feed now has builds for the version after 2.1, so I'd suggest you avoid using those builds.
The latest builds on dotnet-core have the fix. As @davidfowl pointed out, this fix missed the deadline to be included in the upcoming RC release, so it won't be officially released until the final RTM release.

You also might be able to work around it by using message pack instead of JSON

@davidfowl I saw above you mentioned that you swallow exception in SendAsync and instead write
Log.FailedWritingMessage(_logger, ex);
why do you do that? What if the calling code wants to know if sending the messages failed or not and handle this?

yes I don’t think we should have swallowed this specific exception but you can’t rely on this throwing to indicate that the message didn’t reach the client. If you scale out for example and use redis, it can throw on the other machine and the task you get back from invoking the method would be successfully even though it failed on the other side.
Regardless I think it we over optimized this by catching too many exceptions.  Using the RTM packages from the ci feed would be better.

Thanks @anurse .
thanks @davidfowl . what is the address of the myget of the ci feed? is it the same as the dev?

Yes. https://dotnet.myget.org/feed/aspnetcore-dev/package/nuget/Microsoft.AspNetCore.SignalR/1.0.0-rtm-30733 (that's the latest build).

Thanks. i am trying to configure it and test the fix.

when i add the signalr latest build package like this:
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.0-rtm-30733" />
i receive many build errors:
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.Threading.Channels with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 13 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 2 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.Buffers with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 34 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 10 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 1 version(s) in Microsoft Visual Studio Offline Packages [ Nearest version: 4.0.0 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.Net.WebSockets.WebSocketProtocol with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 4 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 2 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.IO.Pipelines with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 32 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 4 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.Text.Encodings.Web with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 34 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 13 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.Memory with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 38 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 4 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102: Unable to find package System.Runtime.CompilerServices.Unsafe with version (>= 4.5.0-rtm-26502-02)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 40 version(s) in aspnetcoredev [ Nearest version: 4.5.0-preview2-26308-02 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 9 version(s) in nuget.org [ Nearest version: 4.5.0-preview2-26406-04 ]
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1102:   - Found 0 version(s) in Microsoft Visual Studio Offline Packages
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1107: Version conflict detected for Microsoft.AspNetCore.Authentication.Abstractions. Reference the package directly from the project to resolve this issue.
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1107:  AppsWebService -> Microsoft.AspNetCore.SignalR 1.0.0-rtm-30733 -> Microsoft.AspNetCore.Http.Connections 1.0.0-rtm-30733 -> Microsoft.AspNetCore.Authorization.Policy 2.1.0-rtm-30733 -> Microsoft.AspNetCore.Authentication.Abstractions (>= 2.1.0-rtm-30733)
C:\GitRepos\Backend\AppsWebService\AppsWebService\AppsWebService.csproj : error NU1107:  AppsWebService -> Microsoft.AspNetCore.App 2.1.0-preview2-final -> Microsoft.AspNetCore.Authentication.Abstractions (= 2.1.0-preview2-final).

The build failed. Please fix the build errors and run again.

i also tried adding the entire framework package latest build and i receive the same errors.
does someone knows why?

Is this exception also related to this issue:
 dbug: Microsoft.AspNetCore.SignalR.HubConnectionContext[6]       Failed writing message. System.IndexOutOfRangeException: Index was outside the bounds of the array.    at System.ThrowHelper.ThrowIndexOutOfRangeException()    at Microsoft.AspNetCore.SignalR.Internal.Protocol.Utf8BufferTextWriter.Write(Char value)    at Newtonsoft.Json.JsonTextWriter.WritePropertyName(String name, Boolean escape)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)    at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)    at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteArguments(Object[] arguments, JsonTextWriter writer)    at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteMessageCore(HubMessage message, IBufferWriter1 stream)
at Microsoft.AspNetCore.SignalR.Internal.Protocol.JsonHubProtocol.WriteMessage(HubMessage message, IBufferWriter1 output)    at Microsoft.AspNetCore.SignalR.Internal.Protocol.HubProtocolExtensions.WriteToArray(IHubProtocol hubProtocol, HubMessage message)    at Microsoft.AspNetCore.SignalR.Internal.Protocol.HubMessage.WriteMessage(IHubProtocol protocol)    at Microsoft.AspNetCore.SignalR.HubConnectionContext.WriteCore(HubMessage message)

hey @guylando
how did you manged to build the project with rtm-30733? when i try even with new empty project i get many build errors saying i am missing .net packages of version 4.5.0.
what are the steps you did?
Thanks

you need to close visual studio and change the csproj files using notepad++ and then run dotnet restore from elevated cmd

@guylando thank you. i will try it

You don't need to do any of that. You need to add the dotnet-core feed and you also need to update everything else to use the rtm package of the same version. If you show your csproj, I can help.

When installing one library using visual studio package manager it fails and reverts. What I ment is to change ALL packages versions to compatible new version by changing csproj with visual studio closed (if not closed then visual studio attempts to restore in the middle..) and then using cmd dotnet restore is much faster to see if there are any problems than using visual studio (at least for my 30+ projects solution)

@davidfowl ok i got it, i added the dotnet-core feed in addition to the aspnetcore-dev feed and now it works.
Thanks

now i get this:
It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.1.0-rtm-30733' was not found.
  - Check application dependencies and target a framework version installed at:
      C:\Program Files\dotnet\
  - Installing .NET Core prerequisites might help resolve this problem:
      http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
  - The .NET Core framework and SDK can be installed from:
      https://aka.ms/dotnet-download
  - The following versions are installed:
      2.1.0-preview2-final at [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]

what am i doing wrong?

Try setting this in your csproj:
<MicrosoftNETPlatformLibrary>Microsoft.NETCore.App</MicrosoftNETPlatformLibrary>

same result...
i added it under the <PropertyGroup> is that what you meant?
maybe i need to install the 30733 sdk?

I dont have any special sdk. You probably did not configure the right stream in your nugget config. Show your solution nugget config.

here it is:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
    <add key="aspnetcore-dev" value="https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json" />
	<add key="netcore-dev" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
  </packageSources>
</configuration>

can you show your csproj file?

no... same error. did you used the entire app package  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0-rtm-30733" /> or took specific packages?

specific packages.
check in the myget gallery if the package you want exist with that version.

i want the signalr off-course :-) which packages did you added to get it?

I meant check which versions of Microsoft.AspNetCore.App exist in the gallery of the stream

Hey @anurse , @davidfowl
finally with the release of rc1 i succeeded to use the new bits with your fix. however the exception is still thrown...
System.ArgumentException: The output byte buffer is too small to contain the encoded data, encoding 'Unicode (UTF-8)' fallback 'System.Text.EncoderReplacementFallback'.
Parameter name: bytes
   at System.Text.Encoding.ThrowBytesOverflow()
   at System.Text.Encoding.ThrowBytesOverflow(EncoderNLS encoder, Boolean nothingEncoded)
   at System.Text.UTF8Encoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, EncoderNLS baseEncoder)
   at System.Text.EncoderNLS.Convert(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, Boolean flush, Int32& charsUsed, Int32& bytesUsed, Boolean& completed)
   at Microsoft.AspNetCore.Internal.Utf8BufferTextWriter.WriteInternal(ReadOnlySpan`1 buffer)
   at Microsoft.AspNetCore.Internal.Utf8BufferTextWriter.Write(Char[] buffer, Int32 index, Int32 count)
   at Newtonsoft.Json.Utilities.JavaScriptUtils.WriteEscapedJavaScriptString(TextWriter writer, String s, Char delimiter, Boolean appendDelimiters, Boolean[] charEscapeFlags, StringEscapeHandling stringEscapeHandling, IArrayPool`1 bufferPool, Char[]& writeBuffer)
   at Newtonsoft.Json.JsonTextWriter.WriteEscapedString(String value, Boolean quote)
   at Newtonsoft.Json.JsonTextWriter.WriteValue(String value)
   at Newtonsoft.Json.JsonWriter.WriteValue(JsonWriter writer, PrimitiveTypeCode typeCode, Object value)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializePrimitive(JsonWriter writer, Object value, JsonPrimitiveContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteArguments(Object[] arguments, JsonTextWriter writer)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteInvocationMessage(InvocationMessage message, JsonTextWriter writer)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteMessageCore(HubMessage message, IBufferWriter`1 stream)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteMessage(HubMessage message, IBufferWriter`1 output)
   at Microsoft.AspNetCore.SignalR.HubConnectionContext.WriteCore(HubMessage message)

It looks a bit different now (the stack trace) but it still happens especially when i use data with other languages than English (Hebrew for example).
In addition, things are now even worth since when the exception is thrown in the server, another exception is thrown in the client:
SyntaxError: Unexpected token t in JSON at position 19781
    at JSON.parse (<anonymous>)
    at JsonHubProtocol.parseMessages (webpack-internal:///./node_modules/@aspnet/signalr/dist/esm/JsonHubProtocol.js:32:38)
    at HubConnection.processIncomingData (webpack-internal:///./node_modules/@aspnet/signalr/dist/esm/HubConnection.js:237:42)
    at WebSocketTransport.HubConnection.connection.onreceive (webpack-internal:///./node_modules/@aspnet/signalr/dist/esm/HubConnection.js:57:68)
    at WebSocket.webSocket.onmessage [as __zone_symbol__ON_PROPERTYmessage] (webpack-internal:///./node_modules/@aspnet/signalr/dist/esm/WebSocketTransport.js:88:47)
    at WebSocket.wrapFn (webpack-internal:///./node_modules/zone.js/dist/zone.js:1166:39)
    at ZoneDelegate.invokeTask (webpack-internal:///./node_modules/zone.js/dist/zone.js:421:31)
    at Object.onInvokeTask (webpack-internal:///./node_modules/@angular/core/esm5/core.js:4956:33)
    at ZoneDelegate.invokeTask (webpack-internal:///./node_modules/zone.js/dist/zone.js:420:36)
    at Zone.runTask (webpack-internal:///./node_modules/zone.js/dist/zone.js:188:47)
  defaultErrorLogger
  ErrorHandler.handleError
  next
  schedulerFn
  SafeSubscriber.__tryOrUnsub
  SafeSubscriber.next
  Subscriber._next
  Subscriber.next
  Subject.next
  EventEmitter.emit
  (anonymous function)
  ZoneDelegate.invoke
  Zone.run
  NgZone.runOutsideAngular
  onHandleError
  ZoneDelegate.handleError
  Zone.runTask
  ZoneTask.invokeTask
  invokeTask
  globalZoneAwareCallback

This exception kills the signalr in the client side...
Before your fix there was no exception in the client, only the message never arrived.
I am attaching a file with the data i am trying to pass on the wire. you can try pass it as string, in my system the exception also happens when doing so.
data.txt
I am using the the build 2.1.0-rtm-30740 with the metapackage Microsoft.AspNetCore.App. to overcome the execution problem (see above), i duplicated the rc1 run-time folder into a folder with this build name (under C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App).
Since this is kind of a workaround please confirm that this is not what caused the issue on my system.
Yosi

I just made a test with build 2.1.0-rtm-30733 and in this build the exception i mentioned in the client is not thrown (the exception of the server still does with the new stack trace).

to overcome the execution problem (see above), i duplicated the rc1 run-time folder into a folder with this build name (under C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App)

This means you are not using the RTM bits, you have replaced the RTM bits with RC1 bits. The framework assemblies in the C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App folder are the bits work at runtime.

You can find the RTM nightly builds here: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.1
Installing the SDK installer from that page should give you the 2.1.0-rtm-30740 build of Microsoft.AspNetCore.App

Thanks @anurse , exactly what i was missing. it works great now!


Error loading magic in Fish

I upgraded to 0.25.1 this morning and when I have magic enabled I see the following error when starting a new Fish shell.
string: contains: invalid subcommand

- (line 5):
if not string contains -q -r "^$HOME/.local/bin(:|\$)" $PATH
   ^
from sourcing file -
	called on line 69 of file ~/.config/fish/config.fish
from sourcing file ~/.config/fish/config.fish
	called during startup

(Type 'help string' for related documentation)

I tried rm -rf ~/.tea and reinstalling.
My config.fish has the following:
test -d "$HOME/.tea" && "$HOME/.tea/tea.xyz/v*/bin/tea" --magic=fish --silent | source

@jhheider any clue?

I don't see contains in the docs. Maybe match?
https://fishshell.com/docs/current/cmds/string.html

Quick test would be to change your magic line to
test -d "$HOME/.tea" && "$HOME/.tea/tea.xyz/v*/bin/tea" --magic=fish --silent | sed -e 's/contains/match/g' | source
And see if that's a fix.

I can confirm @jhheider that this adjustment works. 👍

what's concerning is our test for magic passes even though this error occurs :/


Feature: Make ForwardAuth middleware http client timeout configurable

Welcome!

[X] Yes, I've searched similar issues on GitHub and didn't find any.
[X] Yes, I've searched similar issues on the Traefik community forum and didn't find any.

What did you expect to see?
I'm currently developing a tool to automatically scale resources down to zero if not used and also scale them up when accessed. For this I'm currently using the ForwardAuth middleware and block as long as the resources are not ready yet but after 30 seconds the request is cancelled due to a hardcoded timeout in the middleware code.
https://github.com/traefik/traefik/blob/8174860770e536b4afb541e0ab13b3611a101430/pkg/middlewares/auth/forward.go#L70
I'd like to have either a configurable timeout (which probably is the easier option) or a dedicated middleware allowing blocking forwarding requests to helper services (which I think is more vague and more complex). I think even though the ForwardAuth middleware is primarily meant for authentication backends it could also provide very useful in similar contexts as this one.

I would welcome this feature as well.
I discovered this feature because I was looking for why our authentication backend does not delay the response time beyond 30 seconds on failed login attempts. Turns out the reason is Traefik and the hard-coded timeout.
The hard-coded timeout prevents us from implementing increasing response times/account lockouts in a way that is suitable and easy for us. And delaying response time is one of many recommended practices for defending against automated password guessing


RFC for Python and Ruby removal from the CF stack

This RFC is the result of the discussions in the TOC meeting (meeting notes) on 2023-04-04. It proposes a depracation period for the Removal of Python and Ruby from the CF stack

Hi @robdimsdale,
thank you for the really good questions. Here the answers:

We think that the same version of Ruby and Python which are coming with Ubuntu makes sense here
Yes, they should be treated like any other package coming with the stack
A good experience for the community would be to support it until the end of life of cflinuxfs4 and remove with the next stack version.
Would it be possible to have the same version but with a qualifier like 1.x.y-with-deprecated-packages?
We should deprecate those packages with the cflinuxfs4 and remove with the next stack version
We suggest to use the CFF channels which are appropriate to communicate the deprecation and the timelines when we have them.

Most probably it makes sense to also have a deprecation RFC. I will bring up this question in todays TOC meeting.

How much effort is it to maintain a compatibility version like that? Is it a thing that could be done throughout the lifetime of 'fs4? Or only for so long?

We think that the same version of Ruby and Python which are coming with Ubuntu makes sense here

Great, we can include whatever versions of python 3.x and ruby 3.x are included in Jammy. This will be a breaking change from cflinuxfs3 as that included ruby 2.x and python 2.x (as well as python 3.x), but I think that's reasonable.

Yes, they should be treated like any other package coming with the stack

Agreed - just wanted to make sure we're on the same page on this point.

A good experience for the community would be to support it until the end of life of cflinuxfs4 and remove with the next stack version.
5 . We should deprecate those packages with the cflinuxfs4 and remove with the next stack version

I think this is where we have different perspectives. We're going to be supporting cflinuxfs4 until 2026, and I don't love the idea of supporting two parallel versions of a stack for that long. Could we start with a shorter deprecation window? Something long enough to enable users to migrate off, but not as long as four years? Perhaps one year? I'd be happy with language in the RFC that allows us to extend this window if needed.

Would it be possible to have the same version but with a qualifier like 1.x.y-with-deprecated-packages?

I think it's more accurate (and intuitive) to keep the version line as 0.x.y. We're essentially continuing the 0.x.y version line that existed before we made the breaking changes in the 1.0 release. I accept that v0.x is a signal that there could be more breaking changes to come - if one was to interpret the version lines as semver - but I don't really think the stacks truly follow semver anyway. Therefore I think we can choose to frame the versions in terms of the actual supported set of packages.
I'm open to an alternative versioning scheme (e.g. 1.x.y-deprecated-packages), but I'd really like to start with 0.x.y.

We suggest to use the CFF channels which are appropriate to communicate the deprecation and the timelines when we have them.

Sure, no objections. I'm happy with this. What I'd like to avoid is adding logic to the stack/buildpacks to issue deprecation notices during the build, but it doesn't like like there's a desire for this.

@robdimsdale thanks for your feedback. After the discussions in the TOC meeting today we went over the questions with @stephanme and our answers are:

We would like to have it for the whole life time of cflinuxfs4 because:
3.1 We have many customers already running on cflinuxfs4 (around 1/3 of our customers) and that is why we want to avoid the incompatible change here because the customers already put efforts to move to the current version of cflinuxfs4 and it was a lot of effort for us to coordinate and organize this.
3.2 We don't see an easy option to provide the two cflinuxfs4 stack flavours as opt-in for the offline buildpacks. This will require efforts also on the buildpacks to provide releases for the two flavours.
3.3 The CF stack is quite hidden from CF end users and an incompatible change in the stack will break their apps during the CF update without giving customers a chance to validate and avoid this.
3.4 We were wondering in the TOC meeting what are the efforts to support the two flavours of the stacks. Could you please elaborate on this? When it is about validation the ARD WG could help here.
We think that from consumption point of view it will be easier for cf-deployment e.g. to consume the both flavours like it works with the buildpacks providing a cflinuxfs3 and cflinuxfs4 package in the same bosh-release (example: https://bosh.io/releases/github.com/cloudfoundry/java-buildpack-release?version=4.56)

Gotcha. I see that. It is unfortunate that you migrated customers to cflinuxfs4 before we'd finalized the stack, validated the buildpack compatibility, and moved it out of the experimental ops-file section cf-deployment.
However, I accept that it's equally unfortunate that we didn't broadly communicate our intention to make breaking changes to the stack. Ideally we could have communicated our decision earlier, before you'd started migrating, and you would have held off migrating customers until the stack was ready.
Regardless, I accept that this is the situation we find ourselves in so we have to find a compromise.
My main concern with supporting the stack is the engineering overhead of the pipeline. The longer we support it for, the longer we incur the burden. A secondary concern is the cognitive overhead of maintaining two version lines. A minor concern is financial cost of running another pipeline†. However I am overwhelmingly concerned about the first concern - the pipeline overhead.
You can see the current cflinuxfs4 pipeline here. We'd essentially be duplicating all which increases the maintenance burden: increased chance of needing to debug broken builds, increased surface area for future refactors/modifications.
Perhaps a compromise is that we support a simpler pipeline for the version of the stack that contains ruby and python? Maybe we can run a simpler pipeline - maybe one that doesn't run CATS?
How would you feel about this proposal:

The buildpacks team continues to support cflinuxfs4 without Ruby and Python in the current pipeline - running the current set of tests/validation, etc
The buildpacks team adds a simpler pipeline to support cflinuxfs4 with Ruby and Python (version naming TBD). This pipeline would build and publish the stack without running the full set of tests.

For increased confidence, we could choose to only build this stack after we have published the (fully-validated) stack without Ruby and Python. This would avoid a situation where we publish a stack with Ruby and Python when the stack without those packages has failed the extra validation.

The buildpacks team will continue to publish both stacks via the above mechanism until the EOL for cflinuxfs4 (currently slated for 2027/04/01)

As far as the the version for this stack (0.x.y vs 1.x.y-compat or similar), I'm not following what you're saying. I don't see how 0.x.y is incompatible with the current distribution mechanisms you describe.

† Currently the CI for buildpacks is paid for by VMware, not the CFF. I think it would be a good idea to start a conversation about migrating to CFF-hosted infrastructure, but I don't want to muddy this RFC with that concern.

From cf-deployment point of view it would be easier to have separate BOSH releases for the community cflinuxfs4 stack and the compatibility stack. The update and validation pipelines can only handle one version of a BOSH release. So we could only process the 1.x.x community release and the 0.x.x compatibility release would have to be validated elsewhere. I would expect however that building separate BOSH releases would be more effort for the stack maintainers.
We'll try to detail out these two solutions and possibly add a few more feasible approaches.

@robdimsdale thanks for looking into this in details and the proposal! We agree that doubling the CATS for the stack validation for such a long period is not a good effort & cost against value investment. Maybe there is a possibility to execute the CATS against the compatibility stack on the ARD WG side without generating further costs. As @jochenehret commented the ARD WG will look into details how the two stacks could be consumed and come up with more details.

Here's a start to technically detail out the solutions discussed above. @robdimsdale : Please fill in for the ARI WG / Buildpack WG. Any additional ideas are of course welcome.

Solution
ARI WG Implementation
ARI WG Effort
ARD WG Implementation
ARD WG Effort

Separate BOSH releases
?
?
Additional ops-release in update-releases pipeline. New ops file to replace cflinuxfs4-release with the compatibility release. Deployment and validation e.g. in fresh-luna.
Moderate

One BOSH release with different versioning schemes (0.x.x for compatibility release / 1.x.x for regular release)
?
?
Would have to use different bosh-io-release-resource source configurations for the cflinuxfs4 bosh.io resource. Does not fit with the existing solutions in the update-releases pipeline. Automatic update of compatibility release is not easily possible.
High

One BOSH release, one version, different packages (not sure if this works, needs a PoC)
?
?
No changes in update-releases pipeline necessary. Would need a new ops file to deploy the compatibility package from cflinuxfs4-release. Could be deployed and validated in one of the existing scenarios, e.g. fresh-luna
Moderate

Solution
ARI WG Implementation
ARI WG Effort
ARD WG Implementation
ARD WG Effort

Separate BOSH releases
Separate repository for BOSH release (e.g. cloudfoundry/cflinuxfs4-compat-release) - results in clear intent and discoverability
Low (especially if there's minimal testing before release)
Additional ops-release in update-releases pipeline. New ops file to replace cflinuxfs4-release with the compatibility release. Deployment and validation e.g. in fresh-luna.
Moderate

One BOSH release with different versioning schemes (0.x.x for compatibility release / 1.x.x for regular release)
Interleave the BOSH final releases in the single, existing repository (i.e. cloudfoundry/cf-linuxfs4-release)
Low/Moderate
Would have to use different bosh-io-release-resource source configurations for the cflinuxfs4 bosh.io resource. Does not fit with the existing solutions in the update-releases pipeline. Automatic update of compatibility release is not easily possible.
High

One BOSH release, one version, different packages (not sure if this works, needs a PoC)
Interleave package (blob) updates in single, existing BOSH release repo
Moderate
No changes in update-releases pipeline necessary. Would need a new ops file to deploy the compatibility package from cflinuxfs4-release. Could be deployed and validated in one of the existing scenarios, e.g. fresh-luna
Moderate

@jochenehret @beyhan Based on the above suggestions, it seems like in aggregate, the easiest path for everyone is a separate BOSH release (GitHub repository, BOSH.io entry, etc) for the release that contains ruby + python.
I'm happy with the naming cflinuxfs4-compat-release, but I'm also open to alternative names.
As far as the version numbering, if it's a separate repo it doesn't really matter what version line we choose. I'd probably propose v1.x to indicate the level of support and maturity. We won't be able to keep the exact same version as the non-compat release because they will drift over time - i.e. as soon as there's a patch to ruby/python or a transitive dependency the compat-release will move ahead relative to the non compat release - so I'd propose starting at v1.0.0 with the first final release.
In terms of testing, if we are comfortable moving the CATS validation to post-release, that would result in a fairly straight forward process for the buildpacks team / ARI Working Group: we would trigger the creation and automatic publish of the compat stack when the non-compat stack is published. We could probably do that entirely within GitHub actions, which would be effectively free, as well as easy to maintain.

Great summary @beyhan !
The only thing I'd add is a bit more detail about why/how we can keep the two versions of cflinuxfs4 in sync: we agreed in the meeting that when we build the compat stack (based off the newly-published stack without ruby and python) we would build with whatever versions of ruby and python were available at that time. We explicitly agreed that we wouldn't try to build a new compat stack if/when there is a new version of ruby and/or python.
The benefits to this approach are:

It keeps the version lines in sync, reducing complexity
It is slightly easier to automate on the creation side

The cost of this approach is that if there is a CVE in ruby/python, or any of their transitive dependencies, that won't be resolved until the next time the upstream stack is created and the compat stack is rebuilt.

@robdimsdale thanks for the addition! I added it to the RFC. Regarding adding bosh-releases on bosh.io please check https://github.com/bosh-io/releases and this is the pr which was open for cflinuxfs4.
@cloudfoundry/toc  I have update the pr with all the discussions we had. It is now ready for review.

@robdimsdale would it be possible to review until next Tuesday so that we can proceed with this during the next TOC meeting. You've been so active on this that is why I would like to have your review also.


Project Status

I really like Thorium, I use it for everyday tasks and often for work.
But its updates now still depend on one person and we haven't seen an update arrive in almost 2 months.
Is there any possibility of adding some sort of item on the site where we could track the progress of the next build/next missing founder? So that at least there would be a way to understand where development is at.
Much respect for the work and the founder,
Alex

yeah.

I only started recently using this, and I can't go back. It's soo much faster than chrome. I'd have to figure out how to go compile it myself from scratch if it stopped being updated.


allow for client side key to be used with relay server

For my use case I'd like to be able to have the console client specify an API key while using a relay server without the relay server needing a hard-coded API key to use. This change is backwards compatible and requires an additional env var to be added to change the behavior, as documented in the updated README. The only item I'd flag is the relay server is referencing the same REACT_APP prefixed env var as the frontend which isn't standard for server code but I opted for this instead of using two different redundant env vars. An alternative would be that the relay server checks request headers for a key, and implicitly uses the presence of a key to use that instead of requiring a key provided via the env var, although for now I opted for the more explicit approach.
Please let me know if there is any feedback and I can make adjustments. I'm hoping to get this in so I can otherwise keep my forked code updated with any more changes that are made on the base branch.

Hey; going to reject this PR as it's out of scope of the project. But you should absolutely maintain a fork and keep working on this, we really appreciate the thoughtfulness / engagement!


Add support for metalsmith builder hooks

Close #427

/ping @egoist @zigomir

I think this would be even better with tests.

I'll write one test that writes target files to another destination, as I think it would be a common use case.

Test written. I have also removed it.only in test.js that was causing only one test to run.

@Toilal looks good, thank you!


Incremental PCA

Adds Incremental PCA. As usual, there are several things I am not sure about:

Basically the struct is almost the same as for regular PCA. These should probably be a single module, but it isn't that trivial to merge them (they are separate classes in scikit-learn).
There are two fit/2 clauses: one that takes a tensor and another that takes a stream as a first argument. The one that takes a tensor is defined with deftransform while the one that takes a stream is defined with def. Is this fine?
Is it possible to add a popular dataset in incremental_pca_test.exs without adding explorer or scidata dependency to mix.exs?
transform/2 is the same as for regular PCA.

I am still adding docs and unit-tests; this isn't so simple given how the algorithm works.

There are two fit/2 clauses: one that takes a tensor and another that takes a stream as a first argument. The one that takes a tensor is defined with deftransform while the one that takes a stream is defined with def. Is this fine?

This is currently undefined behaviour. I would maybe have a function name specific to streams... if I have more ideas I will drop as comment when I review the PR.

Is it possible to add a popular dataset in incremental_pca_test.exs without adding explorer or scidata dependency to mix.exs?

It is fine to add scidata as a test dependency only.

I've decided to remove the fit/2 clause that takes tensor as the first argument as I don't think it's needed. :)
The code should be much cleaner now, but still some problems remain.

Closing in favor of #291.


Incorrect impress load with Promise.allSettled

Impress and Node.js versions
Node 16, impress 3.0.0-alpha.2
Platform
Linux Fedora latest
Describe the bug
https://github.com/metarhia/impress/blob/ac554b4d6aee02ed920e5d6900c4f8498b240fe3/lib/application.js#L76-L86
There is Promise.allSettled used.  API load later and depends on schemas, as it can use Projections or direct references to schemas. If something fails, e.g. with invalid custom type. There will be incorrect state of application server.
https://github.com/metarhia/impress/blob/ac554b4d6aee02ed920e5d6900c4f8498b240fe3/lib/application.js#L91
There must be a potential problems with starter functions as well. Because if error happens we won't know and application can be in a broken state as well.
https://github.com/metarhia/impress/blob/ac554b4d6aee02ed920e5d6900c4f8498b240fe3/lib/application.js#L88
To Reproduce
https://github.com/metarhia/Example/tree/bug/impress-load-allsettled
Expected behavior
I suggest to use Promise.all instead of Promise.allSettled to load impress application and handle errors. If an error during startup occurs, there must be logs and exit 1.
Screenshots
No response
Additional context
No response

@tshemsedinov I have found a bug

As of impress 3.01 application stops for your bugged example:
Start: /home/marcus/Metarhia/Example/application
03:41:25  W4   error   TypeError: Cannot read properties of null (reading 'types')
  /node_modules/metaschema/lib/schema.js:42:62
  Array.map (<anonymous>)
  Schema.get types [as types] (/node_modules/metaschema/lib/schema.js:42:47)
  new Preprocessor (/node_modules/metaschema/lib/preprocessor.js:28:23)
  new Schema (/node_modules/metaschema/lib/schema.js:28:26)
  Function.from (/node_modules/metaschema/lib/schema.js:14:12)
  Object.prepare (/node_modules/impress/lib/bus.js:10:37)
  Place.change (/node_modules/impress/lib/place.js:63:41)
  async Place.load (/node_modules/impress/lib/cache.js:22:14)
  async Place.load (/node_modules/impress/lib/cache.js:21:33)
03:41:25  W4   error   Error: Custom type must contain "construct" and "checkType" methods
  checkCustomType (/node_modules/metaschema/lib/types.js:65:11)
  typeFactory (/node_modules/metaschema/lib/types.js:84:5)
  new Model (/node_modules/metaschema/lib/model.js:9:18)
  Object.loadModel (/node_modules/metaschema/lib/loader.js:44:10)
  async Schemas.load (/node_modules/impress/lib/schemas.js:14:18)
03:41:25  W4   error   Can not start worker 4: Error: Can not initialize an Application
  Application.parallel (/node_modules/impress/lib/application.js:77:13)
  async Application.init (/node_modules/impress/lib/application.js:85:5)
  async /node_modules/impress/lib/worker.js:74:3
03:41:25  W4   info    Initialization failed in worker 4
03:41:25  W4   debug   Stop example plugin
03:41:25  W2   info    Initialization failed in worker 2
03:41:25  W2   debug   Stop example plugin
03:41:25  W0   info    Can not start Application server

If start function fails app also exits


added M5 devices

Fixes: https://github.com/AlexxIT/SonoffLAN/issues/1432

Thanks!

https://github.com/AlexxIT/SonoffLAN/releases/tag/v3.8.0


Bump upper bound of template-haskell.

Currently the cabal file specifies it requires template-haskell < 2.16, while the most recent version on hackage is 2.17. Can the version just be bumped, or is there an actual incompatibility to sort out?

Just bumping the bounds on my system seems to work. I'll submit a PR.

Sounds good, I'm running into a conundrum because I was recently informed that specific versions of template haskell are tied to specific versions of GHC. That seems to be causing problems with backwards compatibility and future advancements as people want to move onto newer versions of GHC over time.

#44 has been merged. Resolving this specific request.


crashed on sync.cc line 88

Should this be an issue in the gRPC issue tracker?
YES
What version of gRPC and what language are you using?
GRPC: 1.8.4
language: Objective-C
What operating system (Linux, Windows, …) and version?
iOS
What runtime / compiler are you using (e.g. python version or version of gcc)
Clang
What did you do?
test GRPC online to profile the statbility
What did you expect to see?
not crash
What did you see instead?
crash on low rate
Crashed: com.apple.root.default-qos
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000
Crashed: com.apple.root.default-qos
0  myapp                          0x1037f08f4 gpr_ref_non_zero (sync.cc:88)
1  myapp                          0x1037ee0b8 grpc_connected_subchannel_ref (subchannel.cc:170)
2  myapp                          0x1037d9a1c pf_pick_locked(grpc_exec_ctx*, grpc_lb_policy*, grpc_lb_policy_pick_args const*, grpc_connected_subchannel**, grpc_call_context_element*, void**, grpc_closure*) (pick_first.cc:182)
3  myapp                          0x1037aca1c pick_callback_start_locked(grpc_exec_ctx*, grpc_call_element*) (client_channel.cc:1145)
4  myapp                          0x1037ac66c start_pick_locked(grpc_exec_ctx*, void*, grpc_error*) (client_channel.cc:1306)
5  myapp                          0x1037af588 grpc_combiner_continue_exec_ctx (combiner.cc:261)
6  myapp                          0x1037bae94 grpc_exec_ctx_flush (exec_ctx.cc:93)
7  myapp                          0x1037b877c pollset_work(grpc_exec_ctx*, grpc_pollset*, grpc_pollset_worker**, long) (ev_poll_posix.cc:1057)
8  myapp                          0x1037b0840 cq_next(grpc_completion_queue*, gpr_timespec, void*) (completion_queue.cc:952)
9  myapp                          0x103794450 __27-[GRPCCompletionQueue init]_block_invoke_2 (GRPCCompletionQueue.m:56)
10 libdispatch.dylib              0x182a9aa54 _dispatch_call_block_and_release + 24
11 libdispatch.dylib              0x182a9aa14 _dispatch_client_callout + 16
12 libdispatch.dylib              0x182aa1bc8 _dispatch_queue_override_invoke$VARIANT$mp + 716
13 libdispatch.dylib              0x182aa7cf4 _dispatch_root_queue_drain + 600
14 libdispatch.dylib              0x182aa7a38 _dispatch_worker_thread3 + 120
15 libsystem_pthread.dylib        0x182d4306c _pthread_wqthread + 1268
16 libsystem_pthread.dylib        0x182d42b6c start_wqthread + 4

Anything else we should know about your project / environment?
no

@0oneo please post your steps to reproduce this crash.

@srini100 the crash happens on low rate on our production. On my dev machine, I have never came to this crash

@srini100 the crash happens on low rate on our production. On my dev machine, I have never came to this crash

@0oneo Fix for #13327 is in 1.9.x. If you can, please try this version. After some mileage, fix may be backported to 1.8.x.


feature requests: submit requests from any thread

When working with io_uring from a stack that has a user-space thread pool (like .NET) it would be interesting to be able to submit requests from any thread.
The shared memory for requests makes it challenging to synchronize access between multiple threads that want to use the same io_uring instance.
Consider adding a system call that accepts a list of requests, and completions.
When the requests can be completed without blocking, the completions are filled in. If the requests would block, the requests are added to the io_uring, and will complete asynchronously and can be retrieved from the shared memory completion buffer.

cc @axboe @benaadams @davidfowl

cc @antonfirsov @karelz

I can add some color here as I've made my uring interface multi-threaded.
Maintaining a thread-safe free-list of SQE indexes is no problem. The imperfect part comes when submitting the SQEs. A client always submits the number of SQEs it prepared, however the actual SQEs that it submits may be different than the ones it prepared if another thread has published its SQE indexes, but not yet called submit. However, this seems to work fine because they'll eventually submit each other's SQEs.
I don't know if there's any implications with submitting a subset of SQEs that are linked. For example, thread (1) wants to submit SQEs A and B which are linked, and thread (2) wants to submit C. If (1) publishes first, but (2) publishes and then submits, only A might be submitted before (2) gets around to submitting B and C.
Some improvement here would be nice, but it may also be a non-issue if preparing SQEs are always immediately followed by submitting them. (I don't keep a lock around these two items to prevent the lock from being held under syscall).

@paxostv as you point out, it's possible to do, but there are some challenges: ensuring different thread don't try to use the same sqe, ensuring no partial seqs get submitted, and maybe deal with sqe list being full also?
Being able to pass sqe list as an argument doesn't require this synchronization.
And if the call can also return completions when they happen synchronously, the thread making the call can consume that information and continue its business.
Ideally, the application is written so only a single thread is submitting sqes to an io_uring. That is also what liburing assumes. We're not in that ideal situation. For our multi-threaded use-case I think this syscall would be useful.

Not sure I like the idea of a separate system call, as I don't think it'll solve anything. You're still going to need the ring to actually submit them, and the ring is locked internally. This means that even if you're not using the SQ ring at all, two threads could still contend and block if they tried to do that at the same time.
So let me ask, why aren't you just using a ring per thread in your thread pool? Most users of io_uring won't be using thread pools at all, since one of the goal was not to need them as blocking processing will be done internally anyway. You can share the async backend between rings for all your threads, so the overhead should be fairly minimal. And then you don't need to share a ring at all.
Maybe I'm missing something and there are specific reasons why you are sharing a ring (or multiple rings?) between threads in a thread pool?

So let me ask, why aren't you just using a ring per thread in your thread pool?

Good question!
There are a number of reasons, this is the most important one:
It's allowed to queue work to the ThreadPool that blocks. The ThreadPool will add additional threads to handle work when it detects that.
You can also block until an async operation completes. So if that async operation relies on the thread being able to reach io_uring handling, you're in a deadlock.
The challenges comes from trying to fit io_uring in the .NET model, which is different from the preferred io_uring model.

It's definitely possible. Why not? A couple reasons come to mind.

The assumption against using a thread-pool is that the application can control all I/O, which isn't necessarily true. In my case, network sockets and local file access, yes, however it's not uncommon to use a third-party library for other forms of storage (e.g. rocksdb).
There'd be many instances. For cases where blocking is unexpected (small critical sections, no blocking I/O), I keep two request processing threads per HW thread, which can be 64+ for larger server instances. Even maintaining per-CPU I/O rings would still require multi-threading.
There's some indirection that's necessary with collecting CQEs with multiple rings. Either a thread needs to be dedicated to waiting for completions for every I/O ring instance, or a single thread with an epoll mechanism for determining which ring to process.

There's alternative models, but honestly keeping a free list of SQE indexes, where each CPU can cache a subset, and then call into a single ring isn't hard to implement. There's just an "iffy" (but correct) factor for the reason I stated above.
If there's better ways to go about this, I'd be happy to explore.

There are a number of reasons, this is the most important one:

The general reason is that we look at adopting io_uring in the framework so it works with existing code and applications.
If we were building a framework from scratch, it could be centered on the async model of io_uring, but that is not what we're doing.

We just had some discussions around this topic in the tokio discord chatroom. The tokio runtime works similar to the .NET runtime: User-code can be executed on a multithreaded threadpool, and is generally not concerned about on which thread it runs. This means IO handles (like sockets/files) could be used from more than 1 thread during their lifetime. In addition to this they could be migrated between threads even while IO calls are active, due to the utilization of a work-stealing user-space scheduler. We are now asking ourselves how to integrate io_uring into such a model.

So let me ask, why aren't you just using a ring per thread in your thread pool? Most users of io_uring won't be using thread pools at all, since one of the goal was not to need them as blocking processing will be done internally anyway.

Would it be allowed to perform each IO operation from a different ring - and e.g. always use the thread-local submission queue and ring to submit the request? That could be an option. If the first IO operation however somehow "binds" the IO handle to that ring it might not work out.
If we can submit IO operations on different rings, are there any restrictions around it? One thing I could think of is whether all operations submitted on the previous ring must have been completed. We might run into situations where the handle is migrated even though an operation is still in-flight, and where the next operation is aimed to be submitted from a new thread.

@Matthias247 .NET behaves similar. Adding some more specifics, which may be the same in tokio:
In .NET all on-going operations can be cancelled by closing the handle. This requires tracking all io_urings where the handle is used.
Does tokio allow users to block the threadpool threads? And can users wait on operations that are handled by io_uring?
Blocking threadpool threads is allowed in .NET. This includes waiting for operations that would be handled by io_uring.

In .NET all on-going operations can be cancelled by closing the handle (for example when calling Socket.Dispose). This requires tracking all io_urings where the handle is used.

Yeah, there will be a similar challenge for this in tokio too. Destructors for IO operations could be called at any time - there are no guaranteed run to completion semantics. And we need to at least make them safe. There are 2 strategies for that:

Block the current thread inside the destructor until the IO operation finishes
Mark the operation as cancelled but still let it continue to run. This requires users to pass the ownership of buffers to the runtime, so that those can still be safely utilized while the background operation continues to run.

Does tokio allow users to block the threadpool threads?

It has a single-threaded and multi-threaded mode. In the multi-threaded mode we could theoretically block the thread-pool (e.g. in order to wait for cancelled operation to complete - which was probably your background question). However it comes with a variety of gotchas. One is that that in application with lots of cancellations - e.g. a webserver which terminates lots of keep-alive connections through timeouts - we will block the threadpool very often and ruin performance.
Blocking for an operation to complete will however require that the ring runs outside of the current thread - or last least to "migrate it away" before entering the blocking mode -otherwise the thread would deadlock by waiting on itself.
So this mode favors running "uring threads" outside of the normal threadpool executor threads.

And can users wait on operations that are handled by io_uring?

They would be able to asynchronously await the operations. Theoretically users could also
// Block the current thread until a Future resolves
let result = block_on(async {
    io_future.await;
});

but that is not necessarily something that needs to be supported.

For context, I'm another maintainer of Tokio. As mentioned, we have a work-stealing based runtime where sockets (and other resources) may migrate across threads.
Thinking more about the problem, the goal we have isn't so much to be able to submit from multiple threads. We could have a ring per thread. However, there is a bunch of functionality that is per ring. For example, buffer pools, registering FDs, etc... Also, we don't really care if the same thread that submits an event gets the completion.
If, for example, if there were a way to create one ring per thread but then associate these rings in a "cluster" of some kind, this would be sufficient. In this case, if an FD, buffer, ... is registered with any ring in the cluster, it is registered with all rings of the cluster. Additionally, completion events could be made available in any of the rings in the cluster.
@axboe would something like that be a plausible direction?

You can share the async backend between rings for all your threads, so the overhead should be fairly minimal.

@axboe How do you do this? I can find nothing in the man pages or tests explaining or showing how to do this.

@yxhuvud I need to get that documented...
But basically, you setup the first ring as usual. Then for subsequent rings where you want to share the async backend, you set io_uring_params->wq_fd to that first ring file descriptor, and ensure that you set IORING_SETUP_ATTACH_WQ in the setup flags as well.
That's it.

Done: https://git.kernel.dk/cgit/liburing/commit/?id=5fe0cc25d9e6f604049ef1ce3194df8b449d39c5

@axboe, just to make sure I understand correctly, when you use IORING_SETUP_ATTACH_WQ, the rings share the async backend, but the completions are still sent to their respective rings, correct? That is, the interface that the user-space application sees is the same, though the backend is shared?

That is, the interface that the user-space application sees is the same, though the backend is shared?

Correct, it behaves the exact same way.

I don't know if there have been developments in this space.
Supporting starting operations from arbitrary threads would be a nice way to adopt io_uring in existing applications and frameworks.
Consider:
int rv = recvmsg(...)
if (rv == -1 && errno == EAGAIN)
{
   epollctl(...)
}

These two system calls could be a single call against io_uring.
Though it doesn't leverage the full potential of io_uring, it will improve performance and can be applied to existing frameworks which were not designed for the io_uring model.

That's just why most old threading based programs need to be reconstructed, rather than waiting for io_uring to compromise.
For example, we started to write our project in the last few years with modern C++, and it is based on coroutines per thread. We deem it as the sanest thing to create a ring per thread, and currently submit to it among coroutines.

Thanks for all the contributions! I found this discussion very enlightening. In a single threaded application the io-ring is pretty easy and straight forward to use, which is a great achievement.
However, in the multi-threaded case, one thing is not entirely clear to me:
Suppose I use one io-ring per thread. If one of the threads now starts a computationally expensive task or is blocked for other reasons (third-party library), it's io operations will starve in completion, although there are other threads, that could easily handle them. I don't see a nice solution to that right now.
If the application makes sure to prevents races, is it ok for different threads to access the same io-ring? Is it okay for one thread to poll for completions, while another thread submits operations?

If the application makes sure to prevents races, is it ok for different threads to access the same io-ring?

It's fine, the problem is when apps modify/access SQ and/or CQ (including tail/head pointers) in parallel.

Is it okay for one thread to poll for completions, while another thread submits operations?

Yes.
In both cases there might be minor performance implications because of internal implementation details.

I'm closing this one, one of the core tenets of io_uring is that you should not share a ring if you can avoid it. Either implement the sharing so that you have a single thread submitting, or have a ring-per-thread.


A logo for the project

cc @thelounge/maintainers.
We should think of a logo for our project.

github org logo
favicons for the client
optionally logo on the site?

This could be a good inspiration https://www.google.ee/search?q=lounge+logo&tbm=isch

I think a couch/lounge chair would be fitting, something like

I think something liek that but incorporated with something liek a speach bubble. A way to make it clear that it's about a place to congregate to discuss, not just to like .. look at each other or something.

@YaManicKill like that?

:ship:

@guibbs, if you still want to offer your help, now is a good time to speak up :P
FYI, he is a former colleague who happens to be really good with logos. @guibbs, do you have some example of your recent work? I don't have them on hand.

I'm adding the 2.0.0 milestone for now, it would be truly great if version 2 comes with its very own logo! :-)
I know @guibbs has been looking at options the last few days. Feel free to post any preliminary work here, but no pressure!

After some discussion on IRC, here's my personal favorite:

@simonv3 also proposed an interesting idea:

What do you think about this?
Font is Exo 2, Open Font License of course.

Here another one, which works as a couch and message pun, so to speak

I really like both, @elioqoshi! Is it possible for you to make a logo with just the speech bubble/sofa, for something like the GitHub profile image?
Thanks!

@MaxLeiter Sure! We can do all that, once you guys decide on it :)

Just some food for thought: this project was started under the name "The Lounge" with a meaning of location/establishment/bar, not the couch type.
Actually, it was even a suggestion from @erming himself (who built Shout, the upstream project of this fork) who referred to it as a place to hang out.
I know it's much harder to represent a lounge bar than a lounge couch in a logo lol, but I just wanted to give some context. I'd be equally happy with an abstract shape rather than actually representing as a log what the name of the project is.

@astorije I do realize that, but then again a logo should spoil the conversation, not explain it literally. That's how I see it at least. I do think we need a tagline though, to make it easier explaining it

I think that those logos do explain that concept fairly well by themselves. May not be exactly 'establishment/bar', but in terms of a place to chill / hang out the lounge couch motif does fairly well imo.
As an aside, those logos are really nice, @elioqoshi. The two top cushions do contribute a bit to the vibe being conveyed, but the line separating them does come off as a touch distracting in terms of the whole image. I wonder how it'd look with that top line separating the cushions at half the width it already is?

@DanielOaks Thanks!
Line widths should stay the same, as the style would change then abruptly. Why do you think it's distracting? Do you think we should remove it altogether?

@elioqoshi That's fair. Having the line there makes sense technically. Couch, two cushions, etc. However, in the scope of the logo I think it reduces recognizability of the couch. Just that extra moment of "wait what's this" before they realise "oh it's a couch".
The little speech-bubble tick down the bottom feeds everything together really well though, that's nice.

I like the speech-bubble tick knowing what it is, but I think someone unfamiliar with Lounge/other examples posted here may not recognize that it's part of a speech bubble.

@MaxLeiter I did some tests with a few people, asking what they see here, and they instantly said "couch" and a "message bubble". I think it's rather clear conceptually.
It might look better without that vertical line also

Can you try making the last couch same dimensions instead of wide?
On Mon, 17 Oct 2016, 12:19 Elio Qoshi<EMAIL_ADDRESS>wrote:

@MaxLeiter https://github.com/MaxLeiter I did some tests with a few
people, asking what they see here, and they instantly said "couch" and a
"message bubble". I think it's rather clear conceptually.
It might look better without that vertical line also
[image: lounge]
https://cloud.githubusercontent.com/assets/5436686/19432135/7d1ee2cc-945b-11e6-8c42-3e9ca5adf4de.jpg
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/thelounge/lounge/issues/282#issuecomment-254155787,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAlb07Oc7sbMKc4Z6UQf5z0tDc0EbQxhks5q0z2GgaJpZM4IQNEY
.

@xPaw wouldn't look good. I tried to make the couch represent an envelope here as well, and envelopes are not squared.

Overall I like the logo (the version with line in middle looks better too). @astorije what do you think?
@elioqoshi how does this logo look like on 16/32px sizes?

Hey sorry, I didn't get a notification about this. Will we go on with this? The Logo looks good also on smaller sizes.

@thelounge/maintainers - think you could make a decision relatively soon regarding logo? Maybe someone should make a poll?
Thanks for all your works @elioqoshi

I vote for the most recent version of @elioqoshi inside the circle. I think that's best.

I think I prefer the one without the circle but I'm fine with either - I just really want -one- d;

@xPaw @astorije @maxpoulin64
Let's get this for 2.2.0. We have had the shout logo for too long.
Do you have any objections with the one that @elioqoshi made (either the circle or the normal one)?

As of now I think it looks the best without a circle. We would need multiple sizes/colours of this logo to ship. E.g. for favicon notifications, mobile "app" logos.

Tomatosoup on irc also made this, which I think looks better than those posted above

Here are the most recent copies of that (one color, one black and white), with some changes suggested in #thelounge:

I quite like it -- both of them, although the first one is maybe the better one of the both. Good job!

Alright, very sorry I did not chime in this thread for 2 months. Life has been hectic and my time on The Lounge has been more directed at features and bug fixes, but I am turning this around for a bit.
I am also sorry to be that guy, but I will not be able to give a 👍 on logos that have been suggested so far. This is not to say I don't appreciate the work done, that's quite the opposite: I am thrilled to see such a thread with almost a dozen people participating and propositions from a few. This is very exciting.
 At no point I am trying to undermine your efforts or make this personal. This is just my feedback and opinions while trying to be direct.
@elioqoshi, 2 things tickle me with your suggestions. First of, your designs try to pack too much: it's a lounge chair because that's our name, and there is a tail because it's a bubble speech because we're a chatting app. While it makes a lot of sense among us right now, this is not obvious. The other thing is that although it's a simple design, it does not have the modern look and feel we can see in some of nowadays' logos, which contradicts a bit with the project, trying to be more modern than most clients out there.
@tomatosoupcan, your logos have a bit more this modern look and feel IMO, but I am tempted to say there is too much too. Reduced to 24px, there is no way to tell what's in the icons. But the real issue here I think is that it's a copy of the Google Allo logo as you mentioned on the channel. In the small size we'll display the logo, only the color will differentiate it.

I'm sure some will disagree, but I don't think we should rush this, and get this right instead. We have been without a logo since we started, it can wait a few more weeks :)
So what's next? I think we need extra help on this. I have started reaching out here and there and I will continue to do so for a while. I have had suggestions that apply well to us:

I contacted the person behind this tweet and will keep everyone posted here if there is any progress.
I got good feedback from https://www.fiverr.com. I am willing to participate financially for this (after all, if time is money, how many 💰 have I spent already on The Lounge? :D). Of course, to a reasonable extent, but they have simple offers that start at a few bucks and that could kickstart ideas. It's worth waiting for feedback from other sources listed here before heading towards this route however.
I was also recommended to get in touch with junior designers who are building their portfolios. Boston (where I live) has a lot of design schools and a ton of schools in general, which I should start looking at.

I will also try another set of connections the next few days and will post here when I make progress.

I don't have many requirements for a logo, but I want to list clearly the considerations to have in order to avoid frustrations:

Name: "The Lounge" (instead of "Lounge", as it's the full name of the project, lounge is the program/binary you run)
Format: 2 possibilities work for me:

"(Icon) + The Lounge": Website would have both in the main page and the header, favicon / GitHub org would have just the icon. On the app, depending on placement we could go for "(Icon) + The Lounge" or just the icon.
"The Lounge" with a distinctive "L" that we can use as an icon. By distinctive "L", I don't mean that it has to be visually different (like text in white and "L" in red or whatever), but an Open Sans "L" would probably not work. Example could be a handwriting type of font (as in elegant handwriting, not my hasn't-written-in-forever handwriting :D) and "L" could be uppercase cursive.

Tagline: None. I am not against a tagline/motto in general, but not in the logo.
Color: No restrictions or preferences whatsoever, but we have to keep in mind that this will very likely require us to rebrand the website and default theme in the app depending on the colors of the logo. I am not against that, and I actually don't think we should constraint the logo with our existing colors, especially since we are going to change them anyway, but I'm just saying this will be a consequence to not overlook. (We'll probably need to make a monochrome version to toggle on dark backgrounds.)
Font: No specific constraint except that it has to be an open font. As you probably know, fonts can be very expensive, and even though some fonts are very trendy these days, we cannot afford the thousands required for a Circular for example (Spotify, Airbnb, ...). Popular open alternatives are Roboto, Montserrat, Proxima Nova. Though these are good heading fonts, Google Fonts (and others) have suggestions for secondary fonts intended for content.
Icon: No specific agenda, but something not too complicated as it needs to render in small sizes. My only wish really is that it feels modern, but I know how subjective that can be (and I don't mean modern as in "I don't want vintage", someone suggested a neon-style look and I found that cute).

Obviously, if a design agency is willing to help us and start by telling me I got everything upside down and it's not how you draw logo requirements, I am more than happy to address things differently 😅.
So that's all for now :)

An unpolished idea I had last night in various sizes, a cloud back instead of a couch back. I think it may look too much like some sort of dessert:

once you mentioned "dessert", I couldn't unsee it.
It is also not really recognisable as a "couch/lounge" even at bigger sizes

Hey @astorije
would you be so kind as to elaborate on what modern design looks like?
Seeing @elioqoshi's proposals for example, those are modern logos that incorporate flat, minimalistic design concepts combined with a modern open font.
You also mentioned the designs were not obvious. How many designs out there are obvious? The Nike logo, for example? That's not a problem at all once you establish your brand. Also, based on what you have just said, does your project name speak for itself - "The Lounge"?
Kind regards,
-Giannis

Hi @giannisk :)

would you be so kind as to elaborate on what modern design looks like?

As mentioned in my message, this is a very subjective point of view (and by far the most subjective in my message 😄) so this is a hard sell. I would not go as far as "those are modern logos" or "those are not modern logos", but more "in my own and personal opinion, these do not feel modern".
I would say however that recent rebrands I've seen have a distinctive look that I'm not seeing here. But again, very subjective, and it's very possible than a newcomer will show up with something that I like and you feel as modern, etc.

You also mentioned the designs were not obvious. How many designs out there are obvious? The Nike logo, for example? That's not a problem at all once you establish your brand. Also, based on what you have just said, does your project name speak for itself - "The Lounge"?

I probably made a poor choice of words, sorry. I actually don't want/need the logo to obviously represent The Lounge, or a chat app of some sort, etc. What is not obvious to me is the logo itself, i.e. that this bottom left triangle is supposed to represent the tail of a speech bubble in the shape of a couch.

I contacted the person behind this tweet and will keep everyone posted here if there is any progress.

I got contacted back by this person, and they want to work with us on this after the new year, so that's awesome news 🎉.
I will post here when I have news but that might be in a few weeks as they seem swamped at the moment.
I am very excited at the idea to have an awesome logo that we can print on cut-out stickers :D

@astorije Anything happened to that?


About to Launch App, met Unforeseen Problem

Hello, I'm 'Jake' Akhpan and I'm a developer with Placetrend, a Ghana, Kenya, and Botswana (West, East, and Southern Africa) based, Tourism-focused startup. We are currently in Ultra Stealth Mode and are supposed to launch a travel destination pictures platform (built almost entirely using Intel App Framework 3.0) on Monday, May 12. Fortunately for us, one of our testers was kind enough to alert us to the fact that when the 'More Pictures' button at the bottom of a panel was tapped and new images loaded into the panel, the app doesn't automatically scroll to the top of the page. Our non-implementation of this feature was quite frankly an embarassing oversight on our part and we were extremely grateful to the tester in question for bringing it to our attention.
However we've gone through the IAF 3.0 API and there currently exists no option to add a scrollToTop functionality, and every single one of the hand-rolled and jQuery plugin-based scroll to top methods we tried simply refused to work.
The only method that currently works is when we use the: $(".scrollToThis").get(0).scrollIntoView(); Unfortunately this simply jumps the user to an element at the top of the page and does not provide smooth scrolling.
We would be grateful if we could be shown how to implement the scroll to top functionality in IAF 3.0 (we're already 2 weeks behind launch deadline, so we would be considerably grateful for any help on this particular issue). Thanks in advance.
'Jake' Akhpan,
Lead Developer,
Placetrend.

Hi Jake,
This is an easy task.  You can bind the  panelbeforeload events and tell the panel to scroll to the top.  This will happen before the page transitions.  If you want smooth scrolling, use a third party plugin.

$("#pictures").on("panelbeforeload",function(){
   $("#pictures").get(0).scrollTop=0;
});

Thanks for your prompt response. However it seems I was a bit vague in my explanation of the problem. The panel containing the pictures being viewed by the user (let's call it '#pictures') has already loaded and is displaying pictures.
Our problem is: when a user views the travel pictures on the '#pictures' panel, scrolls to the bottom of the [already loaded] pictures panel and taps a 'more pictures' button at the bottom of the panel, we run a function that loads pictures into this [already loaded] pictures panel ($.ajax to load the picture, and $().html to insert them into a div within the '#pictures' panel), however the app doesn't scroll the user back to the top of the '#pictures' panel after the pictures have been loaded into the panel, and none of the methods we've tried so far works (with the exception of '$("#pictures").get(0).scrollIntoView()' which merely jumps the user to the top of the view).
The '$(".scrollToThis").get(0).scrollIntoView()' which we currently use works adequately to return the user to the top of the page, the unsmooth jumping was our reason for looking for a possibly smoother, more native-like alternative. However if there isn't, we'll continue using the current method until we learn of a better alternative.
As a sidenote, I'd like to state that even taking the current issue into account, Intel App Framework 3.0 blows every other Javascript-based Mobile App Framework out of the water (we know because we've tried out practically every single framework on the market both jQuery and Angular based, they all promise a lot but always end up having multiple deal-breaking issues. In terms of ease of use, near-native handling, low learning curve, and multiplicity of useful features, mere words cannot describe the awesomeness of the Intel App Framework).
Once again, thanks for your prompt response. All the best.
Jake,
Placetrend.


When the websocket client is disconnected, the events is not removed.

https://github.com/AcalaNetwork/bodhi.js/blob/master/eth-rpc-adapter/src/eip1193-bridge.ts#L463-L468
when the client disconnects, those events are never removed, which can lead to memory leaks and some performance problems.

close by #497


The Git support doesn't handle local changes properly

There is a problem with the Git support where if local changes are made to one of the checked out repos in the workspace of Octopusci that it will fail to checkout the proper branch but still fall through and continue the build process with the incorrect version.

https://github.com/cyphactor/octopusci/pull/45


adopt midnight-smoker; add lint/typechecks to build

This adds midnight-smoker to our CI and adds a lint/typecheck step as well. Sorts package.json files and normalizes various scripts.

Current dependencies on/for this PR:

main

PR #109   👈

This comment was auto-generated by Graphite.


Add .git directory to .dockerignore file

Fixes #1973
There's no reason to have the .git/ directory in our docker build context,
having it present slows down builds and bloats cached images.
Signed-off-by: Daniel Harms<EMAIL_ADDRESS>

Does go when used with modules care about what git tag version of the code you are building? If so, then we don't want this because go won't realize it's building a git repository. If it doesn't then this looks fine to me

@anonymouse64 the module directive in the go.mod file lets go know what package it is building.  No .git directory necessary.

Codecov Report

Merging #1974 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #1974   +/-   ##
=======================================
  Coverage   44.09%   44.09%
=======================================
  Files         186      186
  Lines       11649    11649
=======================================
  Hits         5137     5137
  Misses       6216     6216
  Partials      296      296

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c3fe11e...b9f7dc1. Read the comment docs.


Feature minimum input length

Added in minimum input length with tests from https://github.com/angular-ui/ui-select/pull/326 and removed locale.

+1

Closing as #1291 has been merged.


Review treatment of issued at, issuer, audience #16

So far I implemented newer versions of resolve, lookup, unresolve, and OAuthRealm. They may require other parameters to include the issuer and audience, therefor making major changes to the code. Rather than just a Map<String, OAuthRealm> it’s now a Map<String, List<OAuthRealm>> where a helper function will go through the list to filter out the realms with the correct issuer and audience, going off of our talk of ways to determine realm bits depending on the existence of issuer and audience.
All tests are passing and builds correctly, tho I did have to remove all the .claim("iss", "test issuer") from the spec scripts and created a script that explicity uses iss and aud to make it explicit that these are testing the new claims rather than having them in ALL the scripts.

I had to create a separate class, ControlTooManyRealmsIT.java, with a different ruleset because the configuration of the reaktors are different. But I successfully created another file with the test realms specifically for the too many realms tests and all tests are passing.

Removed the class previously mentioned and used the @Configure annotation to change which .jwk file is to be used for the test