Re: KOSMIndoorMap in kdereview

2020-10-24 Thread Volker Krause
On Freitag, 23. Oktober 2020 22:29:39 CEST Albert Astals Cid wrote:
> El divendres, 23 d’octubre de 2020, a les 16:56:37 CEST, Volker Krause va 
escriure:
> > On Freitag, 23. Oktober 2020 00:45:46 CEST Albert Astals Cid wrote:
> > > El dijous, 22 d’octubre de 2020, a les 17:25:32 CEST, Volker Krause va
> > 
> > escriure:
> > > > Hi,
> > > > 
> > > > KOSMIndoorMap is a QML component for showing multi-floor OSM indoor
> > > > maps
> > > > (as its very creative name might suggest). It's using maps.kde.org as
> > > > a
> > > > data source (same as Marble), and has been created to show interactive
> > > > maps of train stations for KDE Itinerary.
> > > > 
> > > > https://invent.kde.org/libraries/kosmindoormap
> > > > 
> > > > KOSMIndoorMap has been growing inside the KPublicTransport repo (due
> > > > to
> > > > some building blocks being available there alreay and me being lazy),
> > > > and
> > > > has now been split into its own repo. So technically this is coming
> > > > out
> > > > of a reviewed repo already rather than from playground, but better be
> > > > on
> > > > the safe side :)
> > > > 
> > > > The aim is having this (together with KPublicTransport and KDE
> > > > Itinerary)
> > > > join the release service for 20.12.
> > > 
> > > Is this fixable?
> > > 
> > > [libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax
> > > specified for the proto file: osmformat.proto. Please use 'syntax =
> > > "proto2";' or 'syntax = "proto3";' to specify a syntax version.
> > > (Defaulted
> > > to proto2 syntax.) [libprotobuf WARNING
> > > google/protobuf/compiler/parser.cc:648] No syntax specified for the
> > > proto
> > > file: fileformat.proto. Please use 'syntax = "proto2";' or 'syntax =
> > > "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
> > 
> > fixed, although that requires modifying the 3rdparty proto files
> > 
> > > and this?
> > > 
> > > style/mapcsslexer.l:65: warning, no es pot satisfer la regla
> > > style/mapcssparser.y:143.11-14: advertiment: valor sense usar: $2
> > > [-Wother]
> > > 
> > >   143 | | Ruleset Rule
> > >   
> > >   |   ^~~~
> > > 
> > > and this?
> > > 
> > > src/map/scene/scenegeometry.cpp: In function ‘double
> > > KOSMIndoorMap::SceneGeometry::polylineMidPointAngle(const QPolygonF&)’:
> > > src/map/scene/scenegeometry.cpp:75:24: warning: unused variable ‘r’
> > > [-Wunused-variable] 75 | const auto r = ((length + l) -
> > > lineLength / 2.0) / l;
> > 
> > both fixed
> > 
> > > Should ./bin/indoormap do anything? I have one empty combo and one combo
> > > that lets me change the style.
> > 
> > Good point, I've documented the test apps in the README now. Try
> > `indoormap -c 52.52512,13.36966` or alternatively `qmlscene
> > tests/indoormap.qml` to see a few more features (after updating to latest
> > master to make this work with your locale too, see below).
> > 
> > > You have one qsTr in the qml that it's not going to work, also a "TODO
> > > i18n?" that i would say yes?
> > 
> > Fixed, leftovers from before switching to ki18n.
> 
> Since i understand this is a library, you want to use i18nd on qml (you're
> using that on your c++ by using -DTRANSLATION_DOMAIN=)

Indeed, fixed.

> > > It has tests \o/ the tests don't pass /o\ https://pastebin.com/CFcdVJHh
> > 
> > Ouch, you actually found some quite serious breakage that I had entirely
> > missed since neither my local nor the CI locale is affected... This all
> > goes down to some string to floating point number conversion being done
> > locale- aware while they shouldn't be.
> 
> Glad to be of service :)
> 
> Another thing, do you want d-pointers to make keeping ABI easier or don't
> care at this point?

The one class of the C++ interface that is actually used externally at this 
point has a d-pointer already, everything else that is exported is for the QML 
plugins and unit tests in the same repo. This might change over time though, 
at which point more d-pointers would indeed become necessary.

This wont work for the low-level OSM primitives though (that's the points, 
lines and polygons making up the map geometry). Those exists in so large 
quantities that the additional allocation overhead becomes prohibitive.

The server-side tile generator is using Marble which has d-pointers on those 
types, last time I measured that about 10% of the total runtime was spent just 
on d-pointer destruction. Construction/allocation will likely cost at least as 
much as well, but that's harder to separate in the measurements from things 
that have to happen either way.

Regards,
Volker

> > Dirty fixes applied, once std::from_chars becomes available for floating
> > point types this can be addressed more cleanly.
> > 
> > We should run the CI with rotating/random locales :)
> > 
> > Thanks for the feedback!
> > Volker






Re: KOSMIndoorMap in kdereview

2020-10-23 Thread Albert Astals Cid
El divendres, 23 d’octubre de 2020, a les 16:56:37 CEST, Volker Krause va 
escriure:
> On Freitag, 23. Oktober 2020 00:45:46 CEST Albert Astals Cid wrote:
> > El dijous, 22 d’octubre de 2020, a les 17:25:32 CEST, Volker Krause va 
> escriure:
> > > Hi,
> > > 
> > > KOSMIndoorMap is a QML component for showing multi-floor OSM indoor maps
> > > (as its very creative name might suggest). It's using maps.kde.org as a
> > > data source (same as Marble), and has been created to show interactive
> > > maps of train stations for KDE Itinerary.
> > > 
> > > https://invent.kde.org/libraries/kosmindoormap
> > > 
> > > KOSMIndoorMap has been growing inside the KPublicTransport repo (due to
> > > some building blocks being available there alreay and me being lazy), and
> > > has now been split into its own repo. So technically this is coming out
> > > of a reviewed repo already rather than from playground, but better be on
> > > the safe side :)
> > > 
> > > The aim is having this (together with KPublicTransport and KDE Itinerary)
> > > join the release service for 20.12.
> > 
> > Is this fixable?
> > 
> > [libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax
> > specified for the proto file: osmformat.proto. Please use 'syntax =
> > "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted
> > to proto2 syntax.) [libprotobuf WARNING
> > google/protobuf/compiler/parser.cc:648] No syntax specified for the proto
> > file: fileformat.proto. Please use 'syntax = "proto2";' or 'syntax =
> > "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
> 
> fixed, although that requires modifying the 3rdparty proto files
> 
> > and this?
> > 
> > style/mapcsslexer.l:65: warning, no es pot satisfer la regla
> > style/mapcssparser.y:143.11-14: advertiment: valor sense usar: $2 [-Wother]
> >   143 | | Ruleset Rule
> > 
> >   |   ^~~~
> > 
> > and this?
> > 
> > src/map/scene/scenegeometry.cpp: In function ‘double
> > KOSMIndoorMap::SceneGeometry::polylineMidPointAngle(const QPolygonF&)’:
> > src/map/scene/scenegeometry.cpp:75:24: warning: unused variable ‘r’
> > [-Wunused-variable] 75 | const auto r = ((length + l) -
> > lineLength / 2.0) / l;
> 
> both fixed
> 
> > Should ./bin/indoormap do anything? I have one empty combo and one combo
> > that lets me change the style.
> 
> Good point, I've documented the test apps in the README now. Try `indoormap 
> -c 
> 52.52512,13.36966` or alternatively `qmlscene tests/indoormap.qml` to see a 
> few more features (after updating to latest master to make this work with 
> your 
> locale too, see below).
> 
> > You have one qsTr in the qml that it's not going to work, also a "TODO
> > i18n?" that i would say yes?
> 
> Fixed, leftovers from before switching to ki18n.

Since i understand this is a library, you want to use i18nd on qml (you're 
using that on your c++ by using -DTRANSLATION_DOMAIN=)

> 
> > It has tests \o/ the tests don't pass /o\ https://pastebin.com/CFcdVJHh
> 
> Ouch, you actually found some quite serious breakage that I had entirely 
> missed since neither my local nor the CI locale is affected... This all goes 
> down to some string to floating point number conversion being done locale-
> aware while they shouldn't be.

Glad to be of service :)

Another thing, do you want d-pointers to make keeping ABI easier or don't care 
at this point?

Cheers,
  Albert


> 
> Dirty fixes applied, once std::from_chars becomes available for floating 
> point 
> types this can be addressed more cleanly.
> 
> We should run the CI with rotating/random locales :) 
> 
> Thanks for the feedback!
> Volker
> 
> 
> 
> 






Re: KOSMIndoorMap in kdereview

2020-10-23 Thread Volker Krause
On Freitag, 23. Oktober 2020 00:45:46 CEST Albert Astals Cid wrote:
> El dijous, 22 d’octubre de 2020, a les 17:25:32 CEST, Volker Krause va 
escriure:
> > Hi,
> > 
> > KOSMIndoorMap is a QML component for showing multi-floor OSM indoor maps
> > (as its very creative name might suggest). It's using maps.kde.org as a
> > data source (same as Marble), and has been created to show interactive
> > maps of train stations for KDE Itinerary.
> > 
> > https://invent.kde.org/libraries/kosmindoormap
> > 
> > KOSMIndoorMap has been growing inside the KPublicTransport repo (due to
> > some building blocks being available there alreay and me being lazy), and
> > has now been split into its own repo. So technically this is coming out
> > of a reviewed repo already rather than from playground, but better be on
> > the safe side :)
> > 
> > The aim is having this (together with KPublicTransport and KDE Itinerary)
> > join the release service for 20.12.
> 
> Is this fixable?
> 
> [libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax
> specified for the proto file: osmformat.proto. Please use 'syntax =
> "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted
> to proto2 syntax.) [libprotobuf WARNING
> google/protobuf/compiler/parser.cc:648] No syntax specified for the proto
> file: fileformat.proto. Please use 'syntax = "proto2";' or 'syntax =
> "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)

fixed, although that requires modifying the 3rdparty proto files

> and this?
> 
> style/mapcsslexer.l:65: warning, no es pot satisfer la regla
> style/mapcssparser.y:143.11-14: advertiment: valor sense usar: $2 [-Wother]
>   143 | | Ruleset Rule
> 
>   |   ^~~~
> 
> and this?
> 
> src/map/scene/scenegeometry.cpp: In function ‘double
> KOSMIndoorMap::SceneGeometry::polylineMidPointAngle(const QPolygonF&)’:
> src/map/scene/scenegeometry.cpp:75:24: warning: unused variable ‘r’
> [-Wunused-variable] 75 | const auto r = ((length + l) -
> lineLength / 2.0) / l;

both fixed

> Should ./bin/indoormap do anything? I have one empty combo and one combo
> that lets me change the style.

Good point, I've documented the test apps in the README now. Try `indoormap -c 
52.52512,13.36966` or alternatively `qmlscene tests/indoormap.qml` to see a 
few more features (after updating to latest master to make this work with your 
locale too, see below).

> You have one qsTr in the qml that it's not going to work, also a "TODO
> i18n?" that i would say yes?

Fixed, leftovers from before switching to ki18n.

> It has tests \o/ the tests don't pass /o\ https://pastebin.com/CFcdVJHh

Ouch, you actually found some quite serious breakage that I had entirely 
missed since neither my local nor the CI locale is affected... This all goes 
down to some string to floating point number conversion being done locale-
aware while they shouldn't be.

Dirty fixes applied, once std::from_chars becomes available for floating point 
types this can be addressed more cleanly.

We should run the CI with rotating/random locales :) 

Thanks for the feedback!
Volker





Re: KOSMIndoorMap in kdereview

2020-10-23 Thread Volker Krause
On Donnerstag, 22. Oktober 2020 21:14:43 CEST Rolf Eike Beer wrote:
> Am Donnerstag, 22. Oktober 2020, 17:25:32 CEST schrieb Volker Krause:
> > Hi,
> > 
> > KOSMIndoorMap is a QML component for showing multi-floor OSM indoor maps
> > (as its very creative name might suggest). It's using maps.kde.org as a
> > data source (same as Marble), and has been created to show interactive
> > maps of train stations for KDE Itinerary.
> > 
> > https://invent.kde.org/libraries/kosmindoormap
> > 
> > KOSMIndoorMap has been growing inside the KPublicTransport repo (due to
> > some building blocks being available there alreay and me being lazy), and
> > has now been split into its own repo. So technically this is coming out
> > of a reviewed repo already rather than from playground, but better be on
> > the safe side :)
> > 
> > The aim is having this (together with KPublicTransport and KDE Itinerary)
> > join the release service for 20.12.
>
> The const version of DataSet::way() returns Way*, but the non-const version
> returns OSM::Way*. I guess the extra qualification is not needed.

fixed

> In OSM2go I use std::unordered_map to store the different types of objects
> which makes lookups much easier. YMMV depending if you want to optimize for
> lookup or memory size.

Since the vectors are sorted, lookup performance there hasn't been an issue so 
far. Lookup performance for tags OTOH has been (and to some extend still is) a 
much bigger issue.

> My recent work there is to get rid of the note, way, and relation prefixes
> or suffixes on function names and make a template from the remaining
> implementation so I don't have to implement the same things 3 times.
> 
> I have derived all 3 object types from a common base class, which allows me
> to simplify things like Element::url() by just calling obj->url() and let a
> virtual overload do the rest. Which is a good example: the final return in
> that function should be replaced by Q_UNREACHABLE(), too.

Right, a common base class and virtual methods would make that code more 
elegant, possibly even making the entire Element/UniqueElement classes 
unnecessary. However, that comes at the cost of an extra sizeof(void*) per 
instance. And given how many instances there are and how aggressively this has 
been optimized for memory size, that would be going in the wrong direction. 
I've actually thought about adding an additional type for the common case of 
tag-less nodes to get rid of the tag storage overhead in that case :)

While this is designed to handle a single (large and detailed) building only, 
it can actually handle an entire city as well by now, without any tiling. That 
should leave us enough room even in case of an exploding level of detail in 
large train stations, and for resource-constraint phones.

Q_UNREACHABLEs have been added.

> The nodes vectors in Element::outerPath() could benefit from a call to
> reserve().

appendNodesFromWay() (and via that also assemblePath()) do call reserve on 
those vectors internally.

> The coding style for the remark-if in XmlParser::parse() is inconsistent.
> Or, if compared to the rest of the file, it's the only consistent one in
> that function.

fixed

> Eike

Thanks for the feedback!

Volker





Re: KOSMIndoorMap in kdereview

2020-10-22 Thread Albert Astals Cid
El dijous, 22 d’octubre de 2020, a les 17:25:32 CEST, Volker Krause va escriure:
> Hi,
> 
> KOSMIndoorMap is a QML component for showing multi-floor OSM indoor maps (as 
> its very creative name might suggest). It's using maps.kde.org as a data 
> source (same as Marble), and has been created to show interactive maps of 
> train stations for KDE Itinerary.
> 
> https://invent.kde.org/libraries/kosmindoormap
> 
> KOSMIndoorMap has been growing inside the KPublicTransport repo (due to some 
> building blocks being available there alreay and me being lazy), and has now 
> been split into its own repo. So technically this is coming out of a reviewed 
> repo already rather than from playground, but better be on the safe side :)
> 
> The aim is having this (together with KPublicTransport and KDE Itinerary) 
> join 
> the release service for 20.12.
> 

Is this fixable?

[libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax 
specified for the proto file: osmformat.proto. Please use 'syntax = "proto2";' 
or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 
syntax.)
[libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax 
specified for the proto file: fileformat.proto. Please use 'syntax = "proto2";' 
or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 
syntax.)

and this?

style/mapcsslexer.l:65: warning, no es pot satisfer la regla
style/mapcssparser.y:143.11-14: advertiment: valor sense usar: $2 [-Wother]
  143 | | Ruleset Rule
  |   ^~~~


and this?

src/map/scene/scenegeometry.cpp: In function ‘double 
KOSMIndoorMap::SceneGeometry::polylineMidPointAngle(const QPolygonF&)’:
src/map/scene/scenegeometry.cpp:75:24: warning: unused variable ‘r’ 
[-Wunused-variable]
   75 | const auto r = ((length + l) - lineLength / 2.0) / l;



Should ./bin/indoormap do anything? I have one empty combo and one combo that 
lets me change the style.


You have one qsTr in the qml that it's not going to work, also a "TODO i18n?" 
that i would say yes?


It has tests \o/ the tests don't pass /o\ https://pastebin.com/CFcdVJHh


Cheers,
  Albert


> Thanks,
> Volker
> 
> 
> 
> 






Re: KOSMIndoorMap in kdereview

2020-10-22 Thread Rolf Eike Beer
Am Donnerstag, 22. Oktober 2020, 17:25:32 CEST schrieb Volker Krause:
> Hi,
> 
> KOSMIndoorMap is a QML component for showing multi-floor OSM indoor maps (as
> its very creative name might suggest). It's using maps.kde.org as a data
> source (same as Marble), and has been created to show interactive maps of
> train stations for KDE Itinerary.
> 
> https://invent.kde.org/libraries/kosmindoormap
> 
> KOSMIndoorMap has been growing inside the KPublicTransport repo (due to some
> building blocks being available there alreay and me being lazy), and has
> now been split into its own repo. So technically this is coming out of a
> reviewed repo already rather than from playground, but better be on the
> safe side :)
> 
> The aim is having this (together with KPublicTransport and KDE Itinerary)
> join the release service for 20.12.

The const version of DataSet::way() returns Way*, but the non-const version 
returns OSM::Way*. I guess the extra qualification is not needed.

In OSM2go I use std::unordered_map to store the different types of objects 
which makes lookups much easier. YMMV depending if you want to optimize for 
lookup or memory size.

My recent work there is to get rid of the note, way, and relation prefixes or 
suffixes on function names and make a template from the remaining 
implementation so I don't have to implement the same things 3 times.

I have derived all 3 object types from a common base class, which allows me to 
simplify things like Element::url() by just calling obj->url() and let a 
virtual overload do the rest. Which is a good example: the final return in 
that function should be replaced by Q_UNREACHABLE(), too.

The nodes vectors in Element::outerPath() could benefit from a call to 
reserve().

The coding style for the remark-if in XmlParser::parse() is inconsistent. Or, 
if compared to the rest of the file, it's the only consistent one in that 
function.

Eike

signature.asc
Description: This is a digitally signed message part.