Text Posts

Earth is melting, energy prices are surging. Camping vacation is around the corner. I'm working 100% remote. Almost every day is sunny.

Bluetti EB70 Power station and EB120 Solar panel
Bluetti PowerOak EB70 Power station and EB120 Solar panel

Getting a solar panel and a power station seems like a good idea these days. I have absolutely no idea about either photovoltaics, batteries or electricity in general, beyond plugging plugs into outlets. With no ambition to get into electric tinkering, I looked into ready-to-use solar panels that sell in a bundle with a suitable power station, that can power my MacBook, a little camping fridge and, when at home, an external display.

After some research, I had two products on the shortlist:

Both had a lot of genuine-sounding positive reviews, but the Anker solar panels seemed to have a problem with rain (I don't remember exactly if this was an official warning or just some random person), whereas the Bluetti appeared to be okay with a few sprinkles of water. Besides that, the EB70 can store roundabout 200Wh (Watt hours) more energy than the Anker, and it's a maximum output is 1000W, whereas the Anker can deliver only 500W.

Both power stations operate with lithium iron phosphate batteries, which are way less likely to ignite or explode than lithium-ion batteries. With about 5000 charging cycles, their lifespan is also way longer than li-ion's. That's definitely something to consider when shopping for cheaper alternatives.

With an equal cost of about €1000 for either set, I opted for the Bluetti due to its greater capacity and higher output, and the slightly higher nominal yield of the solar panel (120W vs 100W). This (German) review also sounded solid, although the domain name would suggest otherwise 🙃.

By the way, It seems the Chinese brand Bluetti is being sold as Bluetti PowerOak in Germany. Same device, different label, don't be confused by that.

Charging and Using the Bluetti PowerOak EB70

While these findings might be obvious to people who are into the topic, they were new to me and may be interesting to people like me. I haven't used it yet while travelling off the grid, and it's only been a couple of days, so as always, your mileage my vary.

Ports

The power station really didn’t make compromises on ports to charge devices, as well as those to charge the power station itself:

Input

  • Solar panel

  • 220V wall plug

  • 12V car cigar jack

Output

  • 2⨉ 220V

  • 2⨉ USB-C

  • 2⨉ classic USB

  • Wireless charging

My main devices

  • 27“ LG 27UL850-W

  • 14" MacBook Pro with M1Max, powered via the screen when connected

MacBook and external display powered by the power station
My MacBook and 27" display powered by the power station

Power input / charging

  • When the panel is fully exposed to the sun, it delivers 60-90W into the power station

    • I don't know if/how to achieve the nominal output of 120W, but I've heard that PV works better in colder temperatures, and it was really hot (way above 30C) during the last day

    • Also, I didn't exert too much effort keeping the panels in a perfect angle towards the sun

  • I'm not yet able to tell how long it would take to charge the power station fully because neither has it been empty yet, nor have I been charging without consuming energy at the same time.

Power consumption

  • With both screen at full brightness and the MacBook's battery charging: ~93W

  • Charged MacBook with closed lid and the 27" at 75% brightness: ~44W

  • Charging the MacBook with USB-C (Screen on): ~77W

  • Charging the MacBook with 220V plug (Screen on): ~85W

Unfortunately, I can't get full sunlight for my entire workday. At least while working with two screens and not permanently moving the solar panel to a better place, I watched the battery not being able to sustain charged over the course of a week. But I've also tried a couple of other tests, like running a larger TV from it, so it's not really representative.

I'm really curious to see how this works out when we're out camping, with a lot less need for work stuff, but a little fridge (50-90W) running.

About the first experiences with a mobile solar-powered energy supply

I've been an early user of Evernote, my first account dates back to 2009. I've stopped counting the times that I've left Evernote "for good" since then. Just as many times, I've decided to come back.

It's a seemingly endless cycle of being annoyed by lack of innovation (Backlinks? Transclusion?, Rich media embeds? Syntax Highlighting?), bad performance and company strategy that drives me away. Just to find out that other shiny tools lack in other areas. This is about what Evernote does right, and, in that combination, is not to be found in other notes apps I've tried.

Useful Exports

With Evernote being around for so long, its (proprietary) ENEX format as well as its API is accepted as an import target across many apps. It feels good to know that I can migrate my notes to Apple Notes, Bear, Notion, and many more tools easily, and keep attached images and documents. Ever exported notes with attachments from Notion, and tried to actually use those files? It was no fun for me.

Search, Search, Search

Evernote's search is very good:

  • it brings up relevant results

  • it indexes attached documents

  • it has great OCR

  • it performs OCR on images

  • it recognizes handwriting

  • narrowing results with filters works very well

Google Search 

Screenshot of a Google search for "Magnesium", with the Evernote extension showing results for the same query that it found in my personal notes

Evernote's browser extension shows notes relevant to a Google search right next to Google's own results. This is easily one of the most underrated features. I love how it makes me stumble upon things I've previously captured or written.

Document indexing alone is missing in almost all new-era PKM apps: Roam, Obsidian, Craft, Noteplan, Logseq all can't search across PDFs, let alone perform OCR.

Cards View

Screenshot of the Evernote Mac App, showing an excerpt of my "Design" notebook in the "cards" layout.

Evernote's Cards view certainly could be improved, but it's there, and it works for me. I've found myself missing such a visual overview a lot in tools like Roam, Bear or Amplenote. And while it's possible to achieve something like that in Obsidian using plugins, it's by far too cumbersome for my taste.

Capturing Data 

Again, certain other tools offer some of those features, but I've yet to find one that checks all boxes at once:

  • Web Clipper Extension: often praised, still unmatched.

  • API with many integrations

  • Readwise Export: I've not yet settled on the best long term solution to store and process highlights from things I've read, I certainly appreciate those things coming up in Evernote's search

  • Send via Email: not much to say about it: if an email is important enough to keep it around, I'll forward it to Evernote

Simple, in a good way

I'm the kind of person who, given the chance to tweak aesthetics, will spend excessively much time doing so. A Notion page without an Icon is causing me pain. Evernote's lack of such customizations is an advantage to me. 

Also, I've come to embrace the simple hierarchy of Stacks and Notebooks. It works really well for my (slightly extended) P.A.R.A. structure. It also fits my way towards putting less energy into structure. Given the good search this works out pretty well so far. 

And while I'd really appreciate to better interconnect and find related notes in Evernote, I've found it to be way less important for the kind of work I do than I've thought while exploring the Roam way of linking everything. 

Sharing Notes

This is also offered by many apps, but it might disqualify an app if missing because I use it constantly. Be it to share a solution to a certain problem or the notes I took while on a call.

It allows me to take a break

I like the fact that I can cancel my Evernote subscription anytime without losing anything I've put in there. For comparison, I really love mymind, but as soon as I stop paying, I'm going to lose everything, without even a way to import things once I decide to come back. 

To be fair, this is true for most apps, but a serious turnoff if missing.

Wrapping up

To my best knowledge, the combination of these features is exclusive to Evernote. And, at least for now, I've come to the conclusion that these are more important to me than the bells and whistles of the modern competition.

The next time I feel the urge to leave Evernote, maybe I'll be a bit wiser. At least I'll be consulting this list to know what I'll be missing.

Groundhog day - or why I'm using Evernote again

Arc browser is an exciting new app made by The Browser Company. It's made with an enormous amount of love for detail, and they're inventing great new ideas. I won't cover these here, but instead focus on what is holding me back from really using Arc.

I'm aware this is a very early stage and things will improve, so maybe my list of complaints can help to make Arc better :)

The top bar that is needed to interact with extensions only appears on hover, and it is a really narrow area that triggers its appearing. I constantly move too fast, making that bar appear and disappear. If possible, I'd like to be able to just set it to be always visible. (Also helpful when you have extensions that indicate some sort of state)

Animated Gif showing Arc's top bar appearing on hover
Triggering Arc's top bar is challenging

It's not possible to rearrange the order of extension buttons. They seem always sorted alphabetically. I want my most used extension to show up first.

Missing shortcuts (or command palette commands) to interact with split view. Arc has a great feature that allows to split the window to hold multiple tabs side-by-side. But I can't find a shortcut to move a tab from the left split to the right split. To move a tab to another split, I (again) need to find that hovering sweet spot (see 1), click a button and choose Move left / Move right

Animated Gif showing how to move a tab to another split area
I miss splitting and moving split windows with keyboard shortcuts

No visible URL. The only way to know the current URL is to copy it to the clipboard and paste it somewhere. Not knowing the URL you're currently on is a huge no-go. (Update: CMD + L shows the current URL inside Arc's command bar, so at least no copy & paste to see the URL)

I'm confused by then concept of Favorites. The name and their look suggest they'd be bookmarks leading to a constant URL, when in fact they behave more like tabs. I'd expect clicking my "Gmail Favorite" always bringing me to the inbox, not to the last message I had open there.

Screenshot of Arc's "Favorite"  bookmarks, or tabs rather
Favorites behave more like pinned tabs in Arc

Besides that, I'm having a hard time challenging long-learned patterns, such as having tabs arranged vertically instead of horizontally, along with the shortcuts to move around those (consequentially) not being cmd + alt + left/right anymore, but that it something I am willing to rewire my brain to.

I really want to like this shiny new browser, but it seems it's not right for me (yet?).

Today I stumbled upon Stumblr, a wonderfully simple starter kit for Statamic and I had to give it a spin. Set it up, don't overthink it and post thoughts, photos, notes, links and stuff like that.

Obviously, this is not perfect, but that's the point. And here's the RSS Feed, so I can finally be in Matthias' news reader 😂

Intial Commit

I think I got SAVE_CACHED_IMAGES in Statamic wrong the whole time. I thought it's about whether Glide-generated images are kept when clearing caches. If got it right, this is what it really does:

  • when set to true

    • All image presets defined in assets.php will be generated on upload

    • All Glide image variants referenced on a page will be generated on initial page load

    • All Glide variants required anywhere will be generated when waming the static cache

    • Image variants are stored in /public/img/containers/

  • when set to false:

    • All image presets defined in assets.php will still be generated on upload

    • Only the images requested by the browser will be generated and cached

    • Image variants are stored in /storage/statamic/glide/containers

Generated Glide variants are never wiped by clearing the application cache, no matter how SAVE_CACHED_IMAGES is set.

Consequences

Setting SAVE_CACHED_IMAGES to false

  • Will make initial loading times for pages with new images faster, because only the image in the format and resolution as requested by the browser will be generated (and cached for subsequent requests), not all sizes and formats referenced in markup

  • Uploading new images in the panel will be faster because asset presets won’t be generated

  • Less storage will be needed because when set to true lots of images are generated and potentially never used

Glide Cache

  • when setting SAVE_CACHED_IMAGES to false, image variants are still cached within Glide’s cache system, located at /storage/statamic/glide/containers

  • Glide’s cache is only cleared when running php please glide:clear, not with the regular php please cache:clear

Potential Disadvantages of setting SAVE_CACHED_IMAGES to false

URLs to images will not contain a file extension. In case of GLightbox, this leads to the script “thinking” the target URL is a page to embed within an iFrame instead of directly showing it.

Update: In case of GLightbox this can be solved by adding the data-type="image" attribute to the link that points to the large image

Caveats

When changing an existing project with static caching to SAVE_CACHE_DIMAGES=false, it might seem like having no effect at all. Statamic will build static pages with URLs to saved cached images if they're still present. Only after deleting public/img/containers/<name-of-container> , I started noticing images being served from URLs like /img/asset/<hash>

This Statamic setting is surprisingly confusing. I might well be wrong with some of my observations and would be glad to be corrected if so.

Setting up Static Caching in Statamic isn't too hard and brings a huge performance boost. Here are the steps I had to take to enable it both locally with Laravel Valet and on a production server managed through Laravel Forge.

Enable and configure Nginx

  • Enable Static caching by setting STATAMIC_STATIC_CACHING_STRATEGY=full in .env

  • Add the following directive to Nginx config

    location / {
        try_files /static${uri}_${args}.html $uri /index.php?$args;
    }
  • Laravel Forge provides easy access to a site's Nginx config. On my local Valet dev environment I had to first run valet secure because to run a site with https Valet creates a config file in ~/.config/valet/Nginx. This can then be used to add the try_files rule (under a weird location, like location /41c270e4-5535-4daa-b23e-c269744c2f45/. This exists twice, I added it to both, no idea if that's required). Don't forget to update APP_URL in .env and flush the config cache

Clear and warm the static caches regularly

For sites that have dynamic content such as scheduled publishing or filtering by date, it makes sense to rebuild the static cache frequently.

The commands to do so are

  1. php please static:clear

  2. php please static:warm

We can add those to Laravel's scheduler (related: Setting Up Job Scheduling for Statamic )by adding the following to the Kernel class in app/Console/Kernel.php:

    /**
     * Define the application's command schedule.
     *
     * @param  \\Illuminate\\Console\\Scheduling\\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('cache:clear')->daily();
        // $schedule->command('config:cache')->daily();
        // $schedule->command('route:cache')->daily();
        // $schedule->command('statamic:stache:warm')->daily();
        $schedule->command('statamic:static:clear')->dailyAt('03:00');
        $schedule->command('statamic:static:warm')->dailyAt('03:00');
    }

daily runs at midnight, while dailyAt can be given any time of the day.

All that is left to do is to set up a Cronjob that calls php /home/forge/mysite.tld/artisan schedule:run every minute:

I took some notes while setting up static caching in Statamic for the first time.

Today I learned that AlpineJS 3.x uses queueMicrotask –  and that that’s an API not supported in Firefox < 69 and Safari < 12.1 (see caniuse for full support information).
Luckily, this can easily be polyfilled:

if (typeof window.queueMicrotask !== "function") {
    window.queueMicrotask = function (callback) {
      Promise.resolve()
        .then(callback)
        .catch(e => setTimeout(() => { throw e; }));
    };
}

How to make Alpine 3 work in Firefox < 69 and Safari < 12.1

#JS