Jump to content

Eli M.

  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Eli M.

  1. There are 50 new cross platform samples for Delphi 10.3 Rio FireMonkey available over on Github. The demos heavily feature … http://www.fmxexpress.com/50-cross-platform-samples-for-android-ios-osx-windows-linux-and-html5-in-delphi/
  2. It's intentional. The file has it's own copyright and is not covered under the BSD license. https://www.woll2woll.com/single-post/2017/04/24/Send-an-Email-with-an-Attachment-FireMonkey
  3. Not written up no. .SO (SharedObjects) files are basically DLLs. You can either take the one Delphi makes and put it into some other tools APK package and call it from the code in the other tool. Or you could take the 64bit version of the .SO their tool generates and have it call your .SO file. And then put their .SO 64bit in your Delphi APK and have it call your 32bit .SO.
  4. An MVP confirmed that they were granted an exemption for their app for ~1 year.
  5. The PhotoEditorDemo has permissions code that works for the camera.
  6. PM me with a budget. I can probably put together some people on UpWork with Android NDK experience to build a 64bit shim. Few different options. Use one of the tools that has an exception (Corona Labs, Adobe AIR, Unity) to load the 32bit SO file. Use something like Flutter which compiles to 64bit to load the 32bit SO file. Or compile a 64bit C++ SO file with the Android NDK to loadlibrary the 32bit SO file.
  7. It probably does work since there are actually 3 third party tools with exceptions. Just have to find what Google Play are looking for. I didn't try very hard. http://www.fmxexpress.com/learn-how-to-deploy-delphi-10-3-rio-android-apps-to-google-play-with-android-64-bit-requirements/ I've been banned from Google Play twice before (nothing to do with this) so YMMV.
  8. I've heard if you have a libunity.so in your APK or your project name is unity (so it generates libunity.so) then Google accepts it as a 32bit Unity app. YMMV.
  9. Eli M.

    FMXLinux web app deployment

    Updated version. Takes two params. First is the path of the app to run and the second is the port to run it on. Apparently balance only supports 16 (or 32) groups unless you compile it yourself. Example: ./gtkcloud.sh /root/FireMonkeyPaintDemo 81 #!/bin/bash for i in {1..16} do nohup broadwayd :$i & export GDK_BACKEND=broadway export BROADWAY_DISPLAY=:$i $1 & #echo "" done servers="" for ii in {1..18} do let port=8080+$ii servers="$servers localhost:$port:1 %" done echo $servers balance $2 $servers
  10. Eli M.

    Injecting Pascal into PHP?

    PHP4Delphi lets you build extensions for PHP. Pretty old though. https://sourceforge.net/projects/psvlib/files/PHP4Delphi/
  11. Eli M.

    FMXLinux web app deployment

    The way broadwayd appears to work is that it runs a single application on a single port for a single user. The connection is persistent because it is a websocket. This means that you need 1 port set up per concurrent user. I came up with some code but it isn't quite right yet. Basically, you have to run broadwayd and the app in the background. I came with this for loop bash script (edit: works now). Make sure you have enough RAM. #!/bin/bash for i in {1..99} do nohup broadwayd :$i & export GDK_BACKEND=broadway export BROADWAY_DISPLAY=:$i ./FireMonkeyPaintDemo & done Once you get your application running on 100 ports in the background (which will support 100 simultaneous connections/users) then you need a TCP load balancer to turn the 100 points into 1 port. One such tool is HAProxy: https://www.haproxy.com/blog/websockets-load-balancing-with-haproxy/ A simpler tool (with maybe less performance) is called balance (sudo apt install balance ). https://www.systutorials.com/docs/linux/man/1-balance/ Here is a sample command which would load balance 4 broadwayd ports as port 81: balance 81 localhost:8080 localhost:8081 localhost:8082 localhost:8083 After running this and the above you would be able to connect to localhost:81 and it will load balance you across the 4 backend ports. You can probably also do this with TIdMappedPortTCP.
  12. Eli M.

    Mustangpeak UltraExplorer

    I use UltraExplorer everyday. What is the license on the source that you have? Maybe you can post it to Github yourself.
  13. Try deploying a new blank app.
  14. Eli M.

    Mojave with RAD Studio 10.2.3?

    Apple claims to be moving to allow iPad apps through Marzipan on macOS before the end of 2019. https://www.bloomberg.com/news/articles/2019-02-20/apple-is-said-to-target-combining-iphone-ipad-mac-apps-by-2021
  15. Eli M.

    10.3.1 has been released

    Installed. Went pretty smooth. Inline variables code insight still not fixed. Other than that seems good. Installed the new Navigator plugin from GetIt.
  16. Eli M.

    Blogged : Delphi Package Manager RFC

    I can contribute an FMX client that ties into whatever command line package manager you come up with. I already have one that uses a local CodeCentral database.
  17. Eli M.

    Blogged : Delphi Package Manager RFC

    What about Chocolatey? Already for Windows. https://chocolatey.org/ It already exists. It's already for Windows. Adding Delphi components to their ecosystem would help spread Delphi to other developers.
  18. Eli M.

    Generating one-to-many on the fly with Live Bindings

    It doesn't matter to me whether you use LiveBindings or not. I use it where appropriate and it saves me time. Obviously in your use case you claim it did not save you time. Use the right tool for the job.
  19. Eli M.

    Generating one-to-many on the fly with Live Bindings

    Maybe the problem is not specifically LiveBindings but trying to do too much on a single mobile screen at the same time. This project uses a number of different livebinded fields: https://community.embarcadero.com/article/16633-deep-dive-field-service-app-template-for-android-and-ios-with-rad-studio-10-2-tokyo
  20. Eli M.

    How can I serialize a TFieldList into a JSON string ?

    Looks like it saves the definition to me? {"FDBS":{"Version":15,"Manager":{"UpdatesRegistry":true,"TableList":[{"class":"Table","Name":"FDQueryTenants","SourceName":"tenants","SourceID":1,"TabID":0,"EnforceConstraints":false,"MinimumCapacity":50,"ColumnList":[{"class":"Column","Name":"TENANTID","SourceName":"TENANTID","SourceID":1,"DataType":"WideString","Size":144,"Searchable":true,"FixedLen":true,"Base":true,"OInUpdate":true,"OInWhere":true,"OriginTabName":"TENANTS","OriginColName":"TENANTID","SourceSize":144},{"class":"Column","Name":"TENANTNAME","SourceName":"TENANTNAME","SourceID":2,"DataType":"WideString","Size":256,"Searchable":true,"Base":true,"OInUpdate":true,"OInWhere":true,"OriginTabName":"TENANTS","OriginColName":"TENANTNAME","SourceSize":256}],"ConstraintList":[],"ViewList":[],"RowList":[{"RowID":0,"Original":{"TENANTID":"00000000-0000-0000-0000-000000000001","TENANTNAME":"Initial tenant"}}]}],"RelationList":[],"UpdatesJournal":{"Changes":[]}}}}
  21. Eli M.

    Firedac and SQL Server DB with "." in name

    My only suggestion would be try various forms of quoting it with double quotes and brackets. You tried some but maybe not using double quotes? https://docs.microsoft.com/en-us/sql/t-sql/statements/set-quoted-identifier-transact-sql?view=sql-server-2017 Also you could copy the FireDAC source file where it throws the error from to your project and modify it as a workaround.
  22. Eli M.

    Generating one-to-many on the fly with Live Bindings

    I use LiveBindings all the time in mobile apps so not sure what mausmb is going on about. Anyway, yeah, I don't see a way to make your code any less than it is. It's only 4 lines of code. Trying to think if putting it into a TFDMemTable first helps at all and I don't see that it does. In Edit1ChangeTracking with a for loop and TFDMemTable.AppendRecord you might be able to pack it into 3-4 lines. Might give you better flexibility with the data later.
  23. Eli M.

    How can I serialize a TFieldList into a JSON string ?

    It has built in support to save out to JSON. https://flixengineering.com/archives/299
  24. On IOS the WebView create isn't as clear cut but maybe can be modified in a similar fashion in: FMX.WebBrowser.Cocoa.pas
  25. Can trap and do things with the URL before navigation in OnShouldStartLoadWithRequest (should work correctly in Delphi 10.3 Rio in theory): https://stackoverflow.com/questions/23416086/callback-delphi-function-from-twebbrowser-by-javascript-on-delphi-xe6-for-all-pl Can modify the settings of the Android WebView here (copy the file to your project and edit) FMX.WebBrowser.Android.pas constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end;