Jump to content

omnibrain

Members
  • Content Count

    107
  • Joined

  • Last visited

Everything posted by omnibrain

  1. I'm currently testing IcsTimeClient but I'm running into inexplicable timeouts when trying to get the time of ptbtime1.ptb.de. It looks like it's resolving the IP correctly (192.53.103.108) and when I try to get the time from the same server via the Indy-Component it works. Other servers, like the NIST-servers NIST Internet Time Service work with IcsTimeClient too. I tried both, with the OverbyteIcsTimeTst program and my own, reduced to the basics, one.
  2. omnibrain

    RCS Chats - Rich Communication Services

    I don't think Apple is using RCS. And the track record of Google regarding messaging is not the best. ~10 years ago there were some failed attempts of carriers in Germany trying to push a RCS based messenger. But WhatsApp had already won back then.
  3. omnibrain

    TIdSNTP still providing daylight saving time

    Of course, but in the code of the component there is "NTPToDateTime" and in there "UTCTimeToLocalTime". And like I said. Last week it worked. I would have expected an error of 2 hours last week, if this was the case.
  4. omnibrain

    ANN : TECNativeMap 5.1

    I've sent you an email asking for a quote.
  5. omnibrain

    ANN : TECNativeMap 5.1

    This looks really great. But for some demos I still get the following error, I think the uecNativeMeasureMap dcu is outdated: [dcc32 Fataler Fehler] UMainNativeLinesPolygones.pas(8): F2051 Unit uecNativeMeasureMap wurde mit einer unterschiedlichen Version von UECGraphics.TECCanvas compiliert
  6. omnibrain

    ANN : TECNativeMap 5.1

    I really like what I see. Do you have an overview over the demos, so I don't have to open each one? Some Demos don't compile, DemoNativeLinesPolygon for example. I think it has to do with the DCUs being compiled for a different version.
  7. omnibrain

    ANN : TECNativeMap 5.1

    Can you please provide me with a trial (your website says to ask for a trial)? I want to give it a spin, before I license it for me and my 3 other developers. Native Support for WFS and WMS layers so they can be used like in leaflet without having to build the URL by hand would be great. A time dimension function for WMS, like Leaflet.TimeDimension AddOn would be the cherry on the cake. Regarding the legends, you are correct, no special function is needed, they are just static images.
  8. omnibrain

    ANN : TECNativeMap 5.1

    "Manually" building URLs for WFS is easy, because it's more or less a "static" geojson endpoint. For WMS it is not really an option for me, because WMS (especially combined with a GeoServer) is a somewhat complex standard with spatial and temporal dimensions and way easier to use with ready made libraries.
  9. omnibrain

    ANN : TECNativeMap 5.1

    My map looks like this: Then I add point markers for asset tracking, etc.
  10. omnibrain

    ANN : TECNativeMap 5.1

    Sounds great. I'm really intrigued. I'm really considering giving it a try, because currently I'm using leaflet in a web view. While that has advantages, especially for reusability in the web, a "native" Delphi solution would make my life easier especially for the simpler usecases. One more question: In one part of my app I'm enriching my Map with WFS and WMS. Via WFS I get a geojson layer and have a click handler assigned to every feature: var wfslayer = L.Geoserver.wfs("https://maps.dwd.de/geoserver/dwd/ows?service=WFS", { layers: "dwd:Warnungen_Gemeinden_vereinigt", style: { fillOpacity: 0, }, onEachFeature: function (feature, layer) { layer.on('click', handleClick); } }); wfslayer.addTo(map); Via WMS I get a raster layer and use plugins to show the legend and more important navigate through the time dimension: var regen = L.tileLayer.wms('https://maps.dwd.de/geoserver/ows?', { layers: 'dwd:Niederschlagsradar', format: 'image/png', transparent: true, version: '1.3.0', opacity: 0.5, attribution: 'DWD' }); var regen_time = L.timeDimension.layer.wms(regen, { updateTimeDimension: true, }); regen_time.addTo(map); L.control.scale().addTo(map); uri = "https://maps.dwd.de/geoserver/ows?service=WMS&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=dwd%3ANiederschlagsradar" L.wmsLegend(uri); Would this be possible with your component? Edit: I'm getting data from: https://maps.dwd.de/geoserver/web/ but will also use other sources in the future.
  11. omnibrain

    ANN : TECNativeMap 5.1

    For geolocation can I specify my own Nominatim instance?
  12. omnibrain

    ANN : TECNativeMap 5.1

    I run my own OSM tile server. Currently I bundle leaflet with my application, but your component looks interesting too. Regarding OSM you only mention setting map.TileServer := tsOsm; in code. But can I also specify my own tile server in the format http://example.com:8080/tile/{z}/{x}/{y}.png? Edit: I found it further down: https://www.helpandweb.com/ecmap/en/tecnativemap.htm#USE_YOUR_OWN_TILE_SERVER
  13. I want to host a console in my Delphi application. Editors/IDEs like VS Code and IntelliJ IDEA have an embedded console. I want essentially achieve the same. For the moment it doesn't matter if it is the "old" console oder the new "windows terminal". I want to have a tab or panel in my application with a console that runs cmd or powershell. Trouble is, I don't know where to start. When I search I only find how to write Delphi console applications. Or I find information on how to read the console output of other programs (like with TurboPack DOSCommand).
  14. omnibrain

    Hosting a console in a Delphi Application

    Yes, but redirecting input and output is not what I want to do. That's possible with the TurboPack DOSCommand I mentioned. But this way I lose everything that makes a (modern) console magic. Colours, clickable links. So I want to "host" the real deal. I suppose I can start a Console, pass a handle to a panel or something as the parent and have it draw within my program. I don't need the output. I could send input via Windows Messages if necessary.
  15. Can someone help me? I use a TObjectDictionary<integer,TmesData> with doOwnsValues, but if I remove an object via .Remove(key) my destructor does not get called. My class declaration: TmesData = class private procedure socketDataAvailable(Sender: TObject; ErrCode: Word); public payload: string; sendCount: integer; sendSocket: TWSocket; log: ts; sendTime: tdatetime; constructor create(alog: ts; const ip,port,apayload: string); destructor Destroy; //close and free socket function doConnect():boolean; function doSend():integer; end; On my form I do //create sendList sendList:=TObjectDictionary<integer,TmesData>.Create([doOwnsValues]); // add objects sendlist.Add(strtoint(seq),TmesData.create(doLog,edIP.Text,edPort.Text,mes)) later I do processing with for var seq in sendlist.Keys do begin //do processing //... //remove current object after processing sendlist.Remove(seq); end; The destructor of my TmesData objects never gets called. I must miss something obvious.
  16. Ah, yes. Obviously. I generally don't write my own objects (or they are only "records on steroids, so I don't need a custom destructor)
  17. omnibrain

    Delphi gitlab question

    And most important: Only commit what you actuallly changed. Revert all the rest. Only made a change to the .pas? Revert that changes to the dfm. Those are either selected tabs, attributes that got added with newer versions, or those imagelist headers that change by themselves. Or worse: you missclicked and moved a control. (Or Delphi decided to f*** with the DPI). Same for the project files.
  18. What extensions would you recommend? Is Delphi Extension Pack - Visual Studio Marketplace a good start?
  19. omnibrain

    pdfDoc

    ChatGPT does not answer with Facts but with the thing that is most likely going to be the answer. Sometimes that's actually a fact, sometimes it just makes stuff up. I had ChatGPT make up library names that sounded good, with method signatures that fitted the requirements, but they did not exist. When pressed ChatGPT even made up github repositories. This behaviour is more likely for Delphi than for example Javascript, because there was just not as much Delphi code in the training set.
  20. omnibrain

    Best practices for working with a DB accessed via REST API?

    Supabase Try Supabase. It is postgreSQL+postgREST+Auth. You can manage your access rights via row level security directly in the database. If the automatic API via postgREST does not fit you can always build something yourself later, because in the end it's postgreSQL and you can use it as such.
  21. I implemented the Async/Await-Pattern as described in The Delphi Geek: Async/Await in Delphi Now I want to update GUI-Elements from my async task. For example to write into a log window or update a status bar. How would I best do that. I guess I can't use TThread.Synchronize because that's a whole different library? memo1.append(datetimetostr(now)+': Starting'); Async( procedure begin memo1.append(datetimetostr(now)+': Start Processing'); for i=0 to itemcount do begin //process TThread.Synchronize(nil, procedure begin memo1.append(datetimetostr(now)+': Processed item No '+inttostr(i); end); end; end). Await( procedure begin memo1.append(datetimetostr(now)+': Finished Processing'); end); end;
  22. omnibrain

    Async/Await with updating visual controls

    Doesn't matter in this case, because it's just an example, but definitily something to consider if it plays a role.
  23. omnibrain

    Async/Await with updating visual controls

    Thanks a lot. It's my first real foray into parallelism and concurrency with Delphi. Especially with parallelism and concurrency I learned the hard way, that there is a difference between "seems to work in development" and "does really what it should be doing", especially when the Dev is inexperienced with the tools. Oh, yes, of course.
  24. Yes, they are barely scraping by and nobody uses their tools.
  25. Jetbrains gives you 25% if you send them a screenshot of your Delphi License.
×