I decided to take a bit of a shortcut on adding link previews to the Kyanite Facebook archive viewer. Rather than write the whole thing from scratch I figured maybe there was an OpenGraph rendering library already out there. Turned out there were a few for reading/parsing OpenGraph metadata, not that that is too hard either, but one which seemed okay at rendering it, link_preview_flutter . After a little playing it seemed to mostly “just work” but it was choking on cases where there wasn’t OpenGraph data or images in the data. I decided to be a good open source citizen and fork it to tweak it to handle those cases. That’s where my concern began.(More ...)
A few weeks ago I introduced the first beta of the Kyanite Facebook archive viewer. Today I’m announcing the second beta release complete with a bunch of bug fixes and new features. My favorite new feature is the map view for browsing/filtering posts that have geospatial information. You can get the latest version for download here .(More ...)
With the first real world usage of Kyanite
came the first bugs. One of the biggest bugs was an apparent memory leak. Part of it was coming from an extraneous image query code that I no longer needed so removed rather than fixed. However most of it was coming from the unlikeliest place. There are a few common text widget types but the two I was using were:
SelectableText was used anywhere I wanted users to copy/paste text of posts/comments/etc. It turns out that was the source of not only my memory leak but some performance problems as well.
NOTE: Because of how responsive the Flutter team is there is already a patch in pull request but I wanted to explore this here anyway. The article shows how ListViews are supposed to operate, how one builds performant ListViews with builders, etc. Also until the fix does go into a mainline version it will be important people keep this caveat in mind with SelectableText widgets.(More ...)
One of the idioms that I started using for function returns was the Result Monad. I first got excited about it when learning Rust, where this is an intrinsic part of function returns. It wasn’t until reading Adam Bennett’s blog post on the Result Monad library in Kotlin that I really felt the impetus to use it in other languages. I don’t always use it, especially in quick/simple things, but for building an API/library I have found it very useful. When coming over to Dart I tried to use something similar. There were some monad libraries or the “Either” concept in functional programming libraries. None of them had the flows and syntax that I liked in my favorite Kotlin Result Monad Library except for one library which looked abandoned and had a Flutter dependency so couldn’t be used in Dart only projects. I therefore decided to write my own and publish it. This post is an exploration of that. The library source code and issue tracker is here with the pub.dev entry here .(More ...)
While working on the Kryanite Facebook archive reader I ran into a frequent problem of garbled text. Ninety-nine percent of the time everything would be fine but then I’d see a string of weirdly out of place characters. I had assumed that perhaps the default encoding picked by the Dart file reader was to blame. Perhaps it should have been UTF-16 instead of UTF-8, or something along those lines. Experimentation didn’t help the problem. It turns out the problem is one of Facebook not properly encoding their files. With the help of another blogger who discovered the problem and fixed it I was able to create Dart code which fixes it for my uses as well. Here is the snippet . Read below the fold for more details.(More ...)
While dabbling with a technology is a hobby and can be fun, it really isn’t until I try to build something with it that I can truly have an appreciation for whether it really works or not. I’m now at that point of exploration with Dart and Flutter for cross platform desktop development. I opaquely mentioned this topic in this post . Yesterday I released a beta of my first application written in Flutter Desktop, called Kryanite . I’ve gotten to a comparable stage of work with other cross platform desktop tools over the past couple of years. Obviously none of which were quite totally satisfactory since I kept looking around. That search may be over now. At this point I can say that Flutter Desktop is by far my favorite cross platform development platform to date and I’m planning on doubling down on using it, and more generally Dart, in my development efforts.(More ...)
It is no secret that Facebook has been expertly doing the vendor lock play to expand and retain their user base. If all of your family and friend photos, event information, thoughts on current events, etc. are solely in their database then you have no place else to go once you finally join and start using it. It becomes more reinforcing the longer you are there and the more friends that join and do the same thing. In recent years though due to a combination of legislative action, public pressure, and fear of regulation they started allowing users to export all of their data from their system. It’s kind of hidden and can be a little confusing but once it’s done you can get a giant ZIP file archive of all your data. While it meets the letter of what was requested the fact is that that data is not digestible to the average user. To anyone that wants to actually use their Facebook data they still are stuck doing it through their system.
This post is about a preview release of a new tool I am working on to actually be able to use your Facebook Archive, which is called Kyanite . This tool is available for Windows, Mac, and Linux desktops. It will allow you to view, search, and extract data from your archive in a human digestible way. In same cases, like with search, it’s even more effective than the built in tools Facebook provides. Below is a quick tour of the product and how you can start using it. You can go right to the product page to start using it today. Also check out this post on how to get your Facebook Archive . Now on to the details of the Kyanite…(More ...)
Facebook actually has a mechanism for users to download their entire history from their site. It’s not exactly on the front page but not entirely hidden. If you don’t download it correctly it’s hopelessly difficult to make it useful. When you do do it correctly it is still difficult to use but with a tool like my Kyanite archive viewer it is possible to finally get access to your Facebook data in a meaningful way. This post is about how one can properly generate this archive within Facebook to use with this tool.(More ...)
The last month has been an incredibly productive time for me but not in my traditional areas of contribution. While I’ve done some open source contribution on other projects it has been more intensive work on a new open source project that really took up a lot of my time. I’ll be blogging a lot more on that application and releasing betas of it after next week. The big news in the short term on that front that I wanted to share was that the application development took me from an on-again-off-again dabbler with Flutter and Dart to it becoming my primary language. It has become my primary language so much that when it was time to automate some image transformation code I skipped my usual go to language, Kotlin, for Dart. It also is the first time I’m feeling this confident about a platform choice for cross platform application development.(More ...)
I’ve had an off again/on again relationship with Microsoft over the years. I despised them through the 90s as they became the big brother corporation gobbling up all of the computer market while Mac, Unix, and other operating systems like BeOS went by the wayside both as a natural process and because of monopolistic practices MS imposed on system vendors. The same was true for how they successfully dominated the early web after stumbling out of the gates. But most of my professional development and engineering life was on Windows machines, using Visual Studio, apps that only ran on Windows, developing software that only ran on .NET. It was only in the 2012 period on when customer’s demanded Linux-based systems that I was able to practically break free from that and my having alternative OS’s like Mac, Linux, or a BSD being just a side thing. At the same time the tech stacks I was working with lacked some of the cleanness and modernness I was used to expecting with .NET. That’s why I was so excited when Microsoft bought Xamarin, .NET Core came out, and it looked like Microsoft was going to finally embrace open source cross platform development. While it was never all roses and there were stumbles it was still a process that was moving in the right direction. It was but doesn’t seem to be any longer.(More ...)