<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">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">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_-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_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 src="https://www.google.com/a/ultimum.io/images/logo.gif" 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>