Saturday, November 9, 2024

Spring Boot

I really like how SharePoint and Teams let you save opened documents or spreadsheets back directly from the app. I expected some proprietary protocol and was really surprised to learn they actually use WebDAV.

It tooke me a few hours of tweaking responses to various DAV HTTP methods, like LOCK, UNLOCK and PROPFIND, but I ultimately created a very simple PHP script that wasn't perfect, but worked with just minimal annoyences (like various prompts, some of which are present even on SharePoint).

I've always wanted to do a proper file manager, like Total Commander, so this was a great excuse to create one. I started developing scripts to show various file types and I was REALLY happy about that, especially because some of them were actually more useful, than my current work setup, and I ended up using it not just for fun, but for regular work as well.

I didn't have to hold myself back, because the main deploy target is Qik Home Server and not a public webhosting, therefore I (for once) can use things like `exec`.

For metadata I chose SQLite and I finally decided on a database model. When I was going to implement it, I had to laugh, because I found pretty much the same exact model I created way back in 2018.

Wednesday, September 25, 2024

Here a DAV, there a DAV, everywhere a DAV, DAV

I really like how SharePoint and Teams let you save opened documents or spreadsheets back directly from the app. I expected some proprietary protocol and was really surprised to learn they actually use WebDAV.

It tooke me a few hours of tweaking responses to various DAV HTTP methods, like LOCK, UNLOCK and PROPFIND, but I ultimately created a very simple PHP script that wasn't perfect, but worked with just minimal annoyences (like various prompts, some of which are present even on SharePoint).

I've always wanted to do a proper file manager, like Total Commander, so this was a great excuse to create one. I started developing scripts to show various file types and I was REALLY happy about that, especially because some of them were actually more useful, than my current work setup, and I ended up using it not just for fun, but for regular work as well.

I didn't have to hold myself back, because the main deploy target is Qik Home Server and not a public webhosting, therefore I (for once) can use things like `exec`.

For metadata I chose SQLite and I finally decided on a database model. When I was going to implement it, I had to laugh, because I found pretty much the same exact model I created way back in 2018.

Sunday, December 1, 2019

Blog rewrite

After success with frontend framework I decided to use PHP Lite Framework and rewrite some of my websites, like QetriX incl. Blog and Docs. I want them to be faster, transfer less data and be overall more efficient.

I have some content platforms (mainly Quiky, Qip, Redsys and Static), that I'd like to merge into the same codebase. For years I wanted to merge old Redsys with Quiky, to make Quiky a true CMS with all the features and WYSIWYG editor. Also, I wanted Quiky to have Qip's lightning fast tags.

So one day I compiled all of my previous attempts of WYSIWYG content editors, because I wanted to reuse some of the code I wrote in the past, and I was staggered how many times I started, with first tries back in 2012.

The most active year was 2016, because I finally saw “my” concept of content blocks in action in the popular Medium content editor and its clones – notably later in Gutenberg for WordPress 5, released a year ago. Another notable mentions include Notion.

But every time I've fallen back to just plain text in textarea, due to various issues, and hoped that a bunch of neat keyboard shortcuts would satisfy me. Although I really like how Qip works, if it really did satisfy me, I wouldn't be writing this post. :-)

So, let's see, where it will stop me this time. I hope the key to success are baby steps, small incremental improvements. I'll start with a decent text editor, that is a pleasure for me to use. Everything else will be managed directly in data at the moment, and support for more advanced blocks, e.g. gallery management, will be added later.

Friday, July 5, 2019

Saving

There are basically three major approaches:

  • save everything at once using a manual trigger (button),
  • save after every change using an event trigger,
  • save after a time period using a timer.

My approach is a combination of all of the above, with incremental saves prevalence. But, as usual, things aren't as simple as they may seem. In forms you can save data only after all required fields are filled. In editing long text there are no partial changes, so there's no cue when to save.

Therefore I have two ways of auto-save in a text. I define a 5 secs timer, that saves the text after it's not changed, which means e.g. arrow keys do not stop this from firing. The other way is I save after Enter key is pressed.

Before each change of text I create a “backup”, to have an undo option in case I or the editor mess it up. After the text is verified, those backups are deleted.

I also try to show saving in some unobtrusive way, like dimming header color or change it's background.

Wednesday, January 2, 2019

Qip

Quiky is great, but it's forte is more in articles. Much more often I need only snippets with notes or memos – programming, cooking and such. Short texts with tags for rapid searches.

It crossed my mind it might be nice to show multiple snippets at once for given intersection of searched tags, and also tag files - particularly photos.

I was once again on a quest for a short name, starting with “Q” and also which wouldn't collide with names of other products.


Qip logo, resembling a swift rocket.

I settled for “Qip”, which is Latin for... nothing :-) Actually, there's no latin word starting with “qi”, but “qui” means “which?” and “quip” allegedly means “a witty remark”, which is both quite suitable.