<div dir="ltr">Those things surely are nice to have, but the health and stability of the project come first. It's a tool, people use it to get their work done, and the main goal of the project is to let them get that work done. They won't be able to do that if we continue to use a framework for which we have no support, and no people willing to do maintenance work and bug fixing. The main priority is to have a working, stable, maintained tool, and we currently don't have the resources to do that with Angular, and very little hope for the situation magically improving any time soon.<div><br></div><div>(Also, downloading data about all table entries just so that you can do pagination/filtering on the client side is wasteful and doesn't scale, but that is a separate discussion.)</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 18, 2019 at 10:38 AM Marek Lyčka <<a href="mailto:marek.lycka@ultimum.io">marek.lycka@ultimum.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello,<br><br>> You seem to be missing the point. The alternative to Angular is not JQuery, it's a proper implementation on the server-side, <br>> both in the APIs (for pagination and filtering) and Horizon itself. Slapping JavaScript on top of it, whether it's Angular or <br>> JQuery, won't improve the situation.<br><br>No, I understand what you're saying, I just don't think it's very realistic. Exclusively using server side templating has some issues <br>in terms of usability and performance which might not have satisfactory solutions. For example:<br><br>- Any interaction causes a roundtrip to the web server and the backend API, which reduces performance, especially with large data sets.<br>- In some cases, datasets are composed of multiple API calls with disjunct results (see Networks [1] for an example). Paging and sorting over these datasets<br>  requires for them to be reconstructed on the webserver for every paging or sorting request and that means a full data load. For any at least somewhat sizeable<br>  datasets, this creates performance issues.<br>- UI loses reactivity. Interfield interactions, for example, are basically impossible because of web server centered re-rendering, which reduces user comfort and usability.<br><br>Moving logic to the client using JavaScript does improve the situation:<br><br>- Data can be loaded in chunks asynchronously in the background without impeding the rest of Horizon<br>- Cached data can be operated on (paged, sorted...) without additional requests to the web server and backend<br>- Data can be shared between different horizon elements without the need for a reload - e.g. loaded networks <br>  can be used in the network index table, the Launch instance dialog and Network Topology all without loading it <br>  separately for each.<br> <br>Additionally, JavaScript also allows for more advanced tools, such as the Network Topology views (admittedly, they also require <br>a fair amount of work).<br><br>These are just some examples to illustrate the point. I'm sure other use cases could be found.<br><br>[1] <a href="https://github.com/openstack/horizon/blob/fa804370b11519fc261f73fa90177368fde679df/openstack_dashboard/api/neutron.py#L1066" target="_blank">https://github.com/openstack/horizon/blob/fa804370b11519fc261f73fa90177368fde679df/openstack_dashboard/api/neutron.py#L1066</a><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">po 16. 9. 2019 v 10:43 odesílatel Radomir Dopieralski <<a href="mailto:openstack@sheep.art.pl" target="_blank">openstack@sheep.art.pl</a>> napsal:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">You seem to be missing the point. The alternative to Angular is not JQuery, it's a proper implementation on the server-side, both in the APIs (for pagination and filtering) and Horizon itself. Slapping JavaScript on top of it, whether it's Angular or JQuery, won't improve the situation.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 11, 2019 at 5:21 PM Marek Lyčka <<a href="mailto:marek.lycka@ultimum.io" target="_blank">marek.lycka@ultimum.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi all,<br><br>> We can't review your patches, because we don't understand them. For the patches to be merged, we<br>> need more than one person, so that they can review each other's patches.<br><br>Well, yes. That's what I'm trying to address. Even if another person appeared to review<br>javascript code, it wouldn't change anything unless he had +2 and +W rights though. And even then,<br>it wouldn't be enough, because two +2 are currently expected for the CR process to go ahead. <br><br>> JavaScript is fine. We all know how to write and how to review JavaScript code, and there doesn't<br>> have to be much of it — Horizon is not the kind of tool that has to bee all shiny and animated. It's a tool<br>> for getting work done.<br><br>This isn't about being shiny and animated though. This is about basic functionality, usability and performance. <br>I did some stress testing with large datasets [1], and the non-angularized versions of basic functionality like <div>sorting, paging and filtering in table panels are either non-existent, not working at all or basically unusable </div><div>(for a multitude of reasons). <br><br>Removing them would force reimplementations in pure JQuery and I strongly suspect that those <div>implementations would be much messier and cost a considerable amount of time and effort.<br><br>>AngularJS is a problem, because you can't tell what the code does just by looking<br>>at the code, and so you can neither review nor fix it.<br><br>This is clearly a matter of opinion. I find Angular code easier to deal with than JQuery spaghetti.<br><br>> There has been a lot of work put into mixing Horizon with Angular, but I disagree that it has solved problems,<br>> and in fact it has introduced a lot of regressions. <br><br>I'm not saying the NG implementations are perfect, but they mostly work where it counts and can be improved <br>where they do not. <br><br>> Just to take a simple example, the translations are currently broken for en.AU and en.GB languages,<br>> and date display is not localized. And nobody cares.<br><br>It's difficult for me to judge which features are broken in NG and how much interest there is in having them <br>fixed, but they can be fixed once reported. What I can say for sure is that I keep hitting this issue <br>because of actual feature requests from actual users. See [2] for an example. I'm not sure implementing <br>that in pure JQuery would be nearly as simple as it was in Angular.<br><br>> We had automated tests before Angular. There weren't many of them, because we also didn't have much</div><div>> JavaScript code. If I remember correctly, those tests were ripped out during the Angularization.<br><br>Fair enough.<br><br>> Arguably, improvements are, on average, impossible to add to Angular<br><br>I disagree. Yes, pure JQuery is probably easier when dealing with very simple things, but once feature<br>complexity increases beyond the basics, you'll very quickly find the features offered by the framework <br>relevant - things like MVC decoupling, browser-side templating, reusable components, functionality injection etc.<br>Again, see [2] for an example.<br><br>On a side note, some horizon plugins (such as octavia-dashboard) use Angular extensively. Removing it<br>would at the very least break them.<br><br>Whatever the community decision is though, I feel like it needs to be made so that related issues<br>can be addressed with a reasonable expectation of being reviewed and merged.<br><br>[1] Networks, Roles and Images in the low thousands<br>[2] <a href="https://review.opendev.org/#/c/618173/" target="_blank">https://review.opendev.org/#/c/618173/</a><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">pá 6. 9. 2019 v 18:44 odesílatel Dale Bewley <<a href="mailto:dale@bewley.net" target="_blank">dale@bewley.net</a>> napsal:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto">As an uninformed user I would just like to say Horizon is seen  _as_ Openstack to new users and I appreciate ever effort to improve it. </div><div dir="auto"><br></div><div dir="auto">Without discounting past work, the Horizon experience leaves much to be desired and it colors the perspective on the entire platform. </div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 6, 2019 at 05:01 Radomir Dopieralski <<a href="mailto:openstack@sheep.art.pl" target="_blank">openstack@sheep.art.pl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 6, 2019 at 11:33 AM Marek Lyčka <<a href="mailto:marek.lycka@ultimum.io" target="_blank">marek.lycka@ultimum.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<br><br>> we need people familiar with Angular and Horizon's ways of using Angular (which seem to be very <br>> non-standard) that would be willing to write and review code. Unfortunately the people who originally <br>> introduced Angular in Horizon and designed how it is used are no longer interested in contributing, <br>> and there don't seem to be any new people able to handle this.<br><br>I've been working with Horizon's Angular for quite some time and don't mind keeping at it, but<br>it's useless unless I can get my code merged, hence my original message. <br><br>As far as attracting new developers goes, I think that removing some barriers to entry couldn't hurt -<br>seeing commits simply lost to time being one of them. I can see it as being fairly demoralizing.<br></div></blockquote><div><br></div><div>We can't review your patches, because we don't understand them. For the patches to be merged, we</div><div>need more than one person, so that they can review each other's patches.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">> Personally, I think that a better long-time strategy would be to remove all <br>> Angular-based views from Horizon, and focus on maintaining one language and one set of tools.<br><br>Removing AngularJS wouldn't remove JavaScript from horizon. We'd still be left with a home-brewish <br>framework (which is buggy as is). I don't think removing js completely is realistic either: we'd lose <div>functionality and worsen user experience. I think that keeping Angular is the better alternative:<br><br>1) A lot of work has already been put into Angularization, solving many problems<br>2) Unlike legacy js, Angular code is covered by automated tests<br>3) Arguably, improvments are, on average, easier to add to Angular than pure js implementations<br><br>Whatever reservations there may be about the current implementation can be identified and addressed, but<br>all in all, I think removing it at this point would be counterproductive.<br></div></div></blockquote><div><br></div><div>JavaScript is fine. We all know how to write and how to review JavaScript code, and there doesn't</div><div>have to be much of it — Horizon is not the kind of tool that has to bee all shiny and animated. It's a tool</div><div>for getting work done. AngularJS is a problem, because you can't tell what the code does just by looking</div><div>at the code, and so you can neither review nor fix it.</div><div><br></div><div>There has been a lot of work put into mixing Horizon with Angular, but I disagree that it has solved problems,</div><div>and in fact it has introduced a lot of regressions. Just to take a simple example, the translations are currently</div><div>broken for en.AU and en.GB languages, and date display is not localized. And nobody cares.</div><div><br></div><div>We had automated tests before Angular. There weren't many of them, because we also didn't have much JavaScript code.</div><div>If I remember correctly, those tests were ripped out during the Angularization.</div><div><br></div><div>Arguably, improvements are, on average, impossible to add to Angular, because the code makes no sense on its own.</div><div><br></div><div><br></div></div></div>
</blockquote></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail-m_-2347680928646272867gmail-m_-4058832155388757170gmail-m_2678996595782214492gmail-m_-4070838698105340591gmail_signature"><div dir="ltr"><span style="color:rgb(136,136,136);vertical-align:top;line-height:18px;font-size:11pt;font-family:Arial,Helvetica,Geneva;font-weight:bold">Marek Lyčka<br></span><span style="color:rgb(136,136,136);font-size:10pt;vertical-align:top;line-height:18px;font-family:Arial,Helvetica,Geneva">Linux Developer<br><img width="200" height="81"><br>Ultimum Technologies s.r.o.<br>Na Poříčí 1047/26, 11000 Praha 1<br>Czech Republic<br><br><a href="mailto:stanislav.ulrych@ultimum.io" style="color:rgb(17,85,204)" target="_blank">marek.lycka@ultimum.io</a><br></span><font color="#1155cc" face="Arial, Helvetica, Geneva" style="font-size:12.8px"><span style="font-size:13.3333px;line-height:18px"><u><a href="https://ultimum.io/" style="color:rgb(17,85,204)" target="_blank">https://ultimum.io</a></u></span></font><br></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail-m_-2347680928646272867gmail_signature"><div dir="ltr"><span style="color:rgb(136,136,136);vertical-align:top;line-height:18px;font-size:11pt;font-family:Arial,Helvetica,Geneva;font-weight:bold">Marek Lyčka<br></span><span style="color:rgb(136,136,136);font-size:10pt;vertical-align:top;line-height:18px;font-family:Arial,Helvetica,Geneva">Linux Developer<br><img width="200" height="81"><br>Ultimum Technologies s.r.o.<br>Na Poříčí 1047/26, 11000 Praha 1<br>Czech Republic<br><br><a href="mailto:stanislav.ulrych@ultimum.io" style="color:rgb(17,85,204)" target="_blank">marek.lycka@ultimum.io</a><br></span><font color="#1155cc" face="Arial, Helvetica, Geneva" style="font-size:12.8px"><span style="font-size:13.3333px;line-height:18px"><u><a href="https://ultimum.io/" style="color:rgb(17,85,204)" target="_blank">https://ultimum.io</a></u></span></font><br></div></div>
</blockquote></div>