I want to reach out to everyone and update you on the things we are doing. The Canela team continues to work from home, thanks to Covid. The reality is that we have been extremely productive during this time. Our team collaborates on development as if we were in the same room. It has been a great experience.
Our team remains very focused on Appli. Appli is our front-end design tool for making database apps. Our progress has been tremendous. In the last few months, our new IDE has become very clean and robust.
What kind of progress have we made? We have added the ability to create and test apps on a simulator and a mobile device. This feature alone will cut down the development cycle because you can forgo the need to compile and transfer your apps. You save your work and press a refresh button on your phone to see your updates in real-time. You are updating your actual app on a mobile device without having a developer account and app store experience.
Appli comes with a completely responsive design system that is easy to use. You can build your app for any size phone, and it will look pixel-perfect on all phones, no matter the size and aspect ratio.
We have also been working on our Appli elements (complex controls) by improving their functionality and performance. Each element solves anywhere from hundreds to thousands of lines of code automatically. Once you draw your element on the playground, the element is ready for action.
Appli takes full advantage of LiveCloud. Drag a CSV file onto the playground and have Appli automatically store the data in the cloud, build a table for you, and bind your data in seconds. Save your work and test on your phone. You will notice that the table automatically manages key features like editing your data, sort columns, rearrange columns, and rearrange rows. You can decide which columns to make visible. Buttery smooth scrolling on mobile is managed automatically for you. Pull down on the table to refresh your data. Your table can display gigantic amounts of data with its cache system that streams data as you scroll. It looks amazing!
Appli solves so many problems elegantly. It is fantastic that we will have another option for developing apps. All of this work intimately applies to LiveCloud and CanelaDB. Our database and cloud architecture is the meat of the Appli framework. Your apps are indeed databases in the truest sense. You no longer need to think about your app's file and folder architecture. Instead, you get to focus on the UI/UX in a way never before possible.
What types of apps can one create with Appli? We plan to rewrite LCM and NurseNotes in Appli. I can see our productivity increased by not having to manage the UI/UX in code. It also will allow us to release a version of LCM that can run on a tablet and phone.
When will Appli be released? That is the age-old question every software team wishes they could answer accurately. We are planning to go into closed beta this April. We have been demoing our progress and eliciting feedback with a unique group of people over the last few months. We will know more after these champions have had time to kick the tires.
What does all this mean for LiveCloud and CanelaDB? We have been improving LCM behind the scenes during Appli's development. We will soon release new under the hood improvements. We have a few new features and enhancements that we think you will enjoy as well. Mac developers will soon be able to run LCM as a notarized app. We did a lot of work on our app update system. This intense refactor will allow our software to work with modern OS requirements in the future.
We have some big plans for LiveCloud that will allow more collaborative work. Imagine being able to invite another person to access a project on your account for collaboration. Soon you will be able to link your blobs externally to other apps. Our recent refactor of our internal ordering system added a new level of robustness.
Appli would not exist without LiveCloud. Thus, LiveCloud is more important to us than ever before. I hope this information is informative and helpful to you. Please comment below if you have any thoughts or questions.
I've had this recurring issue in developing an app based on LiveCloud -- every now and again, without any clear triggers, the SDK becomes 'unusable'. I'm guessing there is a possible corruption issue?
I just get the message 'the CanelaDB SDK is missing' -- when it's clearly there and has been in use for weeks with no issues...
The SDK folder is stored in a folder containing the LiveCode mainstack; it uses a local DB that syncs with the cloud DB with a custom handler called SyncDB pSource, where the pSource is either local or cloud and will overwrite destination at cloud or local respectively...
This type of issue seems to crop up every 3-4 weeks, I'm unable to explain why... If i download the SDK again, it works but of course my concern is if this will keep happening with the deployed app...
ran into problems importing a CSV file into LiveCloud. This is a large file (122 Mb) with 127K + records
Issues:
1. only 103,000 of the 127,000 records were imported
2. the text was exported from an SQL query system that encloses text components in double quotes; there are leading or trailing double quotes (or both) in all fields. However it seems random if these are leading, trailing or both...
3. several fields also have a leading comma in their text (ie. the field starts with ,"field text"
Any advice? (i mean other than programmatically importing the data file to LiveCode and writing a handler to do this)
Just a quick question about BatchSync - I am using cdb_batchSync to update the cloud database from the local database at certain intervals...
It certainly does the job, BUT... it seems to be a 'blocking' command, meaning that everything in the app stalls until the command completes.
Is there a 'non-blocking' version of this, or am i doing this wrong?
this is my algorithm for syncing the entire db in either direction:
command syncDB pSource local tTableNames, tTableID, tInputA, tMessage put cdb_tableNames() into tTableNames repeatforeachline tTable in tTableNames put cdb_tableID(tTable) into tTableID put"*"into tInputA[tTableID]["cdbRecordID"] put pSource into tInputA[tTableID]["source"] puttrueinto tInputA[tTableID]["allowDeletes"] putfalseinto tInputA[tTableID]["detectCollisions"] endrepeat get cdb_batchSync(tInputA)
if cdb_result() isnottruethen put"Error syncing cloud <-> local database: " & cdb_result("response") into tMessage answer tMessage endif end syncDB
I think it may just be a bit too complex to try and maintain a system that flags changes and only syncs them, not in the least as the data is relational involving multiple tables and is still being developed, so i would prefer a system that would just sync everything 'in the background' if that were possible...
As it stands, the process to sync does not appear asynchronous and blocks the interface - grateful for any advice/tips (or if appropriate a feature request for an asynchronous sync!)
Hi all,
I'm having difficulty with getting a standalone to use LiveCloud...
i've adapted the login set up from the 'create project' from LCM's toolkit dialog. I use the same interface/code and if successful login it navigates to another card.
Inside LiveCode (Indy 9.6.1) this works great.
However when building standalone this just doesn't work and no error is generated.
I've made sure all external files for the app and livecloud's required libraries are included.
In particular: Internet, tsNet, mergJSON, SSL & Encryption, as well as the app's CanelaDB toolkit folder are definitely included (I've also tried just adding the 3 subfolders of the /CanelaDB/ folder instead, but no difference)
I've added some debug code to try and figure out where the app fails in the standalone.
Running the 'login' command below gets as far as calling cdb_auth, then nothing else happens in standalone, whereas in LiveCode it works as expected, completing the authorisation and navigating to the correct card. If i try to create a new account, nothing happens again.
The login code called by clicking 'log in' is (comments indicate what works inside LC and in Standalone)
Code:
command login
local tInputA, tLayer, tAuthStatusA, temp
if not _verifyLoginData() then
exit login
end if
answer "about to send cdb_auth" //debug code -- this works in LC and Standalone
get cdb_auth(fld "Email-input" of grp "login",fld "Password-input" of grp "login","User")
put cdb_authStatus() into tAuthStatusA
answer "Response: " & cdb_result("response") //debug code -- does nothing in standalone; no response, no error. In LC this answers authorisation completed
repeat for each key tKey in tAuthStatusA //debug code -- no response here either. In LC it answers cloud: true, local: true
put tKey & ":" && tAuthStatusA[tKey] & return after temp
end repeat
answer temp
if tAuthStatusA["cloud"] then
go to card "card1" //works in LiveCode, but not standalone
else if tAuthStatusA["local"] then
go to card "card2" //works in LiveCode, but not standalone
else
answer "Error authenticating user:" && cdb_result("response")
end if
end login
Based on this it seems like after cdb_auth, the process stalls somewhere in the standalone, as the next 'answer' debug line never fires but does inside LC.
Looking at my firewall, the app doesn't seem to be attempting to connect to the internet at all (according to Little Snitch)
What am I missing? Any help would be greatly appreciated...
Just been looking through the API and came across batchMerge.
While this may be potentially quite useful, I found the documentation fairly impenetrable and difficult to ‘grok’.
Does anyone have a high level overview of this and when it’s used?
Hi all,
I’m trying to convert an existing project from a relational database.
I’m hoping I can get some help constructing a query that’s fairly straightforward in SQL...
In this scenario there are 3 tables:
- table 1 has a list of dates
- table 2 has encounter data that includes a foreign key for person and links to table 1 by date (table1.date = table2.date)
- table 3 has person data and links to table 2 with personID (table2.personID = table3.personID)
So basically selecting a date in from table 1 should retrieve all encounters in table 2 with the same date and in each retrieved result, the personID foreign key should retrieve person data from table 3 when presenting the data.
in SQL i’d just use a SELECT with JOIN statements to retrieve this in one go.
Is this feasible with liveCloud? Or would i need to construct an array running 2 separate queries?
Alternatively, should the data structure change to include all person data in the encounter table for example?
My customer considerations using LiveCloud is the limited RestApi so it will be difficult to connect some of the services we have built.
I hope this can be a feature.