eclim extension causes performance issues when using gitgutter

environment

vim:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 29 2016 16:34:38) Included patches: 1-1683

vim-airline:
commit 70c16f4c46f11395bbbc30b2f0a6822669e7df87
Author: Christian Brabandt<EMAIL_ADDRESS>>
Date:   Thu May 12 22:27:26 2016 +0200

OS: Linux (RedHat)
if you are using terminal:

terminal: xterm (tmux)

$TERM variable: screen-256color

color configuration (:set t_Co?): 256

actual behavior
When the eclim extension is enabled, and eclim plugin is available, and using a plugin like vim-gitgutter or vim-signify which generate a large number of Signs, Vim UI is incredibly slow, including long pauses.
I believe this to be caused by the approach taken by the eclim extension, which is (it would appear):

ask eclim to retrieve a dictionary of every sign
eclim does a bunch of work on it in its ParseSign method
filter the list and do some processing to guess the number of errors/warnings

Unfortunately, this approach is horrendously inefficient when the number of signs is large, such as when using something like gitgutter and/or vim-signify which place signs to indicate "diff" markers vs. the source control version of the file.
Of course, the (successful) workaround is to set:
let g:airline#extensions#eclim#enabled = 0

Here is some profiling data to highlight the issue. To reproduce, what I did was:

start vim,
open a file with lots of inserts (i.e. lots of + symbols from gitgutter)
enable profiling
ensure the + signes are visible (say a screenful worth)
hold down j and k a bit.
Eclim is not even running

FUNCTIONS SORTED ON TOTAL TIME
count  total (s)   self (s)  function
  125   5.563972   0.557226  airline#extensions#eclim#get_warnings()
  125   5.006746   1.275774  eclim#display#signs#GetExisting()
53875   3.730972             <SNR>176_ParseSign()
  123   0.065040   0.006315  <SNR>179_OnCursorMovedNormalMode()
  123   0.054520   0.003879  <SNR>179_OnFileReadyToParse()
  123   0.049672   0.048999  <SNR>179_UpdateDiagnosticNotifications()
  125   0.019653   0.010202  airline#extensions#hunks#get_hunks()
  123   0.015946             <SNR>117_Highlight_Matching_Pair()
  125   0.015637   0.001752  airline#extensions#syntastic#get_warnings()
  123   0.014548   0.005301  eclim#util#ShowCurrentError()
  125   0.014122             airline#check_mode()
  125   0.013885   0.001324  SyntasticStatuslineFlag()
  125   0.013467             airline#extensions#whitespace#check()
  125   0.010944             289()
 1250   0.009817             airline#util#wrap()
  625   0.009503             airline#util#append()
  125   0.009451   0.004219  <SNR>145_get_hunks()
  123   0.009247             eclim#util#GetLineError()
  123   0.005878             <SNR>152_update()
  125   0.005232   0.001909  <SNR>145_get_hunks_gitgutter()

FUNCTIONS SORTED ON SELF TIME
count  total (s)   self (s)  function
53875              3.730972  <SNR>176_ParseSign()
  125   5.006746   1.275774  eclim#display#signs#GetExisting()
  125   5.563972   0.557226  airline#extensions#eclim#get_warnings()
  123   0.049672   0.048999  <SNR>179_UpdateDiagnosticNotifications()
  123              0.015946  <SNR>117_Highlight_Matching_Pair()
  125              0.014122  airline#check_mode()
  125              0.013467  airline#extensions#whitespace#check()
  125              0.010944  289()
  125   0.019653   0.010202  airline#extensions#hunks#get_hunks()
 1250              0.009817  airline#util#wrap()
  625              0.009503  airline#util#append()
  123              0.009247  eclim#util#GetLineError()
  123   0.065040   0.006315  <SNR>179_OnCursorMovedNormalMode()
  123              0.005878  <SNR>152_update()
  123   0.014548   0.005301  eclim#util#ShowCurrentError()
  125   0.009451   0.004219  <SNR>145_get_hunks()
  123              0.004205  <SNR>179_AllowedToCompleteInCurrentFile()
  123   0.054520   0.003879  <SNR>179_OnFileReadyToParse()
  125   0.004231   0.003172  airline#extensions#branch#get_head()
  125              0.002822  airline#parts#ffenc()

For profiling i use the following mappings:
" profiling
nnoremap <silent> <leader>DD :exe ":profile start ~/.vim.profile.log"<cr>:exe ":profile func *"<cr>:exe ":profile file *"<cr>
nnoremap <silent> <leader>DQ :exe ":profile pause"<cr>:noautocmd qall!<cr>

expected behavior
Airline extensions running within the bar (called regularly) should not do significant work, as this can lead to unintended UI slowdown. In particular, the eclim extension should not attempt to parse each and every sign that exists in the buffer OnCursorMoved (or however often it does this). The YouCompleteMe extension simply queries YCM for a number of errors/warnings. In order to integrate with eclim, I believe a similar approach should be taken.

Am 2016-06-20 14:46, schrieb Ben Jackson:

ENVIRONMENT

vim: VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 29 2016
16:34:38) Included patches: 1-1683

vim-airline:
commit 70c16f4 [1]
Author: Christian Brabandt
Date: Thu May 12 22:27:26 2016 +0200
*
OS: Linux (RedHat)
if you are using terminal: 	* terminal: xterm (tmux)

$TERM variable: screen-256color
color configuration (:set t_Co?): 256

ACTUAL BEHAVIOR
When the eclim extension is enabled, and eclim plugin is available,
and using a plugin like vim-gitgutter or vim-signify which generate a
large number of Signs, Vim UI is incredibly slow, including long
pauses.
I believe this to be caused by the approach taken by the eclim
extension, which is (it would appear):

ask eclim to retrieve a dictionary of every sign
eclim does a bunch of work on it in its ParseSign method
filter the list and do some processing to guess the number of
errors/warnings

Unfortunately, this approach is horrendously inefficient when the
number of signs is large, such as when using something like gitgutter
and/or vim-signify which place signs to indicate "diff" markers vs.
the source control version of the file.
Of course, the (successful) workaround is to set:
let g:airline#extensions#eclim#enabled = 0
Here is some profiling data to highlight the issue. To reproduce, what
I did was:

start vim,
open a file with lots of inserts (i.e. lots of + symbols from
gitgutter)
enable profiling
ensure the + signes are visible (say a screenful worth)
hold down j and k a bit.

EXPECTED BEHAVIOR
Airline extensions running within the bar (called regularly) should
not do significant work, as this can lead to unintended UI slowdown.
In particular, the eclim extension should not attempt to parse each
and every sign that exists in the buffer OnCursorMoved (or however
often it does this). The YouCompleteMe extension simply queries YCM
for a number of errors/warnings. In order to integrate with eclim, I
believe a similar approach should be taken.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub [2], or mute the
thread [3].

Links:
[1]
https://github.com/vim-airline/vim-airline/commit/70c16f4c46f11395bbbc30b2f0a6822669e7df87
[2] https://github.com/vim-airline/vim-airline/issues/1193
[3]
https://github.com/notifications/unsubscribe/AAO8vwLkzhfDbCMSZpEDuNboW3CFikHFks5qNouLgaJpZM4I5qZM

perhaps we can cache some values. However, It looks to me, that the most
expensive functions are coming from eclim? What exactly is ParseSigns()
doing or
eclim#display#signs#GetExisting()?
Best,
Christian

Well,
function! eclim#display#signs#GetExisting(...) " {{{
  " Gets a list of existing signs for the current buffer.
  " The list consists of dictionaries with the following keys:
  "   id:   The sign id.
  "   line: The line number.
  "   name: The sign name (erorr, warning, etc.)
  "
  " Optionally one or more sign names may be supplied to only retrieve signs
  " for those names.

function! s:ParseSign(raw) " {{{
  let attrs = split(a:raw)

  exec 'let line = ' . split(attrs[0], '=')[1]

  let id = split(attrs[1], '=')[1]
  " hack for the italian localization
  if id =~ ',$'
    let id = id[:-2]
  endif

  " hack for the swedish localization
  if attrs[2] =~ '^namn'
    let name = substitute(attrs[2], 'namn=\?', '', '')
  else
    let name = split(attrs[2], '=')[1]
  endif

  return {'id': id, 'line': line, 'name': name}
endfunction " }}}

Ultimately, it is not that the method itself is particularly slow (considering its contract), I suspect the issue is really that it being called hundreds of times, and each time is calling ParseSign for each sign (again, not particularly slow, just called thousands of times.
I don't think it is expected that this method be called so frequently. Though I suspect we should ask @ervandew for an opinion, as the expert! :)

I think a potential quick solution would be to modify airline#extensions#eclim#get_warnings() to use the location list (getloclist(0)) instead of using signs. There is no guarantee that the location list was set by eclim, but the same goes for the signs as well.
I've never used vim-airline, so forgive my ignorance, but based on this ticket it seems like plugins like this will be called very frequently (cursor moves being the most common), but in the case of file validation errors, those are changing much less frequently (in the case of eclim, only on file write), so information like this should probably be cached, in which case it probably wouldn't matter if this plugin used signs or the location list. If vim-airline supported some sort of argument when registering the plugin to indicate how often the information changes, then that could help plugins like this potentially avoid unintended bottlenecks without each one having to jump through autocmd hurdles etc. (again, forgive my ignorance if this already exists or isn't wanted/feasible/...)

can you check, if chrisbra/vim-airline branch eclim fixes your problem?

Unfortunately, I get tracebacks using that branch.
What I did:
   122  18:32   git remote add chrisbra https://github.com/chrisbra/vim-airline
   123  18:32   proxycmd git fetch chrisbra
   124  18:32   git checkout chrisbra/eclim

Then on starting vim:
Messages maintainer: Mike Williams<EMAIL_ADDRESS>"tpri/libMsg-Protobuf/TpriProtobuf_MessageProcessor.cc" 1167L, 39085C
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E116: Invalid arguments for function get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E15: Invalid expression: exists("s:eclim_errors") &&  get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E116: Invalid arguments for function get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E15: Invalid expression: exists("s:eclim_errors") &&  get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E116: Invalid arguments for function get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E15: Invalid expression: exists("s:eclim_errors") &&  get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E116: Invalid arguments for function get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E15: Invalid expression: exists("s:eclim_errors") &&  get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E116: Invalid arguments for function get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E15: Invalid expression: exists("s:eclim_errors") &&  get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E116: Invalid arguments for function get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E15: Invalid expression: exists("s:eclim_errors") &&  get(b:,  airline_changenr, 0) == changenr()
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr
Error detected while processing function airline#extensions#eclim#get_warnings:
line    2:
E121: Undefined variable: airline_changenr

Did i miss something?

Btw - thanks for taking a look at this. Much appreciated!

Urgs, sorry for that stupid typo.Fixed it

could you please test, if #1197 fixes it?

Apologies! I'll try and test it today. Thanks again!

On 1 Jul 2016, at 10:13, Christian Brabandt<EMAIL_ADDRESS>wrote:
could you please test, if #1197 fixes it?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.


x/tools/gopls: gopls semantic token registration problems

What version of Go are you using (go version)?

$ go version
go version go1.16.3 darwin/arm64

Does this issue reproduce with the latest release?
It does reproduce with gopls 0.7.2
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/matt/Library/Caches/go-build"
GOENV="/Users/matt/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/matt/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/matt/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/opt/local/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/opt/local/lib/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.16.3"
GCCGO="gccgo"
AR="ar"
CC="/usr/bin/clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/7w/6mwnkkbn6jvdl27ng11c9zf00000gn/T/go-build4006803649=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?
I'm experimenting with the gopls semantic tokens support. I've enabled it in the server options, and things are working. But, I'm having an issue with the capability registration behavior.
gopls does not report a value for semanticTokensProvider. My understanding is this is intentional, and dependant on the result of a workspace/configuration request. This matches what I'm seeing.
However, with my default setup, my client was never receiving any client/registerCapability at all, for semantic tokens or anything else. It seems that my client must indicate that it accepts dynamic registration for the didChangeConfiguration client capability to receive any registrations at all.
Interestingly, my client is also passing in false for the workspaceFolders client capability. But, gopls is attempting to register workspace/didChangeConfiguration and workspace/didChangeWorkspaceFolders. I would have not have expected to see the workspace/didChangeWorkspaceFolders registration there. Perhaps this is an unrelated problem, but I figured I'd let you know just in case.

However, with my default setup, my client was never receiving any client/registerCapability at all, for semantic tokens or anything else. It seems that my client must indicate that it accepts dynamic registration for the didChangeConfiguration client capability to receive any registrations at all.

Interestingly, my client is also passing in false for the workspaceFolders client capability. But, gopls is attempting to register workspace/didChangeConfiguration and workspace/didChangeWorkspaceFolders. I would have not have expected to see the workspace/didChangeWorkspaceFolders registration there. Perhaps this is an unrelated problem, but I figured I'd let you know just in case.

Good catch on both of these--thank you for reporting! These are our mistakes, and I'll send a CL to fix them ASAP.


Confusion in the routes.add example

In the first example: routes.add('blog', '/blog/:slug'), the first argument is the page and the second is the pattern.
But then under API:: routes.add(pattern, page), should that be  routes.add(page, pattern) instead?

I think it's correct but I the information which I understand.
Choices :

routes.add(name, pattern = /name, page = name)
routes.add(pattern, page)

Case :

routes.add('blog', '/blog/:slug')

will be mapped to the 1st choice and page = name by default.

routes.add('user', '/user/:id', 'profile') will be mapped to choice 1

will be mapped to the 1st choice and page = profile

routes.add('/:noname/:lang(en|es)/:wow+', 'complex')

will be mapped to the 2nd choice and page = complex

If any wrong, Let's discuss!

Thanks @nuttikung that's all correct!


Passthrough all response status codes

Rather than only passing 403 and 404 through, and turning other 4xx/5xx responses into 500, pass them all through as-is.
This matches the behaviour of lpa-frontend and avoids logging an unnecessary error message.
#patch

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 79.56%. Comparing base (5a7eeb3) to head (ac9d3f5).
Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #432      +/-   ##
==========================================
- Coverage   79.58%   79.56%   -0.02%
==========================================
  Files          35       35
  Lines        1063     1062       -1
==========================================
- Hits          846      845       -1
  Misses        156      156
  Partials       61       61

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Cannot build under Win10 & VS2015

Hello,
I followed the instructions in the readme to build dokan-sshfs. I use Windows 10, Visual Studio 2015, SDK 10 and WDK 10 and I got these errors (the errors are duplicated, I post here only 2 representants):
dokan-sshfs\DokanSSHFS\Cache.cs(15,16,15,24): error CS0246: The type or namespace name 'NtStatus' could not be found (are you missing a using directive or an assembly reference?)
dokan-sshfs\DokanSSHFS\Cache.cs(95,29,95,45): error CS0738: 'CacheOperations' does not implement interface member 'IDokanOperations.CreateFile(string, FileAccess, FileShare, FileMode, FileOptions, FileAttributes, DokanFileInfo)'. 'CacheOperations.CreateFile(string, FileAccess, FileShare, FileMode, FileOptions, FileAttributes, DokanFileInfo)' cannot implement 'IDokanOperations.CreateFile(string, FileAccess, FileShare, FileMode, FileOptions, FileAttributes, DokanFileInfo)' because it does not have the matching return type of 'DokanError'.

Am I doing something wrong?

Hi @yaqwsx ,
Sorry the dependency was not updated.
I fixed it https://github.com/dokan-dev/dokan-sshfs/commit/68c206efed80389c8b3fd2787ce355a8bec57c33


[MYSQL] az mysql flexible-server import stop-replication: stop replication between source single server and target flexible server

Related command

az mysql flexible-server import stop-replication
Description

To stop replication between source single server and target flexible server

This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] The PR title and description has followed the guideline in Submitting Pull Requests.

[ ] I adhere to the Command Guidelines.

[ ] I adhere to the Error Handling Guidelines.

MYSQL

/azp run


Cannot get Recommendations  of different model types.

I have a table called user_views like shown bellow

And here is the code to config the recommendation i used
<?php

namespace App\Business\Recommendation;

use App\Models\Course;
use App\Models\Document;
use App\Models\Question;

trait HasViewsRecommendation
{

    public static $recommendations = [
        Document::class => 'suggested_documents',
        Course::class => 'suggested_courses',
        Question::class => 'suggested_questions'
    ];

    public static $recommendationCount = 5;
    private static function generateRelationAlgorithmArray(string $model, string $name): array
    {

        return
            [$name => [
                'recommendation_algorithm'         => 'db_relation',
                'recommendation_data_table'        => 'user_views',
                'recommendation_data_table_filter' => [],
                'recommendation_data_field'        => 'viewable_id',
                'recommendation_data_field_type'   => $model,
                'recommendation_group_field'       => 'user_id',
                'recommendation_count'             => self::$recommendationCount
            ]];
    }
    public static function getRecommendationAlgorithmArray(): array
    {
        $result = [];
        foreach (self::$recommendations as $model => $name) {
            $result = array_merge($result, self::generateRelationAlgorithmArray($model, $name));
        }
        return $result;
    }
}

And for sure I overided the the static function like this
class User extends Authenticatable implements  InteractWithRecommendation
{

    use HasFactory,
        HasRecommendation,
        HasViewsRecommendation,

    /**
     * The user recommendation config.
     * @return array
     */
    public static function getRecommendationConfig(): array
    {
        return self::getRecommendationAlgorithmArray();
    }

And i generated some recommendations using the laravel-model-recommendation table and here is some rows

Now based on my understanding .if the user logged in is of id 7 and i called the fuction php  $user->getRecommendations('suggested_courses'); I should get the First 5 rows that are of type Courses .But the thing is that i always get an empty array .
To better undestand the situation I inspected the source code and I think it"s because of this query

The target_type is hardcoded to be the same as the source type.

@RaidOuahioune
Many thanks for reporting the issue and creating the PR. You are 100% right :).


Refactor to split off dask and generalize graph builder

This refactors Pipeline, adding build() which returns a generic graph (currently as a dict). This can be turned into a task graph that works with dask, or can be used to make graphviz.Digraph. The internal use of dask.delayed is removed completely.
I think I am way more happy with this split. This opens the doors for, e.g., dropping the dask requirement completely, or implement a custom dask Collection on top of this.
I am not fully happy with the interface yet. I think what we have here now can be suitable as a low-level interface that we can build on top of. I am considering, among other things, splitting the graph into a class that providers some helpers such as compute(), or facilities to build a dask graph. Not sure exactly where this is going, but it may be useful to review now before such changes.

I'd even have a separate graph class that only has the encoding and graph primitives in addition to a task graph class that has the higher level ops like compute

This is essentially what a dask collection is (so original PR message). I am not sure this is the right interface for us, since we may frequently want to compute multiple intermediate results. Will need more thought before moving on.

I'd even have a separate graph class that only has the encoding and graph primitives in addition to a task graph class that has the higher level ops like compute

This is essentially what a dask collection is (so original PR message). I am not sure this is the right interface for us, since we may frequently want to compute multiple intermediate results. Will need more thought before moving on.

Not really. A dask collection is more like a node of the graph (with links to parents). So it defines a graph as a linked structure. I was talking about a graph class that has a useful encoding for the graph plus methods like dfs, add_node, etc. And a task graph class that knows how to call these methods to string together computations to get a certain result or make a dask graph.
The reason is that this lets us abstract away the graph fro m the rest. If this becomes complicated enough, we may want to switch to a library like networkx instead of implementing graph algorithms ourselves.

I'd even have a separate graph class that only has the encoding and graph primitives in addition to a task graph class that has the higher level ops like compute

This is essentially what a dask collection is (so original PR message). I am not sure this is the right interface for us, since we may frequently want to compute multiple intermediate results. Will need more thought before moving on.

Not really. A dask collection is more like a node of the graph (with links to parents). So it defines a graph as a linked structure.

Not really. A dask collection is a graph (given by a dict), and a set of keys.

I was talking about a graph class that has a useful encoding for the graph plus methods like dfs, add_node, etc. And a task graph class that knows how to call these methods to string together computations to get a certain result or make a dask graph.

My initial comment was on the task graph class, not the graph class

Due you guys prefer merging this, or do you want to see two more days of follow-up changes in the same PR?


Need a Favicon

Been forgetting this for awhile. Just drew a little baby that should look ok on most browsers.

Not an actual baby, but "baby" as in a "thing."


Regression in cshtml tilde URL handling in .NET 8 (UrlResolutionTagHelper is not used)

In the latest .NET 8 SDKs, we seem to have lost support for ~-prefixed URLs in .cshtml files. Among other problems, this will break existing Blazor Server apps.
Repro

Ensure you're using the .NET 7 SDK. Use global.json or whatever you like to ensure that dotnet --version returns a v7 number.
Create a Blazor Server app (dotnet new blazorserver). Run it and see that it works. If you check the HTML source, you'll see it contains <base href="/"> which is correct.
Now change to the .NET 8 SDK (for example by updating the number in global.json). You can delete bin/obj if you want.
Run the app now and see the layout is all broken. If you check the HTML source, you'll see it contains <base href="~/"> which is incorrect (note the extra tilde which should have been resolved on the server).

Further investigation
If you have a .cshtml file containing just the following:
@page "/"
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Hello

... then with .NET 7 it compiles as:
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
        {
            __tagHelperExecutionContext = __tagHelperScopeManager.Begin("a", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagAndEndTag, "82176862633516880c14e9c83eb1e6a7f89dfb1a6671f09513b882b3c813fea63105", async() => {
                WriteLiteral("Hello");
            }
            );
            __Microsoft_AspNetCore_Mvc_Razor_TagHelpers_UrlResolutionTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper>();
            __tagHelperExecutionContext.Add(__Microsoft_AspNetCore_Mvc_Razor_TagHelpers_UrlResolutionTagHelper);
            __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0);
            await __tagHelperRunner.RunAsync(__tagHelperExecutionContext);
            if (!__tagHelperExecutionContext.Output.IsContentModified)
            {
                await __tagHelperExecutionContext.SetOutputContentAsync();
            }
            Write(__tagHelperExecutionContext.Output);
            __tagHelperExecutionContext = __tagHelperScopeManager.End();
            WriteLiteral("\r\n");
        }

... whereas with .NET 8 it compiles as:
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
        {
            WriteLiteral("Hello\r\n");
        }

... and so it's clearly not resolving the ~ in the href attribute value.

This is blocking aspnetcore's SDK update. https://github.com/dotnet/aspnetcore/pull/49034#issuecomment-1608571858. It's already been tracked down as a regression caused by https://github.com/dotnet/razor/pull/8857 and both https://github.com/dotnet/razor/pull/8871 and https://github.com/dotnet/razor/pull/8877 are proposed fixes. @jjonescz

Thanks for the extra info. Razor folks, please feel free to close this issue if it's duplicating something else that tracks this.

Fixed by https://github.com/dotnet/razor/pull/8871.

cc @jjonescz , @333fred , @jaredpar

@surayya-MS why did you re-open this issue? Do you believe the fix here did not fix it?

Sorry, it was a mistake. Closing the issue.


Add test for IE intranet mode

What kind of test?

So, here we force IE in intranet mode to full-page checkout rather than checkout in a popup:
https://github.com/paypal/paypal-checkout/blob/master/src/lib/eligibility.js#L12
Need to add a few tests to make sure this works as expected.
Can probably base it off these test:
https://github.com/paypal/paypal-checkout/blob/master/test/tests/legacy/setup.js#L72
https://github.com/paypal/paypal-checkout/blob/master/test/tests/legacy/customclick.js#L473
https://github.com/paypal/paypal-checkout/blob/master/test/tests/legacy/hybrid.js#L271

By full page checkout, do you mean opening a new tab? Also, why not checkout in a popup?

IE in intranet mode doesn't work in a popup, or a new tab. The only thing that works is doing a full redirect to Checkout -- i.e. window.location = 'paypal.com/...'

@vishakha94 can this be closed?

Fixed and live.


downloading issue

What steps will reproduce the problem?
1  search for tag on yande.re, gelbooru, zerochan (example: hanyuu).
2  pressed get all.
3  download all.
What is the expected output? What do you see instead?
download window opens; then downloading begins but it stops on first pic (0%). the list of pics creating without problems; I can get links and open any pic in browser etc. if I try to close the window, I get a crash:
Sorry
Grabber encountered a problem and crashed.
What version of the product are you using? On what operating system?
v4.1.1; v4.1.0. Windows 8.1
Please provide any additional information below if necessary.
i used it for 6 months without any troubles. before this issue I didnt open program for 4 weeks or so.

i have a very similar problem. wiped windows because of a rootkit, reinstalled imgbrdgabber, now it doesnt download a thing. win 8.1, newest version used. downloading a single file through the image itself isnt a problem, any form of batch just doesnt download a thing.

I've been getting this too, it recently started to occur After I installed the new version, not the old nor any that I have added to the sources bar are downloading, it either crashes or stays at 0% indefinitely until a crash.

This should have been fixed by the latest 4.1.2 release.
https://github.com/Bionus/imgbrd-grabber/releases/tag/v4.1.2
Please check it out and tell me if you still experience this issue.


WIP: src/entry_points/diff_fixtures: Create base CLI and functions for fixture diffing

🗒 Description
I thought I would give this a try. So far I've added an entry point diff_fixtures.py (like @danceratopz) suggested. This file will be used for both CI workflows and additionally for the CLI interface for local fixture diff'ing.
CI Workflows
diff_fixtures.py will have functions that the CI/CD workflows can use. My understanding is that we only need to be able to tell what files have changed. So far I am planning on adding additional json files that are created using these functions within the workflows, containing:

An ordered map of the fixture file name, to its content hashed (minus the _info section). Allowing us to check what files have changed specifically.
A cumulative hash of each fixture hash. Allowing us to simply check anything fixtures have changed.

Here is an example structure:
{
    "cumulative_hash": "ae79b35b75b95cea2fca707cb0750d08a65950160a63b50e5d9d4bba360e3a7e",
    "hash_map": {
        "cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_before_fork.json": [
            "6cb959f9baa5c76d60c5042c2434981bbc5994d065f2122b30f4998c9e075fa6"
        ],
        "cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_calls.json": [
            "e4e1affc2687a817d5cc971b3a6a73583b001c16091fefef0500d4f67514dbb5"
        ],
        ...

An additional step will be added to the build and release workflow, so that every time a PR is merged into main a new json file is created with the hashes. Similarly, I will add an equivalent file that is generated for each commit within a PR. This will be a separate workflow that will be added as an extenstion to the existing tox verifacations.
At this point we have 2 files that a comparison can be drawn from, using the cumulative hash first, and then the file by file hash afterwards. If we want to be more granular with diffing we can in the future. We can also only diff the files that we expect to change, to speed up the workflow.
Maybe a trigger within the PR will be nice to determine when the fixture diff should occur.
CLI Interface
The CLI command, I'm calling it dfx for now will be able to generate the same file locally and pull in the the json file generated from main, such that a diff can be created.
This will be more granular with more information, where as the workflows will ideally signal if a diff exists.
If we want we can add this to tox, but my gut feeling is that it should be a seperate utility.
🔗 Related Issues
https://github.com/ethereum/execution-spec-tests/issues/388
✅ Checklist

[ ] All: Set appropriate labels for the changes.
[ ] All: Considered squashing commits to improve commit history.
[ ] All: Added an entry to CHANGELOG.md.
[ ] All: Considered updating the online docs in the ./docs/ directory.
[ ] Tests: Included the type and version of evm t8n tool used to locally execute test cases:  e.g., ref with commit hash or geth 1.13.1-stable-3f40e65.
[ ] Tests: Ran mkdocs serve locally and verified the auto-generated docs for new tests in the Test Case Reference are correctly formatted.

I updated the fixture json comparison file to more granularly determine where changes occur.
We now have the following fixture json tree:
{
    "fixtures": {
        "cumulative_hash": "b71b7a8ae55c2e2490954f252b40ebd3b98da3e659130fd8f9f23a3bce26b6cc",
        "contents": {
            "state_tests": [
                {
                    "path": "state_tests",
                    "hash": "107dcae43f136fb5a6fb22020777edc54b2f990929be5e940b8da9442ae45c8a",
                    "contents": {
                        ...,
                        "shanghai": [
                            {
                                "path": "state_tests/shanghai",
                                "hash": "d8233b51482b811084565307274807cb47ade64f1faef8d7eb98ac1636045283",
                                "contents": {
                                    "eip3860_initcode": [
                                        {
                                            "path": "state_tests/shanghai/eip3860_initcode",
                                            "hash": "ec5777b2fc3b1c47810771e303fe7d0e75d72b3feb0717ce8f94066c4d15ad7b",
                                            "contents": {
                                                "initcode": [
                                                    {
                                                        "path": "state_tests/shanghai/eip3860_initcode/initcode",
                                                        "hash": "ec5777b2fc3b1c47810771e303fe7d0e75d72b3feb0717ce8f94066c4d15ad7b",
                                                        "contents": {
                                                            "create_opcode_initcode.json": [
                                                                {
                                                                    "path": "state_tests/shanghai/eip3860_initcode/initcode/create_opcode_initcode.json",
                                                                    "hash": "eb1e8aa17900b92f1d41db8ede48f40a43cafa886242c6a14f80cee79358fcad"
                                                                }
                                                            ],
                                                            "gas_usage.json": [
                                                                {
                                                                    "path": "state_tests/shanghai/eip3860_initcode/initcode/gas_usage.json",
                                                                    "hash": "9e8e463cbecc4d89d46e84ddf6c0f90a74f6d89891c235a511556798b70bb64a"
                                                                }
                                                            ],
...

This allows us to find out if changes occured at the following levels:

test type, fork, category (eip4844_blobs), test module and fixture file

When a PR is merged, during the build and release process on main we now also create the fixtures tree hash json artifact files. These can now be downloaded locally if the user has set thier github access token within thier .env file.


More Units

The original game had a lot of different kinds of units that each have their own images, animations, and sound effects.  The images can be obtained by extracting them from the original game's flash files, but it is harder to string them together into their animations.  This is a list of all of the animations for a given unit:

Walking (up, down, left, right)
Moving aside to allow another unit to pass (up, down, left, right)
Attacking (up, down, left, right)
Blocking, if applicable (up, down, left, right)
Special attacks (Cleric Heal, Furgon Shrub, Golem Ambusher Stone Throw)

Each frame of each animation typically consists of 3 images: uncolored, colored, and shadow.  These 3 images are overlapped to create a complete picture, but must be kept separate since the game is expected to apply a team color to one of them.  Ideally, the images should be placed on a spritesheet with a data file that describes how the images should be rendered to reproduce the animations.  Rendering information may include the position of each image within the frame or other effects that should be applied to the image (such as rotation, scale, and/or color effects).
If you would like to try to extract this information, please email<EMAIL_ADDRESS>so that I can send you the flash files.
This issue will be resolved once we've identified an efficient strategy for extracting animation data.

Just wondering if we could make an automated tool to make this easier? How have you extracted the Knight animations previously; was it by hand going through each frame or is there a structure to the frame numbering?

I desperately want something more automated, yes.  Because the method I used to create the knight animation was painfully manual.  Here is what I did in broad strokes:

I extracted all the knight colored, uncolored, and shadow images using an SWF decompiler.
I did pattern analysis on the extraction order of the images and it was helpful in determining which images were part of the same frame.  But, extraction order can not be relied upon to determine frame order within an animation.
I recorded high quality videos of myself playing TAO as I performed each animation with my knights.
I played back the videos frame-by-frame and zoomed into each frame to determine the relative position of each image to determine how they are positioned.
I recorded all the positioning data within the game source code.

But, this should not be necessary.  I made an attempt to reproduce the assassin animations by ONLY using positioning data from the SWF file (no video captures and comparison).  I was partially successful.  Enough so, that I know it must be possible.  But even then, I manually copied the positioning data from the SWF decompiler application to a JSON file.  While this is less painful and quicker than comparing with videos frame-by-frame, there must be a better way.  Even so, I was not completely successful.  Decompiling an SWF file produces a lot of data and it is difficult to ascertain the meaning of it all.

Do you have the original fla file for the game or the swf file so I can look into automating the extraction process?

Yeah, I asked the same thing earlier. Can you please PM us or let us know how to get ahold of the file?
One thing I'm thinking would be an "easy win" though would be the lighting ward. I'm thinking of tackling that one just using the images I got from the old website.

Absolutely. Functionality is most important. I have very high standards, it is true, but I like progress more than perfection.

Alright, getting a hang of this thing...
Some questions,
Can you clarify how specifically the coordinates work?
E.g.: for the screenshots I have:
{x:-2,y:12,c:[{id:133703,x:-15,y:-61},{id:133701,x:-15,y:-61},{id:133702,x:-15,y:-61}]}
So far I have been mostly doing trial and error. It would be nice if the three elements in the array where named parameters (shadow, base, color).
Also, did you have any patterns that you were using for the IDs? (I'm using 1337 for now ^_^)
Finally, do you have some thoughts about coding the sprites? Of course for the sample, I am just using separate images but I'm interested on trying out a sprite as well if there is some basic guidance about how to go about it.

I'm not sure if I have an official point-of-reference for the position offsets that you define in the sprite tuple.  I did a lot of trial-and-error when I created the Knight unit.  Once we come up with a good way of extracting the information from the original game files, I can start to define these things.
The IDs are based on the original game, but they are not sacred.  Semantic names/codes are better than opaque numbers.  I'm guessing that "coding the sprites" means you want to try using images extracted from the SWF?  Here's the URL.  I've enabled browsing of the Lightning Ward directory for your convenience.
http://www.taorankings.com/html5/units/5/

P.S. I think I'm assuming some things are obvious when they aren't.  So here's an explanation of the coordinates.
{
x:-2, // move the frame left 2 points
y:12, // move the frame down 12 points
c:[
{id:133703,x:-15,y:-61}, // move the sprite within the frame left 15 points, up 61 points
{id:133701,x:-15,y:-61}, // ditto
{id:133702,x:-15,y:-61} // ditto
]
}
Once you implement 3 sprites per frame, it becomes more important that you use the "c" coordinates to line up the sprites so that they fit together perfectly.  Once that is done, you can tweak the top-level "x" and "y" to position the unit/frame on the tile correctly.

@pongstylin @latin-programmer I have exported all of the assets from the main SWF. None of the data is structured, however I've made some progress with a 60% manual, 40% automated process. You can download the exported assets here. I will share with you my progress once I've finished testing and implementing the Witch animation.

I have uploaded the compiled HTML5 animations to the arenareborn site. I used an open source tool to export these. The code is really crappy but gives us a way to automate the sprite animations.
1175
1350_Cleric
1353
1356
1357
1358
1359_Egg
1364
1371_LWard
1374_Blank
1397_Shrub
1402
1403_BWard
151_KnightShadow
156_KnightHitArea
1576
1733_Witch
1996
2260_Assassin
2372
237_PyromancerShadow
23_BlackSpike
242_PyromancerHitArea
2475_Enchantress
2646
28
2813_Mud
2957
3088_Stone
3186
3188_Wispet
3271
3418_Ambusher
3501
3648_Frost
36_Bubbles
37
3803
38_Sparkle
3954_Rider
410
4101
42
4244_Dragon
43_Streaks
4481
4712_Furgon
4717_Trophy
4866
5010_Berserker
5163
53
5311_Knight
5313_Tile
5327_Barrier
5328_Die
5357_Damage
5364_Compass
5369_ScoutHitArea
5479_ScoutShadow
5484_ClericHitArea
54_Lightning
5578_ClericShadow
5581_BWardShadow
5583_BWardHitArea
5585_LWardHitArea
5588_LWardShadow
5593_WitchHitArea
55_Randomizer
566_Dspeaker
5675_WitchShadow
567_Pyromancer
5680_AssassinHitArea
57_Fire
5812_AssassinShadow
5817_EnchantressHitArea
5874_EnchantressShadow
5875_Glow
5880_MudHitArea
5935_MudShadow
5940_FrostHitArea
6013_FrostShadow
6014_BigStreaks
6019_StoneHitArea
6053_StoneShadow
6054_Shell
6127_DragonShadow
6132_DragonHitArea
6133_Explode
6134_FireBlast
6139_RiderHitArea
6216_RiderShadow
6217_DspeakerHitArea
6218_DspeakerShadow
6223_FurgonHitArea
6326_FurgonShadow
6351_ShrubShadow
6353_ShrubHitArea
6357_TrophyShadow
6360_TrophyHitArea
6365_WispetHitArea
6410_WispetShadow
6452_AmbusherShadow
6457_AmbusherHitArea
6466
6467_EggShadow
6469
6470_EggHitArea
6535_BerserkerShadow
6540_BerserkerHitArea
6541_Focus
6545
6583_Room
6621
6639
6677
6678
66_Boulder
6708
6758
6772
6779
6796
67_Slash
6801
6831
6836
779
993_Scout

That is good stuff

I played around with those animation pages.  I copied 1350_Cleric, decoded the JavaScript so that it was readable, then modified it to add the "red" color.  I had some thoughts:
http://www.taorankings.com/html5/cleric.html

Decoding the JavaScript was a bit of a pain.  I wonder if it is possible to use that open source tool to generate pages without encoding/packing the JavaScript into a smaller package.
I kinda like how it uses "data" URLs.  It is a decent alternative to creating spritesheets and certainly superior to fetching individual images.
The fact that 1350_Cleric doesn't include the shadow is unfortunate.  I wonder if there are any folders that combine all 3 images.  If not, then we need to figure out how to combine the shadow animation with the unit animation.
The positioning data isn't in a form compatible with how I've captured animations, previously.  But then, it doesn't need to be.  I'm still working out the best way to integrate these animations into the app.  But I'll wait until we can combine the shadows, first, which should be a good learning exercise.

I had a go at cleaning up the code more. I've extracted all of what I consider to be data into 3 files:

frames.js contains each frame's image as a data URI
places.js contains positional data about each frame's location within the 129x131 canvas
shapes.js creates img objects for each frame and draws frames to the canvas

I'll continue cleaning this code up.
The cleric animation still works, see here https://uat.arenareborn.com/c/.

You're kind of a useful guy to have around, you know that?  Removing all that noise was helpful for me to start seeing how things fit together.  For example, I notice that the shapes are scaling up the images by roughly 20x.  Then, the places are scaling it back down by exactly 20x.  I wrote a perl script that went through and modified both places.js and shapes.js so that no scaling was performed at all.  And, it still looks the same to my eyes.  After doing that, I started to see the coordinates I expected to see based on previous efforts to capture this data from the SWF.
So here's my next big goal and how I'll get there.  It'll be tough to pull off, but it seems to be possible:

Integrate the shadow sprite into the existing sprites.
Create a nodejs script that can eat an HTML file and spit out a JSON file that contains no code whatsoever.
Create PIXI code that can render the animation based on the JSON file.
Repeat for all gray units except lightning ward and barrier ward.
Create an app that sets up 2 teams with the default gray formation.  No PvP or bots yet, but you'll have manual control over both teams.

Step one complete.  I'm surprised it was this easy.  I figured it would work, but that the shadow would not be positioned where it should underneath the cleric without a lot of manual fiddling.  Fortunately, it only required one simple fiddle in step #5.  Here is what I did:

Import the shadow shapes to "shapes.js"
Import the shadow images to "frames.js"
Import the shadow sprite to "places.js"
Modify the main sprite to incorporate the shadow sprite frames into it.
Modify the shadow sprite transformation so that the position offsets are zero.

So here is the complete cleric animation, with simplified scaling:
http://www.taorankings.com/html5/cleric/
Next step, automated data extraction.

So, I've created a simple parser that can be improved, but it's a decent start. Source code is available in this repository. I've currently got two scripts to extract the places and shapes data into two JSON data files.
I am currently in the process of writing a script to take the generated animation files and extract all JSON form them. After this, we will need to find a way to use these JSON files to re-create the animations. @pongstylin Is this something we can work together on?

@Enijar
I don't actually plan on parsing JavaScript.  The JavaScript can be in any format.  It could be packed, unpacked, ugly, beautiful - don't care so long as it works.  I can be this flexible because of the technique I'm using to extract the data.  Basically I'm going to "mock" the canvas object/context and use dependency injection so that the JavaScript will use my "mock" objects.  Instead of the JavaScript drawing to a canvas it will draw to my data gathering code that will write out a JSON file with the compiled data.  It should be easier than parsing JavaScript to get the data.
But, even if I was to harvest data from "mock" objects, I have two choices.  Either I extract data from the main unit JavaScript and the shadow JavaScript separately and weave the data together.  Or, we combine the JavaScript first before I extract all the data at once.  The latter approach lends itself to collaboration and is less error prone.  You could create a script that helps you to efficiently combine the JavaScript so that it represents a complete unit + shadows.  You can easily verify to make sure the combination renders to a canvas correctly by using it in an HTML file.  Then, I harvest data from the combined JavaScript using my script.  Does this sound like a good plan to you?  If you're on board, just send me the combined JavaScript files and I'll do my magic.  In the meantime, I'll practice on the combined cleric JavaScript.

When I say parse, I really mean extract. I'm not suggesting we parse the JavaScript at program run-time; I'm suggesting we extract all of the JSON data for each unit's animation as shape and place data frames. We can then build a function/class to take JSON animation data for each unit and render animations from that data.
What I plan on ending up with is something like the following.
Animation (Data)
data/units/cleric.json
Animation (Code)
src/Unit/Cleric.js
There will be a separation between the data and source code.
We can make a canvas for each unit, like you're suggesting, and inject that canvas into a base renderer function/class and render it, like (ctx.drawImage(unitCanvas)).
I'm not suggesting to mix units into one file, I'm just suggesting an approach of extracting the animation data from the compiled SWF files.

I'm not sure if I'm interpreting what you're saying correctly, but it sounds like an idea that I've considered and discarded as unnecessary.  Basically, we don't have to extract data at all.  We can use the code generated from the SWF to render to a canvas as a staging area.  Then, we use the contents of that canvas as if it was an image and draw it to the game canvas.  It is certainly a viable strategy.  But if I can extract the data and render it to the game canvas directly without the staging area, then the game would enjoy better performance, which may matter on less powerful mobile devices.
Or, am I totally misunderstanding you?  I guess you could clarify exactly what would go into the JSON file and what would go into the JS file and whether we would use the JS file in game or if it would be thrown away once we're done integrating a unit into the game.

My only concern with using the generated code is that it is huge. If you open up the memory profiler in the browser dev tools you will see how much memory is used for just one unit animation. If we use this generated code for each unit (up to 20) this will almost certainly lag any player’s browser.
Essentially what my idea boils down to is extracting the data from the generated animation frames from the SWF decompiler and using that inside the game canvas to render in a loop. This will both improve the readability of animation code and improve rendering performance.
This was just my initial idea but I’m open to having this changed for your idea of using the generated animation code, so long as there is no performance hit to the user’s browser.

Now I think you're misunderstanding me.  heh.  I'm not suggesting we use the generated animation code.  Quite the opposite.  Could you give me an illustration of what you intend?  Perhaps I can do the same.

Ah, yes I can draw up a graphic tomorrow. Hopefully this will be a clearer representation of what I’m thinking. If you’re not planning on using the generated code then maybe we’re thinking along similar lines but we’re just not explaining to each other well enough.

@Enijar
I completed my demonstration.  I added a new branch to this repository.  Check it out and run these commands:

npm install
cd static/extract/
node extract.js

You will be inundated with data.  It is not in JSON format, but then this is just a demonstration of the technique.  Notice that it is using a "cleric.html" that came directly from the SWF extractor.  I did not need to unpack or beautify it or separate data from code first.  It just works.  But, it is only extracting data for 2 out of 3 sprites.  In order to extract all data for a unit at once, we need to first combine the shadow sprite with the other 2.  That is what I was suggesting that you would do to help me out.  Again, the code doesn't need to be pretty.  It won't make a difference when I run the code to extract the data.  I only intend to integrate the JSON file with the data into the game.  The code will ultimately be thrown away.
Does this make more sense than my earlier poor explanation?

I think I understand now. Just so I'm getting this correct. I see this as two main things that you want to achieve:
– Using generated code that I extracted from the SWFs, combine the shadows, base, etc. into a single canvas animation

Draw this canvas into the main game canvas

My process is the same but I propose we spend the time extracting a clean, human-readable set of unit animations from the generated code. The repository I linked you yesterday is still a work in progress, but essentially I want to have it do the following (automatically for each unit):
[decompile SWF] -> [extract animation data] -> [render animation data to canvas]
I will then create a generic unit renderer function that can take any unit animation data and render it to the game canvas. I will work on this when I'm back from work tonight, to get you a working version of all unit animations, with much more readable and performant animation code.

Yes, I think our goals are aligned, just a slightly different way of going about it. I can see step three taking the longest time to implement in the best way but for now I will continue down the route of combining and extracting animation data for each unit. I think my extraction scripts needs more refining but I'm confident I can get most of the grey units extracted with this method. Will keep you updated in this issue thread.

I've updated my branch.  The extract.js script now writes clean JSON data without any manual tweaking.  I even wrote a "test.html" page that uses the JSON to render the animation on a canvas.  But it is just a test page.  Step 3 in my next big plan is to render the animation using PIXI code.
I'm not done yet.  I need to test to make sure the script can handle the combined cleric+shadows JavaScript.  But before I do that, I wanted to give you an opportunity to look over the JSON file to make sure it meets your expectations.  I have some comments regarding it:

The frames and animations need to be anchored to a specific point on the game board.  Each tile on the board has its own point-of-reference.  From eye-balling the animation, that point-of-reference may be the top corner of the tile.  Using the JSON "width" and "height" we can center frames and animations on that point both vertically and horizontally.  I hope that would accurately position all units on a tile.
I doubt every unit has 177 frames.  For one thing, some units have special attacks and others don't.  So, we probably can't rely on the animation start and end indexes to be the same for, say, attacking a unit.  Assuming that is the case, we may need to manually modify the JSON file to spell out which frames to use for a specific animation.
Another thing missing from the JSON file is an indicator of which shape would be tinted with the team color.  You might think that every frame has exactly 3 shapes and it is always the 2nd one, for example.  But that won't always be true.  Some units, like the assassin special attack includes extra shape(s) for special effects.  So, we may need to add a key like "trim" to indicate that the shape represents the unit's accent parts that must be tinted to reflect which team it is on.  If we extract data from JavaScript that applies a "Red" color, for example, to the combined unit JavaScript, then the extractor can automatically pick up on which shapes have that color and apply the "trim" key instead of hard-coding that color into the JSON.

Ok, so I don't have a lot to do right now.  I've already finished upgrading the extractor to support combined unit+shadow animations.  In the process, I dumped the "htmlparser" library in favor of the "jsdom" library, which is far more powerful and allows me to accommodate HTML files that take different forms.  It's not infinitely flexible, so the extractor could very well need more tweaking once you show me your version of combined animations.  My only requirement at this point is that it is an HTML file that renders the animations to a canvas of the correct width and height.
But, in any case, I've integrated shadow images and shapes into the JSON file.  It even includes the aforementioned "trim" key.  At this point, I'm moving on to step 3 in my next big goal.  I'm going to try to run the cleric animations on the game board using PIXI rendering.

Just pulled in the extract_unit_data branch and it looks good. I'll finish up on my version and share with you.

The "Cleric" unit is now integrated into a new "classic" app.  I made many other changes as well.  I got tired of having so many uncommitted changes, so I pushed them to master.  But, I'm still bug hunting.

Glad to hear updates @pongstylin. I've been waiting to see how new the code pans out before I do to many changes in my end as it sounds like the code will look quite different when going in the new direction instead of the sprite/images approach.

I intend a few more tweaks to the JSON unit data. Also, I started work on the extract unit data branch to support extracting special effect data.  I'll prioritize finishing both. Once I do, you could make use of my extract script to generate JSON and use the Cleric as an example of how to use it.

Major breakthrough on two fronts:

Creating a combined JSON file for a unit HTML file and shadow HTML file is now fully automated.  The only required prep work is downloading the files of interest (from @Enijar's gold mine of a comment above) then running this command from within the "static/extract" directory:
node extract.js sources/assassin.html sources/assassin_shadow.html
The extractor now supports special effects.  I'm defining a special effect as something that is drawn without an image.  Special effects include the orange explosion for the assassin unit and the glowy white circles and spikes for the lightning ward.  So, this was an important feature.

I've pushed my changes to the "extract_unit_data" branch, but I'm not done yet!  The hard part is done, but I've got a couple things I'd like to address before I can let you dig in, @latin-programmer.

Upload the latest and greatest "Assassin", "Lightning Ward", and "Cleric" JSON files to the TAO Rankings website.  This means you won't have to mess with my extractor if you don't want to.
Modify the game to support the tweaked JSON format.

After that, the extractor still has room for improvement, but I'll focus on unit integration for now:

Special effects are converted to images before they are embedded into the JSON.
Special effects may come in multiple layers.  The JSON can potentially be made smaller by combining multiple contiguous layers of special effects into one image.
It would be nice if it was easier to test the output of the extractor rather without having to create individual HTML files for each unit/effect.

Ok, @latin-programmer.  I'm done uploading and integrating the JSON files.  Pull the latest changes from master.
The "classic" app serves as an example of how to load the JSON files.
The "Cleric" serves as an example of how to use the JSON files.
You will need to configure the animation offsets on your own.  The "src/tactics/core.js" file contains frame offsets for the "Cleric" and you can do something similar for the "Lightning Ward", except you won't need frame offsets for walking or turning since the LW doesn't move.  I'm honestly not sure what is included in the LW JSON file.  At the very least it will have a frame for just sitting there (stills.S) and a sequence of frames for attacking.  But from watching the animation there seems to be something else as well - perhaps a blocking animation?  Anyway, if you have any trouble, let me know.  Also, there are a lot of TAO YouTube videos out there that might help piece it together.  For sure I spent a lot of time with them while integrating the Cleric.

I integrated the assassin unit a few days ago, but it took a few days to come up with a means for triggering a special attack and to implement the assassin bomb special effects.  I got a little creative by creating a new triggering mechanism and drawing an original effect.  I'm hoping that it is a little more intuitive than it was in the original game, but not too obvious.
The next unit I'm going to conquer is the Pyromancer.

Integrated Pyromancer into Classic app.  Next is Enchantress.

It is probably not the laptop.  The new method may not be working in your environment.  Join our [https://discord.gg/JXbg8D](discord chat room) and we'll try to figure it out.

@pongstylin you were absolutely right, it was not the laptop, it was the environment (however, that said, maybe was not a bad excuse to try this Alienware laptop I got my hands on recently ^_^).
Am I the only working on Windows 10 here?
The problem is here:
NODE_ENV=development webpack --watch --progress --hide-modules & node src/app.js || true
In Windows, NODE_ENV is not a valid command (on Linux) it would be. Without doing anything, it fails with this:
'NODE_ENV' is not recognized as an internal or external command,
operable program or batch file.
Then it still starts the app using node but because it doesn't get a chance to build, the classic min file never gets generated.
Now, using https://stackoverflow.com/questions/11928013/node-env-is-not-recognized-as-an-internal-or-external-command-operable-comman/40967643
Found this command:
npm install -g win-node-env
After doing that, I no longer error, I get the following output (with parts omitted):
webpack is watching the files…
[…]
Asset      Size       Chunks                    Chunk Names
chaos-app.min.js  38.2 KiB    chaos-app  [emitted]         chaos-app
classic-app.min.js  38.6 KiB  classic-app  [emitted]         classic-app
faceoff-app.min.js  37.5 KiB  faceoff-app  [emitted]         faceoff-app
tactics.min.js  4.62 MiB      tactics  [emitted]  [big]  tactics
Entrypoint tactics [big] = tactics.min.js
Entrypoint faceoff-app = faceoff-app.min.js
Entrypoint chaos-app = chaos-app.min.js
Entrypoint classic-app = classic-app.min.js
The last line where when it was hanging. My old laptop was using most of the RAM at that point so I figured maybe node was not getting a chance to load. However, on the new laptop, I just cancelled via CTRL+C and then ran:
node src/app.js
I could then access the classic app (which what I was trying to do in the first place). So anyhow, long post, hope it helps someone that is trying to get started on the project and facing the same issue. I think the workaround should get me at least where I can start looking into this again.

I develop on Windows 10 with Git Bash and I configure npm to use the bash shell that comes with Git Bash.  The README tells you how to configure npm.

@latin-programmer @pongstylin FYI, might want to add cross-env package to the list of dependencies as it makes cross platform ENV settings more easy for devs to work with.

@pongstylin Another solution might be to add a Dockerfile. This might actually be useful as the project grows; especially on the server-side of things, with different services running.

It is certainly something to consider

Enchantress complete and pushed to master.  It required extra work to completely realize the "focusing" and "paralysis" game mechanics.  In other words, I had to manage the breaking of a unit's focus when they are attacked, moved, or turned.  Also, units can be paralyzed by one or more units and cannot move, block, or allow another unit to pass by while paralyzed.
Next is scout.  This should be the easiest of all the default gray units to implement.  The only thing of interest there is the LOS mechanic, about which I am thankfully very familiar.

+1 to the idea of being able to have multiple units paralyse a single unit. Regarding the Scout's LOS: do you have the algorithm for it? I could never figure out the formula; just sort of winged it when I played.

Yeah, I think the original game did support a unit being paralyzed by more than one unit.  I don't remember ever using or seeing the tactic where you paralyze your own units then defocus to free them.  So, it is correctly implemented here as well.
First of all, I'm assuming it IS a formula.  I don't think the original game hard-coded the list of tiles that an arrow passes through for every single angle and distance of attack.  I could certainly do that, but I don't want to.  So, the formula should involve drawing (not visually) a line (this is the LOS/Line-Of-Sight) between the center of the source tile and the target tile and testing if this line intersects any occupied tiles along its path.  A common algorithm for this kind of use case is "Ray Casting".
But, based on my experience using the scout, I expect it should not be super precise.  That is, it must be closer to the tile's center than just inside its border.  So, a formula is not enough.  I must determine the size and shape of a given tile's hit area - the area the line/arrow must intersect to be considered a "hit".  So, I'll start by using tile's full size as its hit area.  Then, I will experiment by telling the scout to attack various tiles.  The LOS algorithm will highlight all the tiles it thinks the arrow passed through.  If, based on my experience, I determine it passed through too many tiles, then I will adjust the size of the tile hit area until I get the desired result.  The tile hit area itself might not be a diamond, but perhaps a rectangle or oval.
Wish me luck!

Here is "Ray Casting" at work.  All highlighted tiles represent tiles that were checked to see if they were intersected by the line.  It demonstrates my attempt to only check tiles that have a chance of being hit as an optimization.  Darker tiles were checked first, lighter tiles were checked after.  Green tiles did not get hit, red tiles did get hit.  The bottom scout got the correct LOS result.  The top scout hit too many tiles since my hit area is the full size of the tile.

I got the desired result by shrinking the tile size only a little.  This image serves as a bit of a cheat sheet on how to aim the arrow such that it hits the unit you desire.

The Scout is now available on the classic app.  Moving on to the final unit to complete the set: Witch.

Met my goal of completing the default gray set app by end of November.  Now I'll focus on bug fixes, polish, and code architecture for December with the intent to release the new app to TAO Rankings for Christmas so that people can play with it.

I'm closing out this issue.  I created a new issue to represent the effort to implement the Lightning Ward.


AP-2177 CFE V4 request parse

AP-2177 CFE V4 request parse
Link to story
Must Read:
I've extended this Applicant.rb model method to V4 is that ok?
  def maintenance_per_month
    return '0.0' unless valid_cfe_result_version?

    format('%<amount>.2f', amount: cfe_result.maintenance_per_month).to_s || '0.0'
  end

  def mortgage_per_month
    return '0.0' unless valid_cfe_result_version?

    format('%<amount>.2f', amount: cfe_result.mortgage_per_month).to_s || '0.0'
  end

   def valid_cfe_result_version?
    [CFE::V3::Result, CFE::V4::Result].any? { |klass| cfe_result_type == klass.to_s }
  end

LEFT TO DO:

[ ] the legal aid application factory uses cfe_v3_results but change this to v4

Checklist
Before you ask people to review this PR:

[ ] Tests and rubocop should be passing: bundle exec rake
[ ] Github should not be reporting conflicts; you should have recently run git rebase master.
[ ] There should be no unnecessary whitespace changes. These make diffs harder to read and conflicts more likely.
[ ] The PR description should say what you changed and why, with a link to the JIRA story.
[ ] You should have looked at the diff against master and ensured that nothing unexpected is included in your changes.
[ ] You should have checked that the commit messages say why the change was made.

Codecov Report

Merging #2582 (8475a69) into master (9a1beea) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##            master     #2582    +/-   ##
==========================================
  Coverage   100.00%   100.00%
==========================================
  Files          521       522     +1
  Lines        10528     10668   +140
==========================================
+ Hits         10528     10668   +140

Impacted Files
Coverage Δ

app/models/applicant.rb
100.00% <100.00%> (ø)

app/models/cfe/base_result.rb
100.00% <100.00%> (ø)

app/models/cfe/v3/result.rb
100.00% <100.00%> (ø)

app/models/cfe/v4/result.rb
100.00% <100.00%> (ø)

app/services/cfe/base_service.rb
100.00% <100.00%> (ø)

app/services/cfe/create_assessment_service.rb
100.00% <100.00%> (ø)

...p/services/cfe/obtain_assessment_result_service.rb
100.00% <100.00%> (ø)

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 9a1beea...8475a69. Read the comment docs.


gherkin(TypeScript): IGherkinOptions need createReadStream property

Summary
For context: I am currently trying to update Cucumber in the WebdriverIO framework.
When creating a gherkinMessageStream the fromPaths method requires an IGherkinOptions interface in which createReadStream is optional, e.g.
const gherkinMessageStream = GherkinStreams.fromPaths(this._specs, {
    defaultDialect: this._cucumberOpts.featureDefaultLanguage,
    newId: () => this._cid
})

This fails if the path array not is empty in pipeSequentially.
Expected Behavior

I must miss something here because TypeScript should actually fail compile if IGherkinOptions is defined as:
export default interface IGherkinOptions {
  defaultDialect?: string
  includeSource?: boolean
  includeGherkinDocument?: boolean
  includePickles?: boolean
  newId?: IdGenerator.NewId
  createReadStream?: (path: string) => Readable
}

and fromPaths is implemented as such:
function fromPaths(
  paths: ReadonlyArray<string>,
  options: IGherkinOptions
): Readable {
  const pathsCopy = paths.slice()
  options = makeGherkinOptions(options)
  const combinedMessageStream = new PassThrough({
    writableObjectMode: true,
    readableObjectMode: true,
  })

  function pipeSequentially() {
    const path = pathsCopy.shift()
    if (path !== undefined) {
      const parserMessageStream = new ParserMessageStream(options)
      parserMessageStream.on('end', () => {
        pipeSequentially()
      })

      const end = pathsCopy.length === 0
      // Can't use pipeline here because of the { end } argument,
      // so we have to manually propagate errors.
      options
        .createReadStream(path)
        .on('error', (err) => combinedMessageStream.emit('error', err))
        .pipe(new SourceMessageStream(path))
        .on('error', (err) => combinedMessageStream.emit('error', err))
        .pipe(parserMessageStream)
        .on('error', (err) => combinedMessageStream.emit('error', err))
        .pipe(combinedMessageStream, { end })
    }
  }
  pipeSequentially()
  return combinedMessageStream
}

It should fail at
      options
        .createReadStream(path)

because createReadStream is potentially undefined.
Current Behavior

While I am sure my integration is not yet working and I am missing some peaces I am expecting not to see an error like this with the new TypeScript interfaces.
Possible Solution

Not sure how the error happens in the first place. Haven't had the chance to dig into it, therefor I can't provide a solution yet.
Steps to Reproduce (for bugs)
Run:
GherkinStreams.fromPaths(['/foo/bar'], {
    defaultDialect: 'en',
    newId: () => 'someid'
})

## Context & Motivation

<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->

## Your Environment

<!--- If you're reporting a bug, include as many relevant details about the environment you experienced the bug in -->
* Version used:
* Operating System and version:
* Link to your project:

I'll have a look at a fix for this.
The reason that TypeScript isn't complaining about a potentially undefined value is that we have a tsconfig that is too lax. We'd like to improve that, but it's a fair amount of work since it will affect the whole monorepo. See #1138 for more details.

Thank you for the fix 👍


Loader fails?

I have an app.html file which contains the following code: <link rel="import" href="../bower_components/paper-button/paper-button.html"> and I have import './app.html'; in my index.js. This however results in:
You may need an appropriate loader to handle this file type.
| <link rel="import" href="../bower_components/paper-button/paper-button.html">

This is my webpack config: https://gist.github.com/drager/fa08ec7d252f54124b0880dac779b6ca

@drager Sorry for the delayed reply. Could you share your package.json as well? I'm not able to reproduce the issue using https://github.com/aruntk/polymer-webpack-demo

@aruntk: No problem, I resolved the issue. The problem was caused because Webpack didn't pick up my configuration file (which wasn't wc-loaders fault). So, now it works when it is picked it up.


keeping track of in- and outfile versions

Hypothetical case of running a script several times and copying the resulting outputs to various places. We might later not know which version relates to which run.
For that reason it would be really useful if there was an option (maybe opt in, in case users have massive files/don't need that info?) to automatically store the md5sums of the in- and outfiles with the log.

Closed in favour of #25 where discussion will take place.


Custom SVGO plugins not loading

🐛 Bug Report
I'm trying to migrate to SVGR from an existing SVGO installation in my codebase. A part of this includes custom plugins that I've written, namely one that will explicitly add height & width properties using the viewbox data. This plugin isn't working in SVGR, despite passing in the config to svgoConfig.
To Reproduce
My config with the custom plugin:
function addDimensionsPlugin(item) {
  console.log(item); // THIS DOES NOT FIRE
  if (item.isElem('svg') && item.hasAttr('viewBox')) {
    const vals = item.attrs.viewBox.value.split(/\s+/g);
    const width = vals[2];
    const height = vals[3];

    if (!width || !height) return item;
    item.addAttr({
      name: 'width',
      prefix: '',
      local: 'width',
      value: width,
    });
    item.addAttr({
      name: 'height',
      prefix: '',
      local: 'height',
      value: height,
    });
  }
  return item;
}

const SVGO_CONFIG = {
  plugins: [
    {
      name: 'addDimensions',
      type: 'perItem',
      fn: addDimensionsPlugin,
    },
  ],
};

The transform call:
const optimizedSvg = await transform(
  svgStr,
  {
    svgo: true,
    svgoConfig: SVGO_CONFIG,
    dimensions: false,
    template: JsxTemplate,
    replaceAttrValues: {'#010101': 'currentColor'},
  },
  {componentName: CamelCase(name)},
);

I can provide more reproduction steps if necessary, but mostly I'm just trying to find out if custom SVGO plugins are supported in SVGR, as I've not been able to find any information about that. Alternatively, if someone could recommend a better way to generate explicit height & width properties, I would be very grateful.

I figured it out, turns out I need the option plugins: ['@svgr/plugin-svgo'] in my SVGR config. This wasn't made super clear but if anyone finds this in the future here ya go.
const optimizedSvg = await transform(
  svgStr,
  {
    plugins: ['@svgr/plugin-svgo'],
    svgo: true,
    svgoConfig: SVGO_CONFIG,
    dimensions: false,
    template: JsxTemplate,
    replaceAttrValues: {'#010101': 'currentColor'},
  },
  {componentName: CamelCase(name)},
);

Hey @Egrodo, I'm tyring to do the same thing you are but I'm having trouble understanding your solution. Could you add your full svgr and svgo configuration you used to get your custom svgo function to work?

this plugins: ['@svgr/plugin-svgo'] part should be clearer in the docs for sure


networkmanager: fix path /sbin/modprobe

this fixes #12063

Hmm this is NixOs specific, we should use modprobe package as substitute

which is the right package to use, command-not-found modprobe outputs busybox, kmod and module_init_tools.

ahh, I just saw that it uses substituteInPlace in the wrong files with /run/current-system/sw/sbin/modprobe. This silently broke when they moved this string into an other file. We should have a substituteInPlace which fails when it doesn't replace anything.

removed the patch now and use substituteInPlace instead. This is still NixOS specific as it already was before.

Pushed to master (28b3ecac07c7075263f397670f46d8465f00cbaf).


Add update Doc

Codecov Report

Merging #14 (a33c3de) into main (3c8bee0) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main      #14   +/-   ##
=======================================
  Coverage   61.98%   61.98%
=======================================
  Files           4        4
  Lines         121      121
=======================================
  Hits           75       75
  Misses         36       36
  Partials       10       10

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 3c8bee0...a33c3de. Read the comment docs.


Cant install appdaemon 4

Problem/Motivation
Gets this error when trying to install appdaemon 4:
20-03-15 17:20:19 ERROR (SyncWorker_14) [supervisor.docker.interface] Can't install hassioaddons/appdaemon-armv7:0.2.3 -> 404 Client Error: Not Found ("no such image: hassioaddons/appdaemon-armv7:0.2.3: No such image: hassioaddons/appdaemon-armv7:0.2.3")
Expected behavior
To have it installed
Actual behavior
got this error:
Failed to install addon, Unknown Error, see logs
the log is at the top.
I had it installed before, then after reboot it couldnt start and got the same error msg. Then uninstalled it and couldnt install it again.
thx
//Christoffer

Potential duplicates:

[#22] appdaemon4 addon install error (61%)

it aint a duplicate i think

The 404 you see is generally caused by disk space or name resolution issues.

I have disk space. 20 gb free. can install other "ADD-ONS". What do you mean with resolution issues?
thanks for the fast answer.
//Christoffer

Name resolution wouldn't apply if you can pull other addons.  It may be worth trying to run ha supervisor repair from the SSH/Web Terminal addon if you have it.

Thanks. I Will try it.

It didnt solve the problem. still getting this msg when trying to install:
20-03-17 11:50:39 ERROR (SyncWorker_15) [supervisor.docker.interface] Can't install hassioaddons/appdaemon-armv7:0.2.3 -> 404 Client Error: Not Found ("no such image: hassioaddons/appdaemon-armv7:0.2.3: No such image: hassioaddons/appdaemon-armv7:0.2.3").

I had an old snapshot with Appdaemon3 backuped. Tried to restore it and that works greate. But still cant install appdaemon4


Add moist Euler equations with test case

In the course of project ADAPTEX I would like to simulate the warm rising bubble test case in dry and moist air, described by Bryan and Fritsch (A Benchmark Simulation for Moist Nonhydrostatic Numerical Models, https://www.atmos.albany.edu/facstaff/rfovell/ATM562/bryan-fritsch-2002.pdf). This has already been done by Lucas Gemein in this master's thesis, but was not merged into Trixi main. Here is his branch: https://github.com/NichtLucas/Trixi.jl/tree/thesis_gemein_2022
ToDos:

[ ] Dry air variant

[ ] Add LMARS flux in 2D
[ ] Add HLLC flux for non-cartesian meshes?
[ ] Add elixir

[ ] Moist air

[ ] Can CompressibleEulerMulticomponentEquations2D be used or are separate equations needed?
[ ] Add missing fluxes to CompressibleEulerMulticomponentEquations2D
[ ] Add elixir

Possibly related: https://github.com/trixi-framework/Trixi.jl/pull/171

Woohoo! Thanks for the hint. I had no idea how much stuff had already been around.


Data confusion   Use  CardPagerAdapter

oh  I used Glide  to load the picture and then do not show is not a data disorder

I don't get this. Can you explain it again?


Add filter_status to briefs mapping and return documents instead of services

Part of this ticket: https://trello.com/c/KcqU7k20
Add filter_status to briefs mapping
We want to be able to filter my status on the frontend, and so we need
this in the mapping.
Return documents instead of services
When searching, the data that was being returned was behind a services
key. This updates to a more generic documents.

Cool - I overlooked the filter_status field, but the place to add it is in the frameworks repo, then use that to regenerate the mapping here. I'll do that if you like.

Also good work on removing the nose-y tests

Are you by any chance trying to run it with python 2?

That is very possible

We'd better talk about how we can safely deploy this change, cos it's obviously not at all backward-compatible.
Another thought I had was to us whatever 'type' was passed into the request (it's in the URL) - so that'd be 'services' for the existing g-cloud stuff and 'briefs' for the new stuff. This has the merit of being backward-compatible, I don't know if it would make the code on the client side more complicated, though.

(On reflection, assuming only the buyer frontend is affected, then your other PR looks good and as long as we deploy that first this is perfectly safe.)

Yeah, I've just pushed another commit to the PR for the apiclient. The api is getting service id's via a search-api-client iter method when locking a saved search. The api will need to pull in the version of the api-client before the search-api switches.

I've also made a plan of what needs to be upgrade/released in what order...


JBPM-4996: shown No defined type in process documentation

+1

Is this completely untestable? IIRC Designer has some special dispensation from Unit Tests for JavaScript changes....?? @csadilek please correct me if I'm wrong...?

@manstis yes, designer got an exception for .js changes. I am not happy with that, as it's definitely not untestable, just a matter of putting in the effort, but that wasn't my call.


Fix model serialization when has table in primary key

this solves error in livewire, when has a model in a public property
livewire issue https://github.com/livewire/livewire/issues/2789

This seems like a breaking change to me. You're changing what's being returned from this method.

Just read that issue. You shouldn't define your table on that property.

👎 See https://github.com/livewire/livewire/issues/2789#issuecomment-841628395.


add verify prod and refactor terraform check/deploy

Fixes #54
Need https://github.com/octo-sts/app/pull/196

I'm going to merge this, so that we can start using it (probably would have avoided mild outage yesterday).  I'd love an answer for the shell check issue.


makes TorIpChanger resolve tor address at initialization

This pull request implements the view expressed in the following comment

Pull Request Test Coverage Report for Build 37

2 of 2 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 35:
0.0%

Covered Lines:
100

Relevant Lines:
100

💛  - Coveralls

Merged and pushed to PYPI.


P2P error masking

Issue Link:

@lucasvo Thanks for the good review ;)
as agreed on DM, I will

remove the config option and replace with some compile time flag
just keep masking for all errors
create a ticket to research parsing logs in testworld


Upgrade AzCopy from V7.1 to v10.3

Is there any documentation that shows a step by step to upgrade the azcopy from one version to other on linux distributions. I did download the latest version (v10) of azcopy on my local. But still it points to old version (Previously installed Version-V7.1). Any suggestions ?

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

ID: 15911160-5ba2-fb0a-0b24-16b3857e20ce
Version Independent ID: d925bc9f-f825-2f82-168c-6c30d716b9ce
Content: Copy or move data to Azure Storage by using AzCopy v10
Content Source: articles/storage/common/storage-use-azcopy-v10.md
Service: storage
Sub-service: common
GitHub Login: @normesta
Microsoft Alias: normesta

Hi @mjannapureddy07 I'm less familiar with Linux, but the guidance in that article mentions updating your path. On Windows, there's a defined procedure for updating your PATH variable so that you can run the AzCopy exe from any directory on your system. On Linux, there should be a similar procedure. I just can't give specifics on what that procedure is and updating path variables is beyond the scope of this article. I'd recommend A) uninstalling the previous version of AzCopy, B) downloading AzCopy executable file, and C) updating your path in Linux to the location of your AzCopy V10 exe.

@mjannapureddy07 Thanks for your question. We are checking on this and will respond to you soon.

Hi @mjannapureddy07 I'm less familiar with Linux, but the guidance in that article mentions updating your path. On Windows, there's a defined procedure for updating your PATH variable so that you can run the AzCopy exe from any directory on your system. On Linux, there should be a similar procedure. I just can't give specifics on what that procedure is and updating path variables is beyond the scope of this article. I'd recommend A) uninstalling the previous version of AzCopy, B) downloading AzCopy executable file, and C) updating your path in Linux to the location of your AzCopy V10 exe.

Yes but AzCopy is not managed through the usual package management. So I am unsure even on how to uninstall the older version. The document would have mentioned ways to upgrade from previous to new versions.

Hi @mjannapureddy07 I'm less familiar with Linux, but the guidance in that article mentions updating your path. On Windows, there's a defined procedure for updating your PATH variable so that you can run the AzCopy exe from any directory on your system. On Linux, there should be a similar procedure. I just can't give specifics on what that procedure is and updating path variables is beyond the scope of this article. I'd recommend A) uninstalling the previous version of AzCopy, B) downloading AzCopy executable file, and C) updating your path in Linux to the location of your AzCopy V10 exe.

Yes but AzCopy is not managed through the usual package management. So I am unsure even on how to uninstall the older version. The document would have mentioned ways to upgrade from previous to new versions.

Actually it is simple as you said related to paths. AzCopy is provided as a downloadable binary (rather than a linux package) . So I have just overridden my previously installed AzCopy in my /usr/bin folder and it worked. I see AzCopy is upgraded now. Thanks @normesta !


Is it possible to add jav321.com to scrapers

Is it possible to add jav321.com to scrapers because most of the times I find missing r18 and dmm titles metadata to exist there.
Thanks

I will look into it. I may just add these as japanese only scrapers.

You can treat it as you treat dmm???

Added in release 1.6.0


Replicating Results

Hi, I'm trying to replicate the experiments with DWA and EBand at 0.5m/s, but if I try running run.py with the launchers provided, I see the odometry degrading really fast. The rover is very likely to cross the region with obstacles, but by the time it gets to the open area, it does not converge to 1m of the goal position. Did you see this behaviour?

I didn't see this before. The odometry reading makes pretty much sense to me. Did you try to run it out of the container with the GUI to see where did the robot go?

I faced the same problem using ubuntu 20 with ros noetic, but the problem didn't occur in ubuntu 18 with ros melodic

I found the same problem in both Ubuntu 18 and 20. When I run the run.py, there is some deviation between the base_link axis and the odom axis, which causes that the target point in the odom coordinate system is not directly in front of the robot in word coordinates, resulting in navigation errors.

I found the same problem in both Ubuntu 18 and 20. When I run the run.py, there is some deviation between the base_link axis and the odom axis, which causes that the target point in the odom coordinate system is not directly in front of the robot in word coordinates, resulting in navigation errors.

Unfortunately, I also encountered the same problem. Did you finally solve it?


Jobs migration: service file

Summary
Refactor Jobs service file

jobs.service.ts looks pretty good now. Can this be closed?


Manifest JSON

https://github.com/Bungie-net/api/issues/785
The manifest now comes in a JSON format, tried to get this working but guessing it's only currently supported with .ZIP to extract the .content file.
Maybe needs to have two different ways of handling it depending on the file type, so both work 👍

Yeah, right now only the .zip version is handled. Since I will made some changes to the library in the future I will also include the .json version in it. Thanks for pointing out ✨


Update devDependencies.

Hm all ci exploded 🐊

Yeah, in the nospawn test :/
Is there any related change in grunt 1.x?

@vladikoff @shama: any ideas why the nospawn tests fail with the new grunt?

The tests are failing here because the test helper this task uses has timing issues. So it's not specifically because of grunt 1.0.1 but the slight changes in timing breaks that test. It's been on my list to replace that test helper but I want to propose standalone tasks that can be tested more directly. Then this bad test helper can be removed.
I'm fine to remove this and walk around the timing issue in the meantime though. Thanks @XhmikosR!


Refactor checks

@brianmckenna @Bobfrat
New branch for the UGRID checks. I've re-written the core checks to improve clarity and to include the multiple-mesh issue from #6. I'm going to close #10

I'll dig in a bit deeper in a while but a general comment is please put the test files in a folder named tests and prefix test filenames with test. cc_plugin_ugrid/tests/test_checker_10. Sidenote: what does checker_10 mean?
You can look at https://github.com/ioos/cc-plugin-glider as an example for layout.


Bump version to 5.1.4

Questions
Answers

Description?
Bump version to 5.1.4

Type?
improvement

BC breaks?
no

Deprecations?
no

Fixed ticket?

Sponsor company

How to test?

@matks Bump to v6.0.0 is waiting for QA. Will we have Release 5.1.4 separately prior?

@matks Bump to v6.0.0 is waiting for QA. Will we have Release 5.1.4 separately prior?

There is a need for a 5.1.4 release, yes. But maybe we can create a separate branch for that, wdyt @matthieu-rolland

Take it easy. I just want to make sure that we won't have Release 5.1.5 ;)


Respect semver when using resolve.modules

resolve: {
    modules: [
        path.resolve('node_modules'),
        path.resolve('../shared/node_modules')
    ]
}

Do you want to request a feature or report a bug?
Unsure, as I don't know whether it's intentional or not.

What is the current behavior?
I setup resolve.modules as seen above. When the resolve happens, it only takes into consideration a match based on the package name, but doesn't take into consideration the version of the package.
If the current behavior is a bug, please provide the steps to reproduce.
Setup the resolve.modules as above with two versions of the same module installed in each of the node_modules directories and build.

What is the expected behavior?
I'd expect that if node_modules had<EMAIL_ADDRESS>installed, but ../shared/node_modules only supported<EMAIL_ADDRESS>then it would choose the pkg from ../shared/node_modules rather than node_modules, yielding two versions of pkg in the final build. If both are able to support a common version of pkg then only the one version would be used.
If this is a feature request, what is motivation or use case for changing the behavior?
If it's not changed, then shared files are always built against the node_modules listed first in resolve.modules, potentially leaving a broken build at runtime.
Please mention other relevant information such as the browser version, Node.js version, webpack version and Operating System.

I realise there could be a better way to achieve the desired outcome. Using peerDependencies doesn't seem to be an option, because the Webpack build still needs to resolve the dependencies.

The package manager (npm or yarn) manage versions for you when using the default resolution. Why does the default doesn't work for you?

semver is out of scope for webpack. The package manager will handle semver and install packages in the correct locations.