Shared posts

04 Oct 20:33

Potential new elevator pitch / tagline for Datasette: The best way to publish data online

Potential new elevator pitch / tagline for Datasette: The best way to publish data online

One of the biggest challenges I've had with Datasette is compressing it into a single elevator pitch or tagline that helps answer the question "what does this software do?" - the project does a lot of different things, so finding the right angle for explaining it has proved really difficult. I'm workshopping a new tagline over on the Datasette discussion forum - feedback, suggestions and challenges very welcome!

Via @simonw

04 Oct 20:33

NewsBlur Blurblog: Declining Emotional Invitations

sillygwailo shared this story from Steve Pavlina.

This is a follow-up to the last two posts on emotional consent and how to invite emotional consent.

What if someone makes an emotional offer, either directly or indirectly, and you’d actually like to decline?

Suppose someone starts venting at you emotionally, and you know that if you continue to listen, it’s likely to be draining. Or suppose someone is pretty aware of the importance of emotional consent, and they ask you if you’re up for a heart-to-heart about something important to them. And suppose you don’t feel up to having that kind of conversation.

What’s a good way to decline the invitation, whether that invitation is directly expressed or indirectly implied?

Of course that depends on the situation, your relationship with the person, and how aware they are of the importance of emotional consent. But here are some empowering ways to frame this, so you can decide upon a healthy response.

Is It a Good Offer?

First consider whether the offer of an emotional conversation is a good one. Do you feel good about saying yes to it? Can you say an aligned yes?

Or do you feel it’s a bad, lopsided, or unfair offer? Do you sense some resistance within yourself? Are you thinking something like “Oh boy… here comes some drama,” or “Why do I have to be this person’s shoulder to cry on?” or “Oh no… not more whining today!” or even “How much time is this gonna chew up if we get into this now?”

How’s your energy when you receive the invite? Are you capable of playing the role the other person wants from you? Are you willing to have that kind of experience? Or would you rather avoid it?

Are you feeling generous, kind, and helpful? Or would it be better to decline the offer and focus on other needs and interests?

It’s wise to do a quick check-in with yourself before responding in a way that the other person would interpret as consent to proceed. Even if you do go some ways into such a conversation, you still have the ability to stop, although it’s easier when you catch what’s happening earlier.

If you want to support someone emotionally, that’s your choice. Just remember that it really is a choice. You’re not obligated to be anyone’s emotional punching bag or teddy bear unless you really want to play those roles.

I’d recommend doing a quick assessment (like in your journal) regarding what kinds of emotional offers you’d appreciate receiving. Even say your preferences aloud, like you’re telling life what you want.

I tend to accept emotional intimacy offers that seem:

  • genuine
  • win-win
  • freely made without attachment to outcomes (no neediness or desperation)
  • interesting, fun, growth-oriented or otherwise worthwhile
  • fair
  • honest

I tend to decline or ignore offers that seem:

  • presumptuous
  • obligatory
  • win-lose, lose-win, or lose-lose
  • uninteresting
  • unfair
  • creepy or threatening
  • likely to have a hidden agenda

I like emotional depth, so I’m usually okay having deep and emotional conversations with people. I like them to be purposeful though. Even if it’s pretty one-sided, I want to feel like I’m somehow helping the other person or making a difference. I’m often willing to listen and offer advice and help with growth-oriented people.

I am sensitive, however, to wasting my time and energy. I don’t like feeling vamped or drained. There’s a huge difference between entering an emotional space with someone who has a growth mindset and doing this with someone who has a victim mindset. When I discover I’m dealing with the latter, my shields go up.

Fortunately the victim mindset isn’t too common among my readers, at least not the ones who’ve been reading my work for years. It can be common among their friends, family members, and co-workers though, and good boundary management is essential here.

What are your standards or boundaries regarding emotional conversations? What kinds of offers would you like to receive more of here? Less of?

If you’re not getting many offers in the part of the spectrum you’d prefer, it’s likely because you’re wallowing in partial matches. When you start declining partial matches more consistently, more of the spectrum will open up to you. You don’t get what you want here per se. You get what you’re willing to tolerate.

Declining Misaligned Offers

How would you decline any other kind of offer that didn’t interest you? You have essentially the same options here.

To decline an emotional offer, you could directly decline it, ignore it, make a counter-offer, let it go into your spam folder, etc.

My advice here is to be honest and firm yet compassionate, and let the other person fully own their reaction.

How you respond may depend on how the other person asks. Some invites may be so inauthentic, fake, impersonal, or vampy that you may just delete or ignore them. Others you may politely decline. Others you may accept.

How I decline (if I do that directly) may depend on the invite. It could take one of these forms, for instance:

  • No, thanks
  • I’ll pass.
  • I don’t have the capacity for that kind of discussion right now. Hope you understand.
  • Normally I’d love to, but ___ is a priority for me right now… gotta pass.
  • My intuition says no on this, so I’ll have to pass. Hope you understand.
  • I’m not up for talking about ___ right now, but if you want to talk about ___ instead, I’m game!
  • We’ve talked about this at length before. Why do you want to discuss it again? What other project are you procrastinating on?
  • Goodness no… not a match!
  • Not a fair offer… no.
  • Various expletives

Sometimes you may have to decline more than once, especially if it’s an in-person invitation and the other person is trying to run the entitlement script. You might need to physically walk away as part of saying no.

Incidentally, some people invite an emotional discussion as a delay tactic. It’s surprisingly common actually. What are they avoiding by inviting an emotional discussion, especially one that could chew up a lot of time? Hint: It’s probably some kind of challenging, goal-oriented work.

Also note that it isn’t your personal responsibility to educate everyone who makes a bad offer on how to make a better one. But you may find that worth doing if someone genuinely asks you.

Sharing emotional intimacy can be wonderful, but as with any other part of life, there are aligned offers and misaligned ones. A good way to shift over to the aligned side is to get really good at saying no to misaligned invitations.

Receive Steve's new articles by email.

Read related articles:

04 Oct 20:33

Twitter Favorites: [CrashAnnBurn] @nationalpost Hi, I’m the former official biographer for Conrad Black, and let me tell you, he is full of shit, and… https://t.co/gpmj2LaWgR

Crash Ann Burn - BLM @CrashAnnBurn
@nationalpost Hi, I’m the former official biographer for Conrad Black, and let me tell you, he is full of shit, and… twitter.com/i/web/status/1…
04 Oct 20:31

Twitter Favorites: [thereadingline] @jsquaredink So many people enJOYing #activeTO on @BikeShareTO @BikewaysTO #bikeTO https://t.co/bmg5yUItGd

04 Oct 20:31

Twitter Favorites: [Planta] I don’t know if it’s true but I find the nosiest people, inartful and voracious gossips at least, are the ones who read the least.

Joseph Planta @Planta
I don’t know if it’s true but I find the nosiest people, inartful and voracious gossips at least, are the ones who read the least.
04 Oct 20:31

Unravelling rich comparison operators

by Brett Cannon

For the next part of my blog series on pulling apart Python's syntactic sugar, I'm going to be tackling rich comparison operators: ==, !=, >, <, >=, <=.

For this post I am going to be picking apart the example of a > b.

Looking at the bytecode

Using the dis module, we can look at the bytecode that CPython generates:

>>> def spam(): a > b
...
>>> import dis; dis.dis(spam)
  1           0 LOAD_GLOBAL              0 (a)
              2 LOAD_GLOBAL              1 (b)
              4 COMPARE_OP               4 (>)
              6 POP_TOP
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
Bytecode for a < b

That points us at the COMPARE_OP opcode. Its implementation sends us to the cmp_outcome() function who delegates all the heavy lifting to PyObject_RichCompare().

How rich comparisons work

With PyObject_RichCompare() delegating to do_richcompare(), the code matches up to the explanation in the data model. Each comparison operator has a matching special/magic method:

  • ==: __eq__
  • !=: __ne__
  • <: __lt__
  • >: __gt__
  • <=: __le__
  • >=: __ge__

So for our a > b example we care about __gt__. That leads us to writing the following Python code to implement the equivalent of operator.gt() (know that debuiltins._mro_getattr() is just a helper to look up attributes on types as Python always does for special/magic methods; it's a perf thing):

def __gt__(lhs, rhs, /):
    lhs_type = type(lhs)
    try:
        lhs_method = debuiltins._mro_getattr(lhs_type, "__gt__")
    except AttributeError:
        pass
    else:
        result = lhs_method(lhs, rhs)
        if result is not NotImplemented:
            return result
    raise TypeError(
        f"'>' not supported between instances of {lhs_type!r} and {type(rhs)!r}"
    )
Implementation of operator.gt() without worrying about the right-hand object

Now each comparison has a reflection so that if the left-hand side of the comparison expression doesn't implement the appropriate special method you at least have a chance at using the right-hand side to get what you. want. The pairings are:

  • __lt__ and __gt__
  • __le__ and __ge__
  • __eq__ and itself
  • __ne__ and itself

What this means (roughly) is that if a > b doesn't work then we can try b < a. Now the data model, much like with binary arithmetic operators, has some fanciness to it when it comes to the right-hand side of the expression. If:

  1. The right-hand side is not the same type as the left-hand side
  2. But the right-hand side's is a subclass of the left-hand's type

then we try the right-hand side's way of doing things first (e.g. b < a). The reason for this rule is just like with binary arithmetic operators: if subclasses on the right-hand side want to do something special they get a chance to. For example, if b wanted to make sure to return an instance of itself it would only get that chance if a did not go first, else a > b could return an instance of a instead of b.

Putting this all together gets us:

def __gt__(lhs, rhs, /):
    lhs_type = type(lhs)
    try:
        lhs_method = debuiltins._mro_getattr(lhs_type, "__gt__")
    except AttributeError:
        lhs_method = _MISSING

    rhs_type = type(rhs)
    try:
        rhs_method = debuiltins._mro_getattr(rhs_type, "__lt__")
    except AttributeError:
        rhs_method = _MISSING

    call_lhs = lhs, lhs_method, rhs
    call_rhs = rhs, rhs_method, lhs

    if (
        rhs_type is not _MISSING  # Do we care?
        and rhs_type is not lhs_type  # Could RHS be an actual subclass?
        and issubclass(rhs_type, lhs_type)  # Is RHS a subclass?
    ):
        calls = call_rhs, call_lhs
    else:
        calls = call_lhs, call_rhs

    for first_obj, meth, second_obj in calls:
        if meth is _MISSING:
            continue
        value = meth(first_obj, second_obj)
        if value is not NotImplemented:
            return value
    else:
        raise TypeError(
            f"unsupported operand type(s) for '>': {lhs_type!r} and {rhs_type!r}"
        )
Implementation of operator.gt() where the reflected operation is considered.

If you generalize this out to the other comparisons and their reflection you have the operations work appropriately for either argument!

== and != can never fail

So we have a solution for > which can be generalized, but there's one more thing we need to contend with. In case you weren't aware, both == and != will not raise TypeError if the special/magic methods don't (if they are even defined). Instead, Python will fall back on comparing the values of id() for each object as appropriate.

Back in the Python 2 days, you could compare any objects using any comparison operator and you would get a result. But those semantics led to odd cases where bad data in a list, for instance, would still be sortable. By making only == and != always succeed (unless their special methods raise an exception), you prevent such unexpected interactions between objects and having silent errors pass (although some people wish even this special case for == and != didn't exist).

And with that, we get a complete implementation for rich comparisons!

def _create_rich_comparison(
    operator: str, name: str, reflection: str, default: Callable[[str, Any, Any], bool]
) -> Callable[[Any, Any], Any]:
    """Create a rich comparison function.

    The 'operator' parameter is the human-readable symbol of the operation (e.g.
    `>`). The 'name' parameter is the primary function (e.g. __gt__), while
    'reflection' is the reflection of that function (e.g. __lt__). The 'default'
    parameter is a callable to use when both functions don't exist and/or return
    NotImplemented.

    """

    def _rich_comparison(lhs: Any, rhs: Any, /) -> Any:
        lhs_type = type(lhs)
        try:
            lhs_method = debuiltins._mro_getattr(lhs_type, name)
        except AttributeError:
            lhs_method = _MISSING

        rhs_type = type(rhs)
        try:
            rhs_method = debuiltins._mro_getattr(rhs_type, reflection)
        except AttributeError:
            rhs_method = _MISSING

        call_lhs = lhs, lhs_method, rhs
        call_rhs = rhs, rhs_method, lhs

        if _is_proper_subclass(rhs_type, lhs_type):
            calls = call_rhs, call_lhs
        else:
            calls = call_lhs, call_rhs

        for first_obj, meth, second_obj in calls:
            if meth is _MISSING:
                continue
            value = meth(first_obj, second_obj)
            if value is not NotImplemented:
                return value
        else:
            return default(operator, lhs, rhs)

    _rich_comparison.__name__ = _rich_comparison.__qualname__ = name
    _rich_comparison.__doc__ = f"Implement the rich comparison `a {operator} b`."
    return _rich_comparison


def _rich_comparison_unsupported(operator: str, lhs: Any, rhs: Any) -> None:
    """Raise TypeError when a rich comparison how no fallback logic."""
    raise TypeError(
        f"unsupported operand type(s) for {operator!r}: {type(lhs)!r} and {type(rhs)!r}"
    )


gt = __gt__ = _create_rich_comparison(
    ">", "__gt__", "__lt__", _rich_comparison_unsupported
)
# ... other rich comparisons ...
eq = __eq__ = _create_rich_comparison(
    "==", "__eq__", "__eq__", lambda _, a, b: id(a) == id(b)
)
Function to create rich comparison operators

__eq__ and __ne__ on object

If you look at how object implements rich comparison, you will see it implements __eq__ and __ne__ (the other special methods for rich comparison on object are just a side-effect of using a single C function to implement all rich comparison special methods). For __eq__, the code does an id() check much like the default semantics for == and when it succeeds it returns True, but if the IDs differ then NotImplemented is returned. The reason for this interesting false result is to allow the other object's __eq__ to participate in the operation, otherwise it falls through to the default semantics for == which eventually return False.

For __ne__, the data model explicitly states that "__ne__() delegates to __eq__() and inverts the result unless it is NotImplemented". That lets you just override __eq__ and get changed semantics for __ne__ automatically. The NotImplemented result has the same effect as == where it will let the default semantics take over for checking the IDs of the objects don't match.

class object:

    def __eq__(self, other, /) -> Union[Literal[True], NotImplemented]:
        """Implement equality via identity.

        If the objects are not equal then return NotImplemented to give the
        other object's __eq__ implementation a chance to participate in the
        comparison.

        """
        # https://github.com/python/cpython/blob/v3.8.3/Objects/typeobject.c#L3834-L3880
        return (self is other) or NotImplemented

    def __ne__(self, other, /) -> Union[bool, NotImplemented]:
        """Implement inequality by delegating to __eq__."""
        # https://github.com/python/cpython/blob/v3.8.3/Objects/typeobject.c#L3834-L3880
        result = self.__eq__(other)
        if result is not NotImplemented:
            return not result
        else:
            return NotImplemented
Implementations of __eq__ and __ne__ for object

As for why bother having these methods predefined on object when the default semantics for == and != do the same thing, it still lets you call the methods directly. Something I think a lot of people don't think about is the fact that you can not only call these methods directly to skip over the syntax, but pass them around like any other object. That's handy if you're passing methods around as callbacks or something.

Conclusion

And that's it! As with the other posts in the series, you can find the source code in my desugar project.

04 Oct 20:16

The end of the American internet

by Benedict Evans

When Netscape launched in 1994 and kicked off the consumer internet, there were maybe 100m PCs on earth, and over half of them were in the USA. The web was invented in Switzerland, and computers were invented in the UK, but the internet was American. American companies set the agenda and created most of the important products and services, and American attitudes, cultures and laws around regulation and speech dominated.

This is not quite so true anymore. 80-90% of internet users are now outside the USA, there are more smartphone users in China than in the USA and western Europe combined, and the creation of venture-based startups has gone global.

2020 09 New Normal.003.png
2020 09 New Normal.002.png

Meanwhile, of course, the internet became vastly more important. In the last decade it has gone from being interesting and exciting but not really an important part of most people’s lives to being a central part of society. This is my favorite way to illustrate this - by 2017, almost half of new (straight) relationships in the USA started online.

2020 09 New Normal.001.png

This has two pretty basic sets of consequences.

First, as I discussed in some detail here, technology is becoming a regulated industry, if only because important and specialised industries are always regulated. That regulation will not only be determined by the USA. Other countries have their own laws, cultures and constitutions, and so we are entering a period of increasing regulatory expansion, overlap and competition from different jurisdictions, from the EU and UK to Singapore or Australia and, of course, China.

Second, you can no longer assume that the important companies and products themselves are American.

Both of these are captured in Tiktok. This is the first time that Americans have really had to deal with their teenagers using a form of mass media that isn’t created in their country by people who mostly share their values. It’s from somewhere else. That’s compounded by the fact that the ‘somewhere else’ is China, with all of the political and geopolitical issues that come with that, but I’d suggest that the core, structural issue is that it’s foreign. This is, of course, a problem that the rest of the world has been wrestling with since 1994, but it comes as something of a shock in Washington DC. There’s an old joke that war is how God teaches Americans geography - now it’s regulation.

There are many questions that flow out of this. One, for example, is how far and how many Chinese consumer internet companies will spread globally as opposed to being constrained by their domestic environment (this would be the ‘Galapagos Effect’ often suggested of Japanese tech. Tiktok worked, but WeChat failed). Another is how many ‘unicorns’ come from Europe - how fast does its population, economic, scientific and educational base produce a proportionate number of big tech companies (or if not, why not?). Yet another is the ‘Is Silicon Valley Over?’ debate, which goes back decades - when my old colleague Marc Andreessen arrived there in the early 1990s, he thought the whole thing was over and he’d missed it.

You can argue about the details of these all day, but it does seem clear that we should just presume a global diffusion of software creation and internet company creation. It doesn’t really matter if Silicon Valley ends up as 25% or 75% of the next 100 important companies - America doesn’t have a monopoly on the agenda any more.

Hence, there are all sorts of issues with the ways that the US government has addressed Tiktok in 2020, but the most fundamental, I think, is that it has acted as though this is a one-off, rather than understanding that this is the new normal - there will be hundreds more of these. You can’t one-at-a-time this - you need a systematic, repeatable approach. You can’t ask to know the citizenship of the shareholders in every popular app - you need rules that apply to everyone. Today, the rules come from Apple, or California, both of which are increasingly becoming America’s privacy regulators by default. But they will also come from the EU, which is increasingly writing laws that, intentionally or not, change how American companies do business in America, and the more different rules we have in different places, the more fragmented and complicated things get. Regulation is an export industry, and a competitive industry.

04 Oct 20:16

Obsidian

Link: https://obsidian.md

Desktop Markdown editor for Mac, Windows, and Linux that has built in backlinking, wikilinks, and [[Zettelkasten]] support.

License model is free for personal use, they intend to have paid licenses for commercial use, much like the licensing model for IDEs. Personal users pay for early access and other community features.

From the home page:

In our age when cloud services can shut down, get bought, or change privacy policy any day, the last thing you want is proprietary formats and data lock-in.

With Obsidian, your data sits in a local folder. Never leave your life’s work held hostage in the cloud again.

Plain text Markdown also gives you the unparalleled interoperability to use any kind of sync, encryption, or data processing that works with plain text files.

From the about page:

Although we call it a personal knowledge base or your [[Second Brain]], we also like to think of it as an [[IDE for your notes::highlight]]. You can think of an IDE as a powerful frontend that tries to understand your code, such as where are functions and variables stored, what are their types, and by doing so make it super easy to navigate code and get suggestions as you type.

They used to work on [[Dynalist]].

04 Oct 20:16

Rock Pi X

by Rui Carmo

I really like that everyone is now using the Pi as a sort of universal form factor, but also a bit sad that this is still using an Atom x5-Z8350 from ages ago (I have two equivalent Z83ii boxes) and that the HDMI out can only do 4K at 30Hz.

It’s as if everybody just keeps hashing out what they can do with Intel’s dusty low-end portfolio without even trying to lift the status quo up from “slow and pokey”, which is what this will likely be when running Windows 10.

But it supports PoE, which might be quite useful for industrial applications (I keep running across places running their OPC stuff in great hulking dinosaur PCs from another era).

I just keep expecting a little more from SBCs these days.


Want to show your appreciation?
04 Oct 20:15

Twitter Favorites: [Dawsonase] It’s so amazing/gratifying to be able to hold Toronto up as an example of doing bikes lanes and pedestrian-friendly… https://t.co/Ku812Pswua

Kate Dawson @Dawsonase
It’s so amazing/gratifying to be able to hold Toronto up as an example of doing bikes lanes and pedestrian-friendly… twitter.com/i/web/status/1…
04 Oct 20:15

New Emergent Tagging Practice

by Ton Zijlstra

Extending my note / notion collection in the past three months has emerged a new tagging practice.

I’ve started tagging notes that I encounter with the keywords that led me to wander through the notes and encounter such a note.

A significant difference between my current notes collection and my previous use of Evernote for it, is the ease of linking between notes. Adding new notes means linking them to relevant existing ones. Following those links later means I end up in notes from a thought or association that led me down a path. If one of those notes strikes me as relevant I find myself adding tags based on the thoughts or associations that led me there.

This is an extension of my existing tagging practices, as it adds traces of my searches through the collection of notes, or rather my findlings.

Existing tagging practices already included adding tags naming the reasons and associations why I made the note, what triggered my interest. (An article ‘the 10 biggest tech developments to watch in 2021’ might be tagged ‘prediction’ and ‘2021’ e.g.)
I also use as tags the terms with which I think my future self should be able to find them, tags allowing search in different languages (I write notes in 3 language, but have notes with parts in at least 4 other languages which I can read ok enough to keep the original), and tags denoting some time, status or action (urgent, waiting, sharpen etc, year/month/day of creation) which taken together means usually tags are words that do not feature in the content of the note otherwise (which would already surface in a full text search). I don’t use tags as objective descriptors much, as mostly those terms will be in the article or note already, and they don’t add much meaning for me other than as pretend categories.

The way I look at other people’s tags is how their use of different words than mine for the same things is an expression of socio-professional distance. Others likely will be using their own jargon for things, and the more different that is, the more likely you are part of a different community than the circles I operate in. This lets me use tags as a pivot to find other people and communities of interest and connected to my own current interest. (Allowing me to e.g. extend my feed reading by social distance to additional voices unlike the ones I already follow. This was what I appreciated in the Delicious bookmarking service, as it showed you the tags used for your bookmarks by others, and let you navigate to their collection and profile).

With the new tagging practice, adding tags to a note over time based on how/why I found that note will allow me to see how my own language evolves. This leads I think to a similar measure of socio-professional distance, but now between my past, current and future selves. It will be highly interesting to watch over time if that happens.

Tags to me are a tool to aid associative emergence of connections and meaning, and I think this new tagging practice I find myself adopting will aid in that.

04 Oct 20:14

Makers in the Mittelstand and the business of making

by charlie

Long before I started tinkering in electronics, I have had a fascination with the Mittelstand. The Mittelstand refers to small- and medium-sized, usually privately-owned, businesses in the German-speaking countries. To me, they are represented best by manufacturers and exporters of innovative, high-quality, and often world-leading, products, from music stands and microphones, to measurement equipment and precision-molded airplane components.

I avidly read articles I come by on the Mittelstand, because I know how central the Mittelstand is to the German economy. And wonder how Mittelstand-like businesses can be the future of manufacturing here in the US.

My journey of the past 18 months into electronics has made me more aware of a maker Mittelstand. Consequently, I’ve been quite curious about the business of making, what middle manufacturers of electronics mean to the US economy, and the trials and tribulations of running a middle manufacturing electronics business.

Mittelstand, USA
I regularly look for examples of a Mittelstand in the US. While proclaiming the return of big-metal, low-skilled manufacturing makes good news, my preference is for policy and support for higher-skilled, higher-value manufacturing, coming from Mittelstand-like companies.

For example, I met a guy from Central Massachusetts who has a small business coating wires with advanced plastics. Sounds simple, but big companies, like 3M, are some of his (demanding) customers.

An article this past July by the Economist takes a tour of the US Midwest and compares it to the German Mittelstand. The article points out that success in the manufacturing heart of America is still tied to Mittelstand values of small- to medium-sized private business manufacturing, and close ties to policy and government and educational organizations to make it so (a German connection to the region also helps).

Leveling up
Back in March I reach an interesting article by Stephen Hawes trying to make sense of small to large electronics manufacturers. He split the manufacturing into three levels.

Level 1 – Someone at home in their pajamas making something on a Saturday morning with tools and materials available to someone with a hobbiest budget. Scale: 1-100 units.

Level 2 – Someone using some outsourcing and some in-house fabrication techniques to make things at a much larger scale, representing a sizable amount of money and effort. Scale: 100-5000 units.

Level 3 – Traditional mass production, hiring a contract manufacturer and getting things made at a factory, most often overseas. Scale: 5000+ units.

This analysis came out of his experience designing and building electronics for sale. He had a good handle on Level 1. Indeed, tools and accessibility to fabrication techniques mean that anyone can begin at Level 1 (uh, that’s where I would be if I started making products). And he understood how the biggies did Level 3.

Where he saw the challenge was in entering and succeeding in Level 2, seeing a gap in tools, costs, building, delivery that the Level 1 folks don’t worry about and the Level 3 handle at scale.

Mittelmachers
If you tie his article to my long-time interest into the Mittelstand, then you can understand why his article struck a chord. Hence, I am fascinated by so many who are making a go at building a business thru Level 2 manufacturing. Because those middle manufacturers are part of the new electronics Mittelstand.

And when I talk about an interest in manufacturing, I’m interested in the stories, not so much tools and processes.*

For example, Limor Fried, Lady Ada, is, of course, the leading example among makers for the American electronics Mittelstand. A NYC-based manufacturer, providing essential products and jobs, there’s no end to great videos and stories about her and her company. One that I watched today, from Manufacturing Day in 2015, is appropriate for this post.

I avidly follow Seon Rozenblum, Unexpected Maker, who is a talented creator (and whose TinyPico was an early and key part in my obsession with electronics). His trials and tribulations show the struggles of trying to build and sustain a Level 2 business. While Limor started her business out of her dorm room 15 years ago, Seon jumped whole-hog into making only 3 or 4 years ago. In the past year, he’s been trying to make the shift from Level 1 to Level 2 manufacturing, with hiccups (not his fault) along the way. I always find it amazing what he’s been able to accomplish in so short a time.

Not all rosy
There is no shortage of amazing folks building maker businesses. And I avidly read profiles (like this one on Lenore Edman of Evil Mad Scientist) because they contain interesting stories of the various ways folks end up in Level 1 manufacturing and then see an opportunity (and then the challenges) of stepping up to Level 2.

One talented and creative person I follow, Brian Lough, is trying to make a go at building a business off his making. And he’s open about his struggle to take it to the next level. He’s got a day job and also sells products on Tindie. Though he’s also working his ass off to create a revenue stream with YouTube ads and affiliate links. While I think he should likely concentrate on Tindie revenue and view the videos as marketing, it does show and expectation that makers should have all sorts of revenue streams.

Another great example of stories of the business of making that seem to be mentioned but not explored (or at least I haven’t seen explored) is how Adafruit responded to the COVID-19 pandemic, and how it was tied to their experience with Hurricane Sandy. But, fortunately for you, that’s a post for another day.

The maker world is filled with highly talented folks that make everything seem easy. And articles tend to focus on the nifty build, or the cool tools, or great talk. All these folks inspire others to make a go at Level 2. Though, I sometimes feel that there are not enough stories of the sweat and tears and all the hard work that go into it.

Mittelaspiratons
I’m not saying we need more stories on struggles, but I’m looking for more of the stories of the business, the challenges, the successes, the hard work. I find that often the business questions that are asked are around tools and processes rather than ‘why did you do that?’ or ‘how did you overcome that?’. I think such questions are important as more folks are able to aspire to step up from Level 1, up to the Mittelstand.

As I grow in the community, let’s see what stories I uncover.

*Please note: there are many making a go at living off of making. But my curiosity around the business of making is not about those who are trying to make money off of YouTube. Don’t get me wrong. I watch at ton of these folks and try to give them as much attention to pay for their great, and inspiring, videos. And, yes, a business model built on subscribers is still a business. I’m just more interesting the manufacturing side itself.

I have experienced the incessant need to feed media channels. And the expectation that every maker needs a big following to make YouTube money is not helpful. Adafruit and UnexpectedMaker put out a prodigious amount of video. But they have the skills, formats, audience, resources, infrastructure, and time to rapidly do these. And I really do not think they make video for the money, but for exposure, marketing, and community, more likely. In any case, to be a next Great Scott or Simone Giertz you need talent, the ability to focus on writing and producing amazing content, heaps of time, and consistent hard work.

Yes, this post has already become way too long – can you tell that this is a topic that I’m trying to articulate and explore?

Image from Adafruit, of course

The post Makers in the Mittelstand and the business of making first appeared on Molecularist.
04 Oct 20:14

September Reading

by Caterina Fake

My September reading was not quite as strenuous as last month, given that I read Middlemarch in August, from which I am still feeling the glow of accomplishment, a loathing of Casaubon and a sense of infinite depths.

Here you’ll see just one masterpiece–Austerlitz–and two books I didn’t quite finish, that I skimmed and eventually put down. Those are How to Disappear and Torpor. I had enjoyed the quirky, downbeat, pathetic style of Kraus’s other books, I Love Dick and Aliens and Anorexia, but the grimness of the times we’re living through made it impossible for me to make it through this one, which included a tour through Romania to adopt an orphan, and an accounting of the horrific abuse and neglect babies and children suffered under the Ceausescu regime, the failed and failing relationship, the struggle and the struggling. But A Girl Returned was also the story of an abandoned child–in this case an adopted child “returned” to her birth family. The book also had its horrific moments but was redeemed by the love she found with her birth sister Adriana, a childhood friend, Patrizia, and the reconciliation of sorts with her adoptive mother. And the girl’s insistence on taking her own life back after she had been thrown among strangers. It was purer-hearted and the pure-hearted is what we need right now.

Sometimes I linger in bookstores, browsing the “S” section, hoping a new Sebald book would appear. Since it won’t, I read the existing ones over and over and over and each time they seem as if I had never read them before. Except The Emigrants which I almost have memorized. Austerlitz is a book I read often.

Weather, much lauded, much recommended, had been partly derived from other people’s work. I recognized some of the (unattributed) podcasts and articles she’d gotten the material from. As such, I couldn’t ally myself with the book; I was already allied with the original material. But I liked the paragraph – paragraph – paragraph style.

And the rest of September’s reading? art criticism and Jungian psychology. Now, I am reading myths.

04 Oct 20:13

Week Notes 20#40

by Ton Zijlstra

A regular week, except for the mask wearing that is now becoming prevalent (until now it was on public transport mostly), and that E had a cold so ferrying Y around to school etc fell only to me this week.

This week I

  • Talked about our company’s ‘story’
  • Completed the migration from TextExpander to Alfred
  • Spent quite a bit of time on creating a holistic and zoomable overview of the digital transformation work with a client, that can serve both as a presentation aid, keep the connection between ambitions and projects visible, and as a monitoring and assessment tool.
  • Brought our junior colleague E onto the team for a provincial client
  • Played a bit with Foam as a potential open source replacement for Obsidian (both are viewers for my markdown files with notes)
  • Had a board meeting with the Open Nederland association, and initiated the steps needed to become a recognised charity in the Netherlands
  • Caught up with the director of the NGO I am chairing.
  • Had my weekly team meetings of the various client projects
  • Discussed a potential community stewarding project for citizen science in a Dutch city
  • Hosted a session for the internal learning program on networking I’m running these months
  • Went to the dentist, to have a first check-up of the tooth implant I received last week
  • Transcribed Maggie Appleton’s sketchnotes of Tiago Forte’s ‘Building aSecond Brain’, to be able to compare with my own system and reflect.
  • Prepared a presentation on Dutch base registries for Monday

20200930_181950Rites of passage. Y got a new bike. With 18′ wheels it’s her first bike suitable to take out on the open road. (Once we add the lights) It also means higher speeds, so now I need to cycle along her side, because walking alongside has now turned in running after her 🙂



This is a RSS only posting for regular readers. Not secret, just unlisted. Comments / webmention / pingback all ok.
Read more about RSS Club
04 Oct 20:13

This week

by russell davies

I sent the Afternoon Slow email out. And...

Morris in the park

Lionel Hampton plays vibes with his band Sardines Cornwall

Hilary Mantel writing weather in her head

04 Oct 20:12

A Vancouver councillor was on the hot seat two weeks ago, but does anyone remember now?

by Frances Bula

With the provincial election now sucking up all political oxygen in the room, Vancouver councillors are getting to take a breather. For one of them, that’s a welcome reprieve, I’m thinking. My story from the Before Election Call times

Vancouver voters could be facing an extra visit to the polls within the year – on top of the provincial election – after a report into a conflict of interest for one Vancouver councillor concluded that he should give up his seat.

The byelection that could result, which would likely cost the city more than $1-million, will be required if Green Party Councillor Michael Wiebe voluntarily resigns or is forced to quit after a special city-appointed investigator concluded he had violated several sections of Vancouver’s conflict-of-interest rules.

Municipal-law expert Raymond Young recommended in his report that Mr. Wiebe be disqualified from holding office and that it would be “appropriate” for him to resign because he voted on two motions at council in May related to allowing restaurants and bars to operate temporary patios, when he owns one affected establishment and is an investor in another.

Mr. Young noted that amendments that Mr. Wiebe proposed and were then passed “enabled Councillor Wiebe to wear two hats when dealing with city staff: that of the council member and that of the business owner.” His restaurant was among the first group of 14 given a temporary patio permit, which allowed for four tables on the road in front of his business.

But Mr. Wiebe is not planning to resign immediately, saying that the whole report was a “bit of a shock” because he thought the investigation was still going on and he would have time to provide more evidence in his defence.

“I’m sorry for this situation but we’re going to figure out what happened. It’s incomplete and I’m going to continue to work through the process,” said Mr. Wiebe, who both apologized for what has happened but also insisted that he acted in good faith when he participated in council decisions about temporary patios.

“I’ve been very open about my interests and I’ve stepped away in multiple situations,” said the first-term councillor, who owns the small restaurant lounge Eight ½ just off Main Street and is an investor in the Portside Pub in Gastown.

He has declared conflicts on numerous other votes at council since he was elected in 2018, ranging from decisions on the Hollywood Theatre, whose foundation board he sits on, to community safety, because his mother was on the board of one of the organizations involved, to debates involving changes to patio definitions and alcohol consumption in public spaces.

He also said that, when he debated and voted on the city’s new temporary-patio system, he was making the case on behalf of many Vancouver business owners, including several who are in direct competition with him.

City councillors, who have faced accusations or concerns about conflicts many times in B.C., are typically not considered to be in conflict if their interests are in common with electors of the city generally, as laid out in city legislation.

STORY CONTINUES BELOW ADVERTISEMENT

That’s why city councillors can vote on taxes, even though their own taxes will be affected, or rezonings that cover the neighbourhoods in which they live.

But Mr. Young’s report said there weren’t enough voters with an interest in common with Mr. Wiebe to make that a defence.

“There were over 3,000 business licences issued to restaurants and bars in 2019,” he wrote. But the temporary-patio program “benefited less than 10 per cent of restaurants and bars in the city.”

Mayor Kennedy Stewart, who ordered the investigation by Mr. Young after a complaint from retired lawyer Michael Redmond, is not commenting on the arguments in the case.

“I received the investigator’s report on Saturday, September 19, am reviewing it to determine my next steps, and cannot comment further to maintain the integrity of the process,” he said in an e-mailed statement.

The mayor could ask council to vote privately on whether to ask Mr. Wiebe to vacate his seat. If that doesn’t happen, any 10 Vancouver voters can petition the court to have the seat vacated.

Several cases of that kind have gone to the Supreme Court since 2001, when the Community Charter and Vancouver Charter were changed to include the provision that a council member could be disqualified immediately from serving if they were found to be in a conflict.

04 Oct 20:12

A “new generation of homeless people with brain injuries” means that just housing won’t be enough, say some mayors

by Frances Bula

The issue of what to do about the growing prevalence and size of camps or clusters on the street of homeless people is one that is turning into a top issue for this provincial election. Many mayors are hoping the candidates will have some better answers that they’ve seen in the past. My Globe story on this.

By FRANCES BULA

Mayors of B.C.’s largest cities want provincial politicians to come up with new solutions to a growing problem of homelessness, addiction and mental health issues, saying the focus on providing housing alone is too narrow.

At least some, including Nanaimo Mayor Leonard Krog, say it’s time for the provincial government to consider radical steps such as institutional facilities for those who cannot live in a traditional setting.

The mayors of 13 B.C. cities plan to hold a news conference Wednesday to outline their demands for a new approach and to call on the leaders of B.C.’s campaigning political parties to make a commitment to help cities address the crisis. British Columbians go to the polls on Oct. 24.

The mayors say the NDP’s promises to ramp up the construction of social housing aren’t enough to tackle the problems. Hundreds of people are sleeping outside in major cities, occupying local parks in a growing number of tent encampments that have challenged cities to ensure the safety of both the people living within the camps and nearby residents.

Neighbourhood residents have complained about increased crime and the lack of provincial help for the homeless, a theme Liberal Leader Andrew Wilkinson has been highlighting in recent days as his party seeks to regain power from the NDP.

Some mayors in the just-formed caucus, started at the initiative of Victoria Mayor Lisa Helps, say providing housing by itself doesn’t address the needs of a new generation of drug users who have overdosed on opioids but survived with serious brain injuries.

“We have a significant brain-injured population now that’s never going to function without supports. What the province is doing now is not enough because it doesn’t deal with those cases,” said Mr. Krog, a former long-standing NDP MLA. “If we have places to send people, then there will be progress.”

But he said he’s not talking about recreating 19th-century asylums.

“I’m not asking people to be strapped to their beds, drugged 24/7, and be presided over by Nurse Ratched,” said Mr. Krog, whose city has a homeless population of about 600, one of the highest per-capita in the province. “But people need routine. I’ve talked about smaller, community-based facilities or a therapeutic farm.”

Burnaby Mayor Mike Hurley and Coquitlam Mayor Richard Stewart echoed the sense that homelessness, mental illness and addiction are swamping their cities, with new approaches needed for the very different groups caught up in those issues.

STORY CONTINUES BELOW ADVERTISEMENT

They say they can’t supplement the health system using their limited property tax dollars. It’s the province that has to provide the comprehensive remedies.

Mr. Hurley said he is concerned by the slow pace of change, which he wants to see addressed during the campaign. There have been lots of announcements about housing money, he said, but few actual buildings opened.

“We’re very frustrated at the slow speed,” said Mr. Hurley, who swept long-time mayor Derek Corrigan out of office in 2018 on a promise to do better on housing. He said Burnaby has pre-emptively rezoned six sites for social housing that could provide homes for 1,300 households, but the provincial money still hasn’t arrived.

Both he and Mr. Stewart in Coquitlam emphasized the need for better mental health services for those among the homeless or at-risk population. Mr. Hurley said they’re often only available during office hours, which is entirely the wrong approach. Mr. Stewart said people with mental health problems often end up with police as their only option during a crisis instead of a health team.

Like the others, he emphasized that just building housing, while useful for some people among the homeless population, is not going to be a complete solution for people with the kinds of challenges cities are now seeing.

“It’s not going to be solved by building a better cardboard box. We’re starting to see a whole new wave of people needing care because of brain injuries.”

Besides that key issue, the mayors plan to emphasize the need for provincial candidates to talk about how they’re going to keep transit systems healthy until the pandemic is over and what kinds of supports cities will get as their revenue shrivels because of COVID-19 effects, even while some costs have gone up.

04 Oct 18:19

Google offering Chromecast with Google TV and Netflix bundle for $119.99

by Aisha Malik

The Google Store is currently offering a Chromecast with Google TV and Netflix bundle for $119.99 CAD.

The bundle includes six months of the Netflix’s standard streaming two-screen plan, which is valued at $83.94. The Chromecast device costs $69.99 by itself, so this bundle saves you about $34.

The refreshed Chromecast features a new version of Android TV called Google TV. It comes in three colours: ‘Snow,’ ‘Sky’ and ‘Sunrise.’

You can learn more about the Chromecast with Google TV in MobileSyrup’s in-depth coverage of the device here.

The post Google offering Chromecast with Google TV and Netflix bundle for $119.99 appeared first on MobileSyrup.

03 Oct 21:55

Surface Laptop Go

by Rui Carmo

I was waiting for something like this to come out (for the kids), but even though it looks to be just as well built as the rest of the Surface line (and with decent specs) other, easier to repair/expand laptops with Ryzen 4700 series APUs are coming out at roughly the same price range (often cheaper if you go for the decent config at 8G/256G).

Sticking with Intel seems like a missed opportunity somehow, although I get it that the thermals were probably easier to work out.

Too bad that most interesting Ryzen laptops like the ones from Lenovo and Acer seem to be in very short supply, and not a single one of the “good ones” with a 4700 or 4800 is currently being sold in Portugal (let alone somehing with a halfway decent screen and memory configuration…).

But it’s a great little computer for the price, even if I prefer the non-laptop format in general.


Want to show your appreciation?
03 Oct 21:49

Unleash the Mouse

Scott Galloway, No Mercy / No Malice, Oct 02, 2020
Icon

I've never understood why pundits would cheerlead for large companies, urging them to do this or that. But that's what Scott Galloway does in this post as he argues, "Disney has the gravitas, capital, and leadership to collide storytelling and education to provide, at no cost, online learning opportunities for our neediest households... Disney is in a position to lead several firms in an effort to provide Universal Disney Instruction ('UDI')." I mean... ick. There are so many reasons not to turn to Disney for educational services.

Web: [Direct Link] [This Post]
03 Oct 21:49

Can we make Facebook and Google “democratic utilities?”

by mathewi
Note: This was originally written for the daily newsletter at the Columbia Journalism Review, where I am the chief digital writer Over the past decade, Google and Facebook have built globe-spanning digital platforms that impact almost every facet of our … Continue reading →
03 Oct 21:48

16 years ago today I blogged about this new thi...

by Ton Zijlstra

16 years ago today I blogged about this new thing Jeremy Ruston had built and released, TiddlyWiki, a wiki that you could save as a single file. Using javascript and css within the file allowed for expanding the view on items, and added the wiki elements like WikiWords to build links. It was of interest because it was local first software and extremely easy to start using (even if you couldn’t yet save your Tiddlywiki easily then). Jeremy saw it as a tool for local first note taking, and as it was all contained in a single file it was easy to publish, or even send the whole thing as an email attachment. At the time I was using a wiki for notetaking, and so this tool was of interest to me.

I am glad that TiddlyWiki is still around all these years later. In the current attention for Digital Gardens, TiddlyWiki is mentioned and used frequently. A big thank you to Jeremy Ruston for bringing this tool into the world. He’s currently running Federatial which is “exploring a new wave of collaboration tools that eschew the old, crude hierarchical models of organization”. I read that as he is building tools that fit well with networked agency.

03 Oct 21:47

Apple Watch :: Eine kleine Kaufberatung

by Volker Weber

95af6bb5a5c096527b8b9657cda44cd8

Als jemand, der von Anfang an eine Apple Watch getragen hat und der sie nie wieder abgelegt hat, traue ich mir eine fundierte Kaufberatung und Hilfestellung zu. Das diesjährige Progamm ist komplett. Man kann sich jetzt sein Weihnachtsgeschenk aussuchen. Die Preisspanne ist enorm: von einer Damenuhr der Series 3 für knapp über 200 Euro bis zur Hèrmes-Herrenuhr für mehr als 1500 Euro. Von der drei Jahren alten Series 3 würde ich die Finger lassen, aber für 290 Euro geht es los mit der Apple Watch SE. Die ist technisch auf der Höhe der Zeit, bietet die wichtigsten Funktionen und ist sehr preiswert.

Woher kommen die enormen Preisunterschiede? Das sind technische Finessen und die eingesetzten Materialien. Das Hèrmes-Modell ist vor allem durch die exorbitant teuren Lederarmbänder interessant.

Zur Technik: Muss die Uhr auch unterwegs erreichbar sein, ohne dass man sein iPhone dabei hat? Dann muss es ein Modell mit LTE-Modem sein. Das funktioniert in Deutschland nur mit einem Laufzeitvertrag von Telekom, Vodafone und O2. Das Vergnügen kostet in der Regel 5 Euro monatlich extra, es sei denn, der Vertrag enthält bereits mehrere SIMs. Mir ist das wichtig und ich habe seit der Series 3 stets eine Uhr mit LTE-Modem getragen und an Telekom diese 5 Euro extra bezahlt. Die Uhren ohne diese Option heißen "GPS", die mit heißen "GPS + Cellular". Entscheiden muss man sich nur bei den Uhren mit Aluminium-Gehäuse.

Das bringt uns zum Material. Titan ist teurer als Stahl, Stahl ist teurer als Alu. Titan und Stahl haben ein Saphirglas, die Alu-Uhr hat ein weniger kratzfestes, als Ion-X bezeichnetes Glas. Die Stahluhren glänzen und haben den meisten Bling.

Die Uhr gibt es in zwei Größen. Die Entscheidung ist wichtig, weil die Bänder jeweils nur zur richtigen Größe passen. 38mm der Series 3 entspricht 40mm der SE und Series 6. Die größere Uhr in 42mm/44mm passt allen Erwachsenen, die keine besonders zarten Handgelenke haben, und ist durch das größere Display leichter ablesbar.

Worüber man sich wenig Gedanken machen sollte, ist das Band. Mit einem weißen oder schwarzen Sportband wird man nicht unglücklich und man wird sich später ohnehin noch mehr anschaffen. Der Anschluss hat sich seit fünf Jahren nicht geändert und erlaubt den Wechsel des Bandes in Sekunden. Jedes Jahr gibt es mindestens zwei Kollektionen mit neuen Farben. Insgesamt hat Apple schon mehr als 400 verschiedene Bänder auf den Markt gebracht.

Das führt uns dann zu meinen Empfehlungen in vier verschiedenen Preissegmenten:

  1. Apple Watch Series 6 (GPS + Cellular), Edelstahl mit Milanaise-Band: Diese Uhr kann alles und hat das luxuriöseste Band, das ich empfehle. Sehr schön in silberner und goldener Farbstellung. 760 Euro als kleine und 810 als große Uhr.
  2. Apple Watch Series 6 (GPS + Cellular), Alu mit Sportband: Identische Funktion wie die teure Stahluhr. In Alu gibt es mehr Farben, dieses Jahr auch blau und rot. 515 bis 545 Euro.
  3. Apple Watch Series 6 (GPS), Alu mit Sportband: Identische Funktion wie die ersten beiden Uhren, aber keine Mobilfunk-Netzverbindung. 415 bis 445 Euro
  4. Apple Watch SE (GPS), Alu mit Sportband: Hat die wichtigsten Funktionen an Bord, aber kein EKG und keinen Sauerstoffsättigungssensor. Größte Einschränkung für mich: Der Bildschirm dieser Uhren ist normalerweise aus und schaltet sich erst an, wenn man den Arm hebt oder auf einen Knopf drückt. Man kann die Uhrzeit nicht aus dem Augenwinkel ablesen. 290 bis 320 Euro.

Mit allen vier Uhren wird man sehr zufrieden sein. Entscheidend ist nur, wieviel Geld man ausgeben will.

03 Oct 21:30

RT @DrWaheedArian: I came to UK as 15 yr old asylum seeker in 1999. If I was sent offshore, housed on ferry or island, I wouldn't be fight…

by Dr Waheed Arian (DrWaheedArian)
mkalus shared this story from mrjamesob on Twitter.

I came to UK as 15 yr old asylum seeker in 1999.

If I was sent offshore, housed on ferry or island, I wouldn't be fighting Covid19 on frontline with my NHS healthcare colleagues, including thousands of refugees & immigrants!

Asylum is human right! Can we also show compassion?! pic.twitter.com/ZeQe6e91nI



Retweeted by James O'Brien (mrjamesob) on Saturday, October 3rd, 2020 8:34am


30589 likes, 7217 retweets
03 Oct 21:30

[RIDGELINE] Self-Improvement and the Big Walk

by Craig Mod
A Big Walk is an opportunity for self-reinvention. I felt this acutely last year amidst my forty-three days of walking in the late spring. And as I gear up for another big walking bout come November, I find myself reflecting back on what I felt and why I felt it, and how I concocted the spell to feel those feelings. Hi Ridgeliners. I’m Craig Mod and this week’s newsletter is metaphor-free.
03 Oct 21:29

Rebuilding My Note Taking and Management System and Model

The past many weeks I have been digging into a better note taking and management method, while also embracing what I have and my core underlying principles. A continual genre in YouTube I watch is around productivity, particularly around personal knowledge management methods and tools. A couple years back I ran into Zettelkasten Method, that comes from Niklas Luhmann, which focuses on his prolific reading and his card catalogue and related note taking system. Then a few months back I heard Jorge Arango’s interview with Beck Tench it drew Zettelkasten back into focus. The interview with Beck focussed on Tinderbox, which I love, but I also want mobile access to my notes from phone and tablet.

Early Exploration

I have been using Notion a little bit, but my only use the last few months is as an interstitial capture for YouTube and some other rich media. [I like Notion and it seems like a modern take on Podio and has a similar downfall of not sorting out an adaptive data structure for interoperability and consistency.] But, the communities that are interested in Notion became obsessed with Roam Research, so I looked at Roam. Roam and Notion are two vastly different approaches, which can complement each other but in to way replace each other. But, each has a similar faults, no API, no standard export for structured information, and fully cloud based. That is too many common failure points wrapped into one product (Notion is working on and API, which is really good). Roam bugged me most because it relies on an outline format but has no clue about OPML exporting, but worse has no good export model. The cloud based, which requires being connected and online is a model I really don’t like as, particularly if their isn’t a local sync nor standard data format model. What I really like about Roam is its block focussed format, that is akin to purple numbers model of small chunks that are addressable and reusable.

In this time of looking what a next generation of quick note taking would look like, but long used tool, NValt failed spectacularly, in that it would not find my directory where my 1,200+ notes were stored, nor could I add new notes. Fortunately all of my notes are in plain markdown text files, so all I was missing was my tagging of the files in NValt (Brett Terpstra who created NValt has been working on a new tool that can replace NValt but has been taking forever to show up and my need became immediate). This is one of the common reasons for owning my own notes and having them locally and not using somebody else’s model and framework. But, also using the [small apps loosely joined] model where many tools pointing at well formatted / structured data / information can function to their best ability and can use their strengths without breaking anything with the information / data.

Seriously Looking at Note Taking and Management Tools

I started looking at about five or six different note taking tools. I was building out a rough attribute model of tools to help see what each offered or didn’t. I am needing to write this up, but it started with watching Mike and Matty’s, Notion vs Roam vs Obsidian vs Remnote - How to best fit note taking app for you and using their criteria as a base, then building on it. Obsidian and Remnote were already on my list, but also included Zettelnote, Zettlr, and a couple that extended Tidlywiki for a Zettelkasten type model. I also included OmniOutliner as that has been (and will be) my core outlining tool that interplays well with OPML and I can back and forth with good mind mapping tools that also output and import OPML data standard. I also included DevonThink Pro as it is my long used (since 2005) note and information storage and smart search tool (it already was indexing my notes directories) that there is no chance I’m going to give up, but also knew it didn’t have the core functionality I was seeking, wiki-style back linking.

I did a quick test or Roam and ruled it out as it broke rules I try not to break, and it broke many of them (biggest one is know now you are going to exit before you enter anything and a lack of any structure nor API made it a giant risk I’ve been burned by too many times, but the developers have a lot of arrogance about their approach that far too often leads to disasters - sometimes the kindest, smartest, and solid planning people end up with disasters that I feel very badly about but arrogance and ignorant I don’t).

Zettlr and Remnote were next. But the setup took a bit more of me managing and building things and I know when I lose focus those may not be best choices for myself (my past self 15 years ago or more would have loved it and done well with it, but those days are not now).

Obsidian Ticks the Right Boxes and Adapts to My Existing Model

Obsidian is where I put some time. I pointed its “Vault” to my notes directory (and sub-directory) where I had my 1,200 markdown notes already (some of them were .txt extensions, which I did bulk extension swap on) and it could read everything perfectly. One of my first tests was adding backlinks to some of my social lenses and social scaling notes, which worked really well by making related elements connected. I started capturing my notes about what I was doing in Obsidian and the ease of not only connecting things with backlinks, but having the ability to set empty node wiki links (many notes with the same link to a note / page that doesn’t exist yet, but have the same link to it) and then being able to use backlink following from that non-existent notes link list of things pointing to it was insanely valuable.

I have quite a few book list and book note pages already and I started linking them and linking authors and making author pages. I also found I was wanting note page templates for simple book pages in a Zettelkasten model, a book notes template, author / creator template, and a few others. I created these from existing structured notes I’ve used for years and put the outlines in TextExpander using a simple input line or two to label all of the headers with author name or other name.

I started typing out my notes and highlights from books I’ve read and annotated over the years and after the first three or so books I was deeply hooked.

The Use Where Obsidian Showed I was Hooked

Where I knew I was sold was this last weekend I went back to one of Matt Webb’s blog posts on Small Groups that is dense and has links out to great resources. I captured my initial notes on Matt’s post, and annotated relating to his sections. But, I also quickly dug through the linked materials and created and filled out structured note pages for those as well. The James Mullholland post on Small Groups was fantastic and it spidered out to more related resources, so I followed those and took notes. All of this was cross-linked and back-linked and fleshed out small group notes that I have been building as part of social scaling I’ve been writing on and presenting (talks and workshops) for years. The small group size they focus on is roughly team size, but not a team. Both of these are cooperative social models, which scale from teams, groups (small to large groups with similar social interaction models, but the dynamics shift quite a bit around 75 people and break fully about 300 to 500 people), community (everybody inside a firewall or inside an walled off construct), and network (inside and outside a firewall - so for business it is customers, contractors, consultants, vendors, etc. where there needs to be a safe model for sharing information with shared goals as different roles with their purpose come together for back and forth exchange) - more can be found in my related write-up 5 Core Insights for Community Platforms Today.

This note taking and contextualizing and cross linking to rip through and gut a series of related and interrelated pieces has been something I’ve long looked for and wanted. Many dog years ago in college I took reading notes on note cards with citations and context. When writing a paper / essay I would assemble the note cards in an order that could tell a story. Then I would build an outline in WordStar and type in the quotes. Then I would write the narrative and wrapper. Obsidian is starting to get at that, but ripping through a resource to pull out highlights, quotes, annotations, and notes is utterly fantastic. It gives me a solid resource to easily pull together ideas and supporting information.

Other Obsidian Capabilities

Obsidian can show two note pages at once so to easily copy book citation information from the structured book note file into the book note page. The multiple notes in panels also works well for copying quotes to quote pages and cross linking.

Using Obsidian and Still Working from Mobile and Tablet

The mobile use essential had been broken for a bit after Dropbox stopped supporting softlinks in Mac and requiring that to be native in Dropbox and doing the softlink from the Mac to Dropbox. I moved the directory to Dropbox, which leaves a copy locally usable should something happen to Dropbox and added a softlink for local backups. I pointed DevonThink to this directory to index and I was back running. Now I can use Drafts to take a quick note from my iOS devices and push it to the notes directory (later go back and fix the file name) and I have good inbound notes and can use backlinks (which I test later). This method also works for share sheet to Drafts from Overcast or YouTube and having the link to the media and the notes all pulled in.

Happiness with notes has been missing for a while, perhaps happiness has returned.

Resources Mike and Matty Curtis McHale Effective Remote Work Mariana’s Study Corner
03 Oct 21:29

Uninstalling USB Audio Codec Demo

by Reverend

Or it might also be found more easily under the title “uninstalling usb-driver.com demo driver,” but either way I hope someone else who has this issue avoids wasting as much time as I did on it.

25 minutes of me trying to figure out what that beeping noise on #ds106radio!As I started my #ds106radio x-cast to #ds106tv this morning I ran into a little issue. Turns out the demo USB audio codec I installed from usb-driver.com was beeping every 30 seconds. That is one way to get me to buy the codec or try and uninstall it.

I chose to uninstall, which is what this post is about, but some quick background first. The reason I installed the demo in the first place was to see if I could get a driver fro my USB turntable that would prevent the above message from showing when I try to mute my mic with a keyboard shortcut (more on that in this post). Well, not only did the demo audio codec not solve that issue, but now it was beeping every 30 seconds when I plugged in my turntable, not good.

So, if you are having this issue on a Mac open Finder –>Go–>Go to Folder and  /Library/Audio/Plug-Ins/HAL (not  ~/Library as this guide suggests thanks to this forum post for the heads up) and delete the usb-audio.driver directory.

That will get rid of the driver, and after that restart the computer and the USB Audio Codec should be back (rather than USB Audio Codec Demo) when you plugin in your USB device.

If you are having this issue on a Windows PC this guide may work for you.

That’s it, not thrilled at how much time I spent on this at all, but glad it is behind me and if I am dumb enough to do it again I’ll find my own blog post 🙂

03 Oct 21:29

plz don't post pics of our podcasting studio twitter.com/IWantAnXcelsio…

by 💀Well Scares Your Problem Podcast💀 (wtyppod)
mkalus shared this story from wtyppod on Twitter.

plz don't post pics of our podcasting studio twitter.com/IWantAnXcelsio…

The star of the show was undoubtedly the Avelia but this Conrail caboose deserves some attention too pic.twitter.com/ipZIz31ieV





34 likes, 4 retweets



109 likes, 3 retweets
03 Oct 07:05

Twitter Favorites: [JodiesJumpsuit] Homemade pho for dinner https://t.co/tMLRUU8Ym0

jumpscare (inside) @JodiesJumpsuit
Homemade pho for dinner pic.twitter.com/tMLRUU8Ym0
03 Oct 07:04

Weeknotes: Datasette column actions, plus three new plugins

A renewed emphasis on building out Datasette Cloud has produced three new plugins this week: datasette-dateutil, datasette-import-table and datasette-edit-schema, plus a major improvement to Datasette's default interface for browsing tables.

Datasette column actions

If you take a look at the latest.datasette.io demo (continuously deployed with the latest Datasette main branch) you'll see a new UI element: cog icons on each table column, which reveal a drop-down menu.

The on_earth column has an expanded menu with Sort ascending, Sort descending and Facet by this menu items.

I'm calling these "column actions", and they're an improvement I've been planning for a long time.

So far these solve two problems:

  • Sorting a column in descending order previously required two full page load clicks - one to sort ascending, and another to reverse that order. You can now sort descending directly from the menu.
  • Datasette lets you facet by any column by appending ?_facet=column-name to the URL, but this is not a very discoverable feature! It suggests facets for columns that have less than 30 unique values, but sometimes you want to facet by something else - US states for example. You can now facet any column using the cog menu, with the exception of single unique primary key columns since faceting by those is guaranteed to only return one result per value.

Additionally, if a column has visible blank values on the page a "Show not-blank rows" option will be displayed, for quickly seeing rows that have something interesting in that column.

I'm planning to make these available for extension by plugins - I'm sure there are all sorts of other potentially useful per-column actions.

One concern I had in building these was accessibility: I was particularly worried that adding the markup for a dropdown menu to a <th> element would interfere with screenreaders when they were using those headers to describe the contents of a cell.

In the end I solved this by creating the menu as a separate absolutely positioned element, which appears in the correct place when the cog icon is clicked.

This still needs more work - I need to learn how to use ARIA to make the menus fully accesible - but I'm optimistic in the approach so far. If you use a screen reader I would deeply value your feedback in the column action accessibility issue.

If you want to try out column actions they're available in the latest alpha release, Datasette 0.50a0.

datasette-dateutil

I'm working with students in the Stanford Big Local Journalism course this term, and it's really helping me figure out the gaps in Datasette and my forthcoming Datasette Cloud hosted offering.

I want Datasette to be as useful to journalists as possible. This means handling messy data from all manner of sources (many of them government).

One missing feature has been flexible date handling. I've been succesfully using the excellent python-dateutil library for this for fifteen years now, so I decided to expose its functionality within Datasette as the datasette-dateutil plugin.

The plugin adds several new custom SQL functions. Here's an example query:

select
  dateutil_parse("10 october 2020 3pm"),
  dateutil_parse_fuzzy("This is due 10 september"),
  dateutil_parse("1/2/2020"),
  dateutil_parse("2020-03-04"),
  dateutil_parse_dayfirst("2020-03-04"),
  dateutil_easter(2020);

Try that query here. It outputs the following:

2020-10-10T15:00:00
2020-09-10T00:00:00
2020-01-02T00:00:00
2020-03-04T00:00:00
2020-04-03T00:00:00
2020-04-12

I've also exposed the rrule module, which implements recurring date rules as described in the iCalendar specification. The dateutil_rrule() and dateutil_rrule_date() functions return JSON arrays of dates matching the rule, for example:

select
  dateutil_rrule('FREQ=HOURLY;COUNT=5'),
  dateutil_rrule_date(
    'FREQ=DAILY;COUNT=3',
    '1st jan 2020'
  );

Try it - here are the results:

[
    "2020-10-02T23:12:55",
    "2020-10-03T00:12:55",
    "2020-10-03T01:12:55",
    "2020-10-03T02:12:55",
    "2020-10-03T03:12:55"
]

[
    "2020-01-01",
    "2020-01-02",
    "2020-01-03"
]

These are SQLite strings containing JSON arrays - but you can use SQLite's json_each() function to expand them out into tables that can then be joined against other tables! The README goes into more details on how you can do that.

This is particularly useful for solving problems like generating the number-of-items per day for a given time period while still returning a 0 for dates that do not have any corresponding items.

datasette-edit-schema

I previewed this last week, when it was called datasette-edit-table. I realized that datasette-edit-schema is a better name as it doesn't imply that you can edit the rows within the table - just the schema of the table itself.

Release 0.3 is the first non-alpha release, and provides the following capabilities:

  • Rename a table
  • Add new columns to a table
  • Rename columns in a table
  • Modify the type of columns in a table
  • Re-order the columns in a table
  • Delete a table

This is particularly useful should you import a messy CSV file (using datasette-upload-csvs) and then need to rename some columns, change their types (so that you can sort by integers and floats instead of everything being text), then re-order them to make more sense.

It also means you can rename LAT and LON columns to latitude and longitude so that datasette-cluster-map knows that it can render them on a map.

datasette-import-table

If you're going to modify and clean data, it can be helpful to start with an existing table. datasette-import-table lets you provide the URL to an existing Datasette table hosted anywhere on the internet - it will then create a local copy of that table by paginating through the JSON API for that table and importing all of the rows.

TIL this week

Releases this week