Feedback loops

in #utopian-io4 years ago (edited)

With every software there is a constant flow of information coming and going from the user, to the client, to the server, and back again. With each input something should happen, a window should pop up, a dialog should appear (or disappear), a notification should alert the user. Most of this update focused on those interactions. Even though one could file these updated interactions under "feature" or "bug" I believe they are more of an enhancement. So with that being said, here are the UX enhancements I have added this round



  • Location services : Informs the user if they have location services turned off. The software can still use the clients IP address to approximate location, but this is not ideal. Issue 73

  • Coming soon: Probably one of the more irritating notifications (but necessary) various tasks aren't ready for general consumption, but to build interest in what might be coming we give them the button all the same.

  • Card updated: When someone updates their card the server sends the client a update command to refresh the data on any client that has the users card. There is now a notification for this event though it could be improved upon.


  • News Window: Talked about more in depth below, my hope is that this window will help to encourage users to get the latest version from the store. It can also be used to encourage users to explore the interface a bit more to boost user interactions.

Notifications are controlled by Notification.qml and called using code similar to the snippet below:

notification.themessage = "Hello there"; /* the message you want to share */
notification.delay = 5;  /* How many seconds you want the notification visible */
notification.visible = true;  /* triggers the notification */

In the above code "notification" is a defined object 'id'. The object is added to whatever interface you want the notification to display on. When you define the notification object you can set various options. As shown below.

Notification {
    height:parent.height * 0.20
    anchors.bottom: parent.bottom
  themessage : ""
    visible: false


New Feature - Micro Blogging Feed. (Preview)

Last week I began implementing the micro-blogging features into CafeSync. Based on OpenSeed's "Narratives" it will be a fully featured micro-blogging platform similar to twitter, but with CafeSync's spin on it. Please note this is considered "preview quality" and presented as a teaser for what will come in next weeks update.


As you can see the format is similar to all other micro blogging services with the usual options along the bottom. As these do not currently work (preview remember?) Let us consider these a part of the features "roadmap" and will be described below. Using the image as a guide the road map below lists the icons in the image from left to right.

Road Map
  • Like: Whats a blogging platform without a like button?
  • Share: Embed the selected post into a new post where you can comment on the original.
  • Reply: Just your typical reply button, it will create a sub thread below the main.
  • View Card: The only real "Original" feature for CafeSync it will allow you to view a persons card by tapping on this icon.

OpenSeed's API was recently updated and included the ability to have nested conversations. With this change to the calls I was able to begin building the interface around these new features.

We start with microblogger.js and its retrieve_log function: here I added the ability to fill an array (for remote users) and created a table to save the log to the device. (for the user.)

Having mentioned the "scattered clouds" approach I've taken with CafeSync, the phone stores pertinent information for offline access.

Next we setup the MicroBlogger.qml file which calls the aforementioned microblogger.js file to fill the feed with the proper information and display it.

Finishing the implementation we add the MicroBlogger item into the Pages.qml file here

Its worth noting that in MicroBlogger.qml there is a "no items found" screen that displays if the users hasn't yet added anything to the blog. In later version we may remove the page entirely when there is no content, but it has yet to be decided.

New Feature - News Window.

One of those pesky things that I often forget about when working on creating software is updating my users on the newest version. With the new News window, and server side delivery, my software now informs my users on new, and up coming features .


Though the feature is far from a show stopper it is designed to be modular and can be added to my other applications without code change. Which makes me a very happy coder.


Thankfully this process is very straight forward as it required all new code. I created both the news.js and News.qml files and added the required Item to main.qml . The news.js file queries the OpenSeed server for any news about CafeSync based on its devID and appID. OpenSeed sends the information to the client and the client then stores the date of the news announcement locally. If the routine check for news comes back with a date equal to what has already been seen nothing is done otherwise the News item is displayed. Simple as that.

New Feature - Agreement Window

Almost a word for word copy off the News Window, I merely added a cancel button on the left; shifted the okay button to the right; and added the text of the agreement. For the sake of brevity we wont go into the specifics but if you would like to look at the code the files are eula.js and EULA.qml.

Road Map
  • create a EULA that can be downloaded from the server to the device, Similar to the way news works but where it saves a copy as well.

The interface got some other minor tweaks that I will spare you for the time being. Most notably is the removal of the animation that happens when the card list is displayed. With the features and enhancements out of the way its on to the bugs.

Bug Fixes

Card Self Destruct

Every card collected (but not saved) has a count down timer to auto delete at a certain point in time. With so many updates and so few users the function was disabled. On enabling this feature the code had to be modified to make it work as it was supposed to.

Issue #62

  • What was the solution?

Deletion of the card was off loaded to another function in the system, this function was not behaving as I believed it would due to several server and client side issues. Most humorous was the difference in how the systems consider time stamps. The server would send a time stamp based on seconds, where the client was counting in milliseconds, causing all cards, no matter when collected, to be thousands of years in the past, and causing some cards (those collected in earlier versions) to have dates far in the future. Since these dates were not shown in the interface until the sort function was implemented I was unaware of the issue. I have since moved the deletion function back to the card object as it has its own loop that can act independent of the main loop. I will spare you the git hub links due to the numerous files that needed to be touched and how very few lines were edited within the documents. Most revolved around dividing the local time stamp by 1000. For those curious this is the simple code added to fix the offset.

var humanDate = "";
  if(pull.rows.item(record).stamp.length > 10) {
                    humanDate = new Date(pull.rows.item(record).stamp);
                    } else {
                        humanDate = new Date(pull.rows.item(record).stamp*1000);

I'm sure there were more minor bugs fixed in this release, and the subsequent pull request to fix the bugs that I didn't catch in this version.

Find out more

Curious about CafeSync and what it does? Check out my other posts here on Utopian and/or SteemIt


Android Version

Posted on - Rewarding Open Source Contributors


Thanks for the contribution. It has been approved.

Need help? Write a ticket on
Chat with us on Discord.


Hey @bflanagin! Thank you for the great work you've done!

We're already looking forward to your next contribution!

Fully Decentralized Rewards

We hope you will take the time to share your expertise and knowledge by rating contributions made by others on to help us reward the best contributions together.

Utopian Witness!

Vote for Utopian Witness! We are made of developers, system administrators, entrepreneurs, artists, content creators, thinkers. We embrace every nationality, mindset and belief.

Want to chat? Join us on Discord

Coin Marketplace

STEEM 0.48
TRX 0.09
JST 0.062
BTC 49244.77
ETH 4193.19
BNB 575.79
SBD 5.86