282 Matching Annotations
  1. Dec 2024
    1. https://web.archive.org/web/20241201071240/https://www.dreamsongs.com/WorseIsBetter.html

      Richard P Gabriel documents the history behind 'worse is better' a talk he held in Cambridge in #1989/ The role of LISP in the then AI wave stands out to me. And the emergence of C++ on Unix and OOP. I remember doing a study project (~91) w Andre en Martin in C++ v2 because we realised w OOP it would be easier to solve and the teacher thought it would be harder for us to use a diff language.

      via via via Chris Aldrich in h. to Christian Tietze, https://forum.zettelkasten.de/discussion/comment/22075/#Comment_22075 to Christine Lemmer-Webber https://dustycloud.org/blog/how-decentralized-is-bluesky/ to here.

      -[ ] find overv of AI history waves and what tech / languages drove them at the time

    1. But perhaps that's too ambitious to suggest taking on for either camp. And maybe it doesn't matter insofar as the real lessons of Worse is Better is that both first mover advantage on a quicker and popular solution outpaces the ability to deliver a more correct and robust position, and entrenches the less ideal system. It can be really challenging for a system that is in place to change itself from its present position, which is a bit depressing.

      Succinct description of worse is better

      The 'worse' bit moves you along in the adjacent possible paths of the [[Evolutionair vlak van mogelijkheden 20200826185412]], where as the 'better' bit puts you at a peak in the evol landscape from which you can't move and hard to get to for others.

      via via Chris Aldrich in h. pointing to Christian Tietze comment https://forum.zettelkasten.de/discussion/comment/22075/#Comment_22075 pointing to this Christine Lemmer-Webber post, following it onwards to https://www.dreamsongs.com/WorseIsBetter.html by Richard P. Gabriel

  2. Nov 2024
    1. Busy week coding -- but there was one delightful article that led me down a small rabbit hole of Richard P Gabriel's writing about "worse is better" from 1989/90. The hub for this idea is here: Richard P. Gabriel: "Worse Is Better", https://www.dreamsongs.com/WorseIsBetter.html And I found it via: Christine Lemmer-Webber: "How decentralized is Bluesky really?", 2024-11-22, https://dustycloud.org/blog/how-decentralized-is-bluesky/ The idea of "worse is better" got connected to Gall's Law, and loosely relates to why idealistic, big software rewrites fail so often. And why things that are imperfect but provide value proliferate.
  3. Oct 2024
    1. Thus is the problem of Rich and Poor to be solved. The laws of accumulation will be left free; the laws of distribution free. Individualism will continue, but the millionaire will be but a trustee for the poor; intrusted for a season with a great part of the increased wealth of the community, but administering it for the community far better than it could or would have done for itself.

      for - quote / critique / question - Thus is the problem of Rich and Poor to be solved. The laws of accumulation will be left free; the laws of distribution free. Individualism will continue, but the millionaire will be but a trustee for the poor; intrusted for a season with a great part of the increased wealth of the community, but administering it for the community far better than it could or would have done for itself. - The Gospel of Wealth - Andrew Carnegie

      quote / critique / question - Thus is the problem of Rich and Poor to be solved. The laws of accumulation will be left free; the laws of distribution free. Individualism will continue, but the millionaire will be but a trustee for the poor; intrusted for a season with a great part of the increased wealth of the community, but administering it for the community far better than it could or would have done for itself. - The Gospel of Wealth - Andrew Carnegie - The problem with this reasoning is that it is circular - By rewarding oneself an extreme and unfettered amount of wealth for one's entrepreneurship skills creates inequality in the first place - Competition that destroys other corporations ends up reducing jobs - At the end of life, the rich entrepreneur desires to give back to society the wealth that (s)he originally stole - If one had reasonable amounts of rewarding innovation instead of unreasonable amounts, the problem of inequality can be largely mitigated in the first place whilst still recognizing and rewarding individual effort and ingenuity

    2. Much better this great irregularity than universal squalor

      for - quote / critique- Much better this great irregularity than universal squalor - Andrew Carnegie

      quote / critique - Much better this great irregularity than universal squalor - Andrew Carnegie - Carnegie is writing from his perspective of the contrast between - life when he grew up, lived in an age of perceived universal squalor and - the world he helped shape through industrial mass production that produced high quality goods in such numbers that they became available to all - Yet, even before Carnegie, inequality had existed, for the world prior to Carnegie had its share of kings, queens, emperors and authoritarians - Even today, the best we might say of modern democracies is a decoupling of wealth and official governance - although even that is inaccurate as the thriving lobbying industry allows industrial magnates to decide upon rules of governance that are friendly towards their businesses - In contrast, from the commons perspective, and especially from the Cosmolocal movement of production, there is proposed a road that leads to - much less and much more tolerable levels of inequality and no universal squalor - a civilization existing within safe and just earth system boundaries

  4. Sep 2024
    1. For years developers have followed the same arcane dozen steps to create a long-lived daemon process on Unix-based systems. These steps were state of the art in 2000 but they are no longer best practice today.
    1. Modern parallel languages have much easier to use execution models. The thread model was one of the original parallel execution models, which may account for why it has persisted despite being difficult to use.
  5. Aug 2024
    1. So either you're back into the future  in a dead end, and you hit the wall, and it gets dark. or you transition  towards this more attractive future. And I think we need to start talking  about that attractive future

      for - planetary emergency - narrative shift required - from lack to building a better world

    1. Avram Lincoln said I don't like this man I have to get to know him better because getting other people into your perspective

      for - neuroscience - perspectival knowing - why it's important to know other perspectives - perspectival knowing - Abraham Lincoln quote - I don't know that man - I better get to know his perspective

    2. a very good advice in order to calculate or estimate the duration of the project is that you ask non-experts

      for - neuroscience - time estimation - non-experts are better at providing time budgets - neuroscience - non-experts give better time estimates than consultants

  6. Jul 2024
  7. Jun 2024
    1. It was enclosed in scare quotes, a sort of acknowledgment that the author knew it was non-standard, but was too apt for the purpose to resist. I remember reading it and trying to think of the “real” word that would be employed there, but could not find a satisfactory alternative. Since then, I’ve found myself unable to resist using the word when appropriate, due to its utility!

      "too apt for the purpose to resist" :kiss:

    1. How can I wait for container X before starting Y? This is a common problem and in earlier versions of docker-compose requires the use of additional tools and scripts such as wait-for-it and dockerize. Using the healthcheck parameter the use of these additional tools and scripts is often no longer necessary.
  8. May 2024
    1. we can then shift to a better way of doing it and we knew what that was before genome sequencing

      for - quote - better approach than gene sequence as universal panecea

      quote - better approach than gene sequence as universal panecea - (see quote below)

      • Look at the high-level organization of the system
        • the living system
      • Locate what is going wrong there and then work down to find what you might do
      • at lower levels with a drug or any other kind of treatment for that matter to put it right
      • That works much better than trying to go the other way because
        • going the other way, the space for
          • possible molecules and
          • possible effects and
          • even more possible combinations of effects
        • because those complex diseases are going to require combinations of treatment
        • There are too many
        • You can't do clinical trials on all of those possibilities
        • It's just far too expensive
        • So I think we just take need to take a different approach to medical research
          • to try to benefit from the human genome sequencing
          • in a way that's different from what they originally promised
    1. file transfers

      Better would be to include files as is. Use hash of it in an event. Download from whoever has it, the IPFS way. Only between friends

    2. Every event graph has a single root event with no parent

      Weird. That means one user must start a topic. Whereas a topic like "Obama" could be started by multiple folks, not knowing about each other, later on discovering and interconnecting their reasoning, if they so wish.

  9. Apr 2024
    1. my favorite detail about this scene is how he's holding the coffee mug at the end. He has his hand on the hot part not by the handle, almost like a last bit of comfort/distraction, a little warmth, the very thing that brought life in the first place.

      people holding warm drinks induce "warm" feelings in viewers.<br /> teddy was alone at the dinner, so the cup of coffee was his only friend.<br /> earlier in the movie, there are at least 2 references to "this technology is the friend we need"<br /> ref 1 at the "bash liif presentation" at 0:25:30 - "all of my life's work, really i see, has been driven by an inexpressible need for a friend, who would understand and soothe me."<br /> "if i feel sad, afraid, or alone ..."<br /> 0:56:20 "lot of fear out there ... parents dont know what to say to their kids ..."<br /> "your words are a great comfort to our viewers ..."<br /> "whenever i feel afraid or alone in this, i think of you, and i just feel better"<br /> ref 2 01:18:40 "And who knows? Maybe, just maybe,<br /> one of our scientists can be that friend we all need to lean on during uncertain times."<br /> its also a personality test. in times of stress, some people prefer company (neurotic types, dependent, followers), and some people prefer solitude (psychotic types, free, leaders).

  10. Jan 2024
    1. Prepare to transition away from Google Sync Google Sync doesn’t support OAuth authentication, 2-factor authentication, or security keys, which leaves your organization’s data less secure.
  11. Dec 2023
    1. “Various people asked to do various things with it, and they referred them to this guy who didn't respond,” Brand says. “And so it was just frustrating for decades.”
  12. Nov 2023
    1. Autoloading in Rails was based on const_missing up to Rails 5. That callback lacks fundamental information like the nesting or the resolution algorithm being used. Because of that, Rails autoloading was not able to match Ruby's semantics, and that introduced a series of issues. Zeitwerk is based on a different technique and fixed Rails autoloading starting with Rails 6.
    1. ActiveRecord::Base.normalizes declares an attribute normalization. The normalization is applied when the attribute is assigned or updated, and the normalized value will be persisted to the database. The normalization is also applied to the corresponding keyword argument of query methods, allowing records to be queried using unnormalized values.

      Guess I don't need to use mdeering/attribute_normalizer gem anymore...

  13. Sep 2023
    1. Recent work has revealed several new and significant aspects of the dynamics of theory change. First, statistical information, information about the probabilistic contingencies between events, plays a particularly important role in theory-formation both in science and in childhood. In the last fifteen years we’ve discovered the power of early statistical learning.

      The data of the past is congruent with the current psychological trends that face the education system of today. Developmentalists have charted how children construct and revise intuitive theories. In turn, a variety of theories have developed because of the greater use of statistical information that supports probabilistic contingencies that help to better inform us of causal models and their distinctive cognitive functions. These studies investigate the physical, psychological, and social domains. In the case of intuitive psychology, or "theory of mind," developmentalism has traced a progression from an early understanding of emotion and action to an understanding of intentions and simple aspects of perception, to an understanding of knowledge vs. ignorance, and finally to a representational and then an interpretive theory of mind.

      The mechanisms by which life evolved—from chemical beginnings to cognizing human beings—are central to understanding the psychological basis of learning. We are the product of an evolutionary process and it is the mechanisms inherent in this process that offer the most probable explanations to how we think and learn.

      Bada, & Olusegun, S. (2015). Constructivism Learning Theory : A Paradigm for Teaching and Learning.

  14. Aug 2023
      • for: polycrisis, collapse, tweedledums, tweedledees, wicked problem, social mess, stuck, stuckness, complexity
      • title
        • Is This How Political Collapse Will Unfold?
      • author
        • Dave Pollard
      • date
        • Aug 3, 2023
      • comment
        • thought provoking
        • honest, diverse, open thinking
        • a good piece of writing to submit to SRG / Deep Humanity analysis for surfacing insights
        • adjacency
          • complexity
          • emptiness
          • stuckness
            • this word "stuckness" stuck out in me (no pun intended) today - so many intractable, stuck problems, at all levels of society, because we oversimplify complexity to the point of harmful abstraction.
      • definition

        • Tweedledums

          • This is a Reactionary Caste that believes that salvation lies in a return to a non-existent nostalgic past, characterized by respect for
            • authority,
            • order,
            • hierarchy,
            • individual initiative, and
            • ‘traditional’ ways of doing things,
          • governed by a
            • strict,
            • lean,
            • paternalistic elite
          • that leaves as much as possible up to individual families guided by
            • established ‘family values’ and
            • by their interpretation of the will of their god.
        • Tweedledees

          • This is a PM (Professional-Managerial) Caste that believes that salvation lies in striving for an impossibly idealistic future characterized by
            • mutual care,
            • affluence
            • relative equality for all,
          • governed by a
            • kind,
            • thoughtful,
            • educated,
            • informed and
            • representative
          • elite that appreciates the role of public institutions and regulations, and is guided by principles of
            • humanism and
            • ‘fairness’.
        • references
        • Aurélien
        • source
        • led here by reading Dave Pollard's other article
  15. Jun 2023
    1. I think we have a responsibility not only to ourselves, but also to each other, to our community, not to use Ruby only in the ways that are either implicitly or explicitly promoted to us, but to explore the fringes, and wrestle with new and experimental features and techniques, so that as many different perspectives as possible inform on the question of “is this good or not”.
    2. If you’ll forgive the pun, there are no constants in programming – the opinions that Rails enshrines, even for great benefit, will change, and even the principles of O-O design are only principles, not immutable laws that should be blindly followed for the rest of time. There will be other ways of doing things. Change is inevitable.
  16. May 2023
    1. js /** * This component is just a Box with border. * It serves as an example of how you can incorporate * components together. * * Component also has slots, methods and events. * * @component * @example <caption>Basic usage just with the default slot</caption> * <Box> * I am inside a slot * </Box> * * @example <caption>Using second component inside</caption> * <Box> * <ProgressBar :spent="spent" :remaining="50"></ProgressBar> * </Box> * * @example <caption>Example of passing an entire component in a preview</caption> * { * template: `<Box> * <ProgressBar :spent="spent" :remaining="50"></ProgressBar> * <ProgressBar :spent="50" :remaining="50" style="margin-top: 20px"></ProgressBar> * </Box>`, * data: function() { * return {spent: 223}; * } * } */ export default { name: "Box", props: { /** * This will be in the header */ title: { type: String, default: "My box" } }, methods: { /** * Also, you can describe methods for each component * the same as you would do this in regular @jsdoc * documented file * * @param {string} prop1 some example property * @param {string} prop2 other property */ exampleMethod(prop1, prop2) { // method body // The method could even throw an event /** * This event could be thrown by component in case * of some kind of unexpected behaviour. * * @category API * @event unexpectedEvent */ this.$emit('unexpecteEvent') } } }

  17. Feb 2023
  18. Jan 2023
    1. https://www.gwern.net/Backstop#internet-community-design

      <small><cite class='h-cite via'> <span class='p-author h-card'>Henrik Karlsson   </span> in Conversational Canyons - Escaping Flatland (<time class='dt-published'>01/06/2023 10:40:49</time>)</cite></small>

  19. Dec 2022
    1. Our API v3 uses the terminology from the previous version of GetResponse. Campaigns and lists are the same resource under a different name. For now, please refer to lists as campaigns. Our API v4 will use the updated terminology.
    1. With Mailgun, you'll need to upgrade to a dedicated IP or "managed email service" and pay extra for "better deliverability." At Postmark, great deliverability isn't an up-charge. It's simply included, and we share live delivery data so you can judge for yourself.
    1. Imagine what happens when subscribers change activities, interests, or focus. As a result, they may no longer be interested in the products and services you offer. The emails they receive from you are now either ‘marked as read’ in their inbox or simply ignored. They neither click the spam reporting button nor attempt to find the unsubscribe link in the text. They are no longer your customers, but you don’t know it.
  20. Nov 2022
    1. I just spent a day dismantling a model, trying to find the cause of the silent rollback - taking out every association, every validation, every callback, whittling down all the code in the transaction, only to finally discover that it was return true that was the cause of it all. Or yes, an exception!
  21. Oct 2022
  22. Sep 2022
    1. If anyone can completely refactor the JSON Schema description for OpenAPI v3.0 to accurately describe the schema in all its glory, without using this new keyword, then please do so, but I would kindly ask you to test the theory first.
    2. This is a distillation of the results of 230+ comments on #515, not to mention the 300+ comments spread across several other older issues that fed into that one. I know it's long. Please don't complain unless you can offer a shorter write-up. :-)
    1. the AST version of the code is vastly superior IMHO. The knowledge about what constitutes an access modifier is already encoded in the system so it makes more sense to just call the method to test the type of node. The regexp solution may be expedient, but it's not as resilient to change -- if new access modifiers are added in the future it's very likely this code won't be updated, which will be the source of a bug.
  23. Aug 2022
  24. Jul 2022
  25. Jun 2022
  26. May 2022
  27. Apr 2022
    1. I agree about documenting everything. But for me docs are a last resort (the actual text, anything beyond skimming through code examples) when things already went wrong and I need to figure out why. But we can do much better. During dev when we see _method and methodOverride is disabled we can tell the developer that it needs to be enabled. Same if we see _method with something other than POST. Same for all other cases that are currently silently ignored. If the method is not in allowedMethods arguable it should even return a 400 in production. Or at the very least during dev it should tell you. We have the knowledge, let's not make the user run into unexpected behavior (e.g. silently ignoring _method for GET). Instead let's fail as loud as possible so they don't need to open their browser to actually read the docs or search though /issues. Let them stay in the zone and be like "oh, I need to set enabled: true, gotcha, thanks friendly error message".
  28. Mar 2022
    1. The reason for the new name is that the "dist-upgrade" name was itself extremely confusing for many users: while it was named that because it was something you needed when upgrading between distribution releases, it sounded too much as though it was only for use in that circumstance, whereas in fact it's much more broadly applicable.
  29. Feb 2022
    1. Dispatch a custom event. This differs from Svelte's component event system, because these events require a DOM element as a target, can bubble (and do by default), and are cancelable with event.preventDefault(). All SMUI events are dispatched with this instead of Svelte's createEventDispatcher.
  30. Jan 2022
    1. the old paradigms of critical pessimism ultimately lead to political paralysis and fatalism, another way of seeing technological expansion as inevitable and irreversible. Critical pessimism offers us few models of viable change, focusing only on the strength of entrenched power and the failure of all strategies of resistance. At its most reductive, critical pessimism scapegoats the media for all the faults of the current social order rather than recognizing that digital media might offer new technical potentials for responding to the fragmentation of contemporary social life or the domestic isolation of our children, housewives, and the elderly. Digital theory matters politically because of its ability to envision alternatives, to imagine a better future. Cyberspace provides a place to experiment with alternative structures of government, new forms of social relations, which may, at least on the most grassroots of levels, allow us to temporarily escape, if not fully transform, unacceptable social conditions in our everyday lives.

      Jenkins suggests that whilst critical pessimism "..serves important functions" in the way it questions the lurid claims of computational culture that it fails to provide us with "...models of viable change". In his argument the technological offers a place to imagine and explore "a better future".

  31. Dec 2021
  32. Nov 2021
  33. Oct 2021
    1. While lacking a mandate to actually rule Lebanon, Hezbollah has successfully occupied the shell of an almost completely failed state. Sanctions have created a vicious feedback loop, in which attempts to curb Hezbollah’s influence just deteriorate the Lebanese state, which allows Hezbollah to fill the vacuum of state function. The Lebanese military is desperately trying to hold the center as the only legitimate state institution. But the military lacks the capacity to hold on to power, and Hezbollah has proved that a mandate is easier to build than capacity. Hezbollah also has a powerful ally in the victorious Assad government in Syria, both of which now have an interest in repatriating as many Syrian refugees as possible to undermine Sunni influence in Lebanon. Repatriation prevents the Sunnis from growing their base in Lebanon, and protects Hezbollah’s Shiite base from the internal threat of Sunni influence.

      Summary

    2. The strike was likely authorized by Paris and Washington, both of which have warned several times against Hezbollah circumventing the state to provide a solution to the fuel crisis themselves.

      Fight over who gets to provide a solution to crisis: that is amazing perspective... if you try to help, we'll spend resources that could be pooled into helping to undermine your efforts to help and kill you for trying.

    1. There will be three billion gamers by next year, according to a Newzoo study. And as Loftus puts it: “People are going to need to wear something.”

      THIS is it - web 3 is making consumers mutiplicitous - opens marketts WITHIN games, subworlds that can be exploited / marketed to / fashion trends will sweep games, online subcultures (maybe) - people have markeable personas on and off the web, new context for targeted advertising / commerce.

      Will cannabalize physical economies?

      Accessorize for a zoom meeting - digital suits, etc digital costumes. Something to wear at digital concerts, in games; your Perona will not be birthed into the metaverse clothed, accessorized...

      Assets will be portable across platforms.

  34. Sep 2021
    1. Saying that web devs used to be fine with relative imports is like saying that human beings used to be fine living without refrigerators. Sure we did. But was it better than it is now? No. No, it wasn't.
    1. Update API usage of the view helpers by changing javascript_packs_with_chunks_tag and stylesheet_packs_with_chunks_tag to javascript_pack_tag and stylesheet_pack_tag. Ensure that your layouts and views will only have at most one call to javascript_pack_tag or stylesheet_pack_tag. You can now pass multiple bundles to these view helper methods.

      Good move. Rather than having 2 different methods, and requiring people to "go out of their way" to "opt in" to using chunks by using the longer-named javascript_packs_with_chunks_tag, they changed it to just use chunks by default, out of the box.

      Now they don't need 2 similar but separate methods that do nearly the same, which makes things simpler and easier to understand (no longer have to stop and ask oneself, which one should I use? what's the difference?).

      You can't get it "wrong" now because there's only one option.

      And by switching that method to use the shorter name, it makes it clearer that that is the usual/common/recommended way to go.

    2. Webpacker used to configure Webpack indirectly, which lead to a complicated secondary configuration process. This was done in order to provide default configurations for the most popular frameworks, but ended up creating more complexity than it cured. So now Webpacker delegates all configuration directly to Webpack's default configuration setup.

      more trouble than it's worth

      • creating more complexity than it cured
    1. This is no different from other popular libraries or frameworks making huge architectural changes (think React 16.8 with hooks or Python 3). The longer you wait to make the switch, the more painful it will be for your project when you finally do. And in the meantime, you’ll be missing out on valuable improvements to a fundamental part of the workflow of every single project you work on.
  35. Aug 2021
  36. developer.mozilla.org developer.mozilla.org
    1. If you forget to define x in the object you pass as the second argument, or if there's some similar bug or confusion, you won't get an error -- just unexpected results.
  37. Jul 2021
  38. datatracker.ietf.org datatracker.ietf.org
    1. When an endpoint is to interpret a byte stream as UTF-8 but finds that the byte stream is not, in fact, a valid UTF-8 stream, that endpoint MUST _Fail the WebSocket Connection_. This rule applies both during the opening handshake and during subsequent data exchange.
  39. Jun 2021
  40. May 2021
    1. Your brain is a leaky bucket. If you're dedicated to filling it with knowledge, you should be equally dedicated to sealing the leak. Here's how.

      way better for the opening of an article

    1. CommonJS has served us well for many years, but ESM comes with many benefits, like language-level syntax, browser support, defaults to strict mode, async loading, top-level await, improved static analysis & tree-shaking, and more.
    1. MJML has been designed with responsiveness in mind. The abstraction it offers guarantee you to always be up-to-date with the industry practices and responsive. Email clients update their specs and requirements regularly, but we geek about that stuff - we’ll stay on top of it so you can spend less time reading up on latest email client updates and more time designing beautiful email.
  41. Apr 2021
    1. The main difference is in the flow of how messages are ultimately sent to devices for output. The standard library Logger logic converts the log entries to strings and then sends the string to the device to be written to a stream. Lumberjack, on the other hand, sends structured data in the form of a Lumberjack::LogEntry to the device and lets the device worry about how to format it. The reason for this flip is to better support structured data logging. Devices (even ones that write to streams) can format the entire payload including non-string objects and tags however they need to.
    2. There is a similar feature in the standard library Logger class, but the implementation here is safe to use with multiple processes writing to the same log file.
    3. Lumberjack 1.0 had a concept of a unit of work id that could be used to tie log messages together. This has been replaced by tags. There is still an implementation of Lumberjack.unit_of_work, but it is just a wrapper on the tag implementation.
    1. What you want is not to detect if stdin is a pipe, but if stdin/stdout is a terminal.

      The OP wasn't wrong in exactly the way this comment implies: he didn't just ask how to detect whether stdin is a pipe. The OP actaully asked how to detect whether it is a terminal or a pipe. The only mistake he made, then, was in assuming those were the only two possible alternatives, when in fact there is (apparently) a 3rd one: that stdin is redirected from a file (not sure why the OS would need to treat that any differently from a pipe/stream but apparently it does).

      This omission is answered/corrected more clearly here:

      stdin can be a pipe or redirected from a file. Better to check if it is interactive than to check if it is not.

    2. stdin can be a pipe or redirected from a file. Better to check if it is interactive than to check if it is not.
    1. Factory FunNER is the sequel and a very solid improvement to Factory Fun. It uses hexes instead of squares to allow more creative building, and some subtle improvements to scoring, length, and machine placement rules really improve things.
    1. Now that we’ve gotten newer layout features — again, like grid and flexbox — floats, too, have sort of fallen by the wayside, perhaps either because there are better ways to accomplish what they do
  42. Mar 2021
    1. Your validation functions should also treat undefined and '' as the same. This is not too difficult since both undefined and '' are falsy in javascript. So a "required" validation rule would just be error = value ? undefined : 'Required'.
    1. As to why both is_a? and kind_of? exist: I suppose it's part of Ruby's design philosophy. Python would say there should only be one way to do something; Ruby often has synonymous methods so you can use the one that sounds better. It's a matter of preference.
    1. non-regression testing

      That would probably be a better name because you're actually testing/verifying that there hasn't been any regression.

      You're testing for the absence of regression. But I guess testing for one also tests for the other, so it probably doesn't matter. (If something is not true you know it is false, etc.)

    1. Clearly JS and NPM have done a lot RIGHT, judging by success and programmer satisfaction. How do we keep that right and fix the wrong?
  43. Feb 2021
    1. In combination with [Track()], the :magnetic_to option allows for a neat way to spawn custom tracks outside of the conventional Railway or FastTrack schema.

      Instead of magnetic_to:, I propose wrapping the steps that are on a separate track in something like...

        DefTrack do :paypal do
          step :charge_paypal
        end
      

      or

        paypal_track = RailwayTrack do :paypal do
          step :charge_paypal
        end
      

      so we can reference it from outputs, like we can with tracks created with Path helper.

    2. The activity gem is an extraction from Trailblazer 2.0, where we only had operations. Operations expose a linear flow which goes into one direction, only. While this was a massive improvement over messily nested code, we soon decided it’s cool being able to model non-linear flows. This is why activities are the major concept since Trailblazer 2.1.
    1. Since we're not passing any inputs to ListAccounts, it makes sense to use .run! instead of .run. If it failed, that would mean we probably messed up writing the interaction.
    2. compose(Add, x: x, y: 3)

      How is this better than simply:

      Add.run(x: x, y: 3)
      

      ?

      I guess if we did that we would also have to remember to handle merging errors from that outcome into self...

    3. account.first_name = first_name if first_name.present? account.last_name = last_name if last_name.present?

      I guess this is needed so we don't reset to nil (erasing value in database) when they haven't even provided a new value as input.

      But surely there's a cleaner way...

    4. ActiveInteraction plays nicely with Rails. You can use interactions to handle your business logic instead of models or controllers.
    5. Since we're using an interaction, we don't need strong parameters. The interaction will ignore any inputs that weren't defined by filters. So you can forget about params.require and params.permit because interactions handle that for you.
    6. Why is all this interaction code better? Two reasons: One, you can reuse the FindAccount interaction in other places, like your API controller or a Resque task. And two, if you want to change how accounts are found, you only have to change one place.

      Pretty weak arguments though...

      1. We could just as easily used a plain object or module to extract this for easy reuse and having it in only one place (avoiding duplication).
    1. That’s it. If you have a previous “precompile” array, in your app config, it will continue to work. For continuity sake I recommend moving over those declarations to your manifest.js file so that it will be consistent.
    2. Instead of having this confusing maze of lambdas, regexes, and strings, we could, in theory, introduce a single entry point of configuration for Sprockets to use, and in that file declare all assets we wanted to compile. Well, that’s exactly what the manifest.js file is.
    1. You’re allowed to blame us for a terrible developer experience in Trailblazer 2.0. It’s been quite painful to find out which step caused an exception. However, don’t look back in anger! We’ve spent a lot of time on working out a beautiful way for both tracing and debugging Trailblazer activities in 2.1.
    1. While Trailblazer offers you abstraction layers for all aspects of Ruby On Rails, it does not missionize you. Wherever you want, you may fall back to the "Rails Way" with fat models, monolithic controllers, global helpers, etc. This is not a bad thing, but allows you to step-wise introduce Trailblazer's encapsulation in your app without having to rewrite it.
    1. Yes, Trailblazer is adding new abstractions and concepts and they are different to the 90s-Ruby, but now, at the latest, it becomes obvious how this improves the developing process. We’re no longer talking in two-dimensional method stack traces or byebug hoops, the language and conception is changing to the actual higher level code flow, to activities sitting in activities structured into smaller step units.
    2. The new call API is much more consistent and takes away another thing we kept explaining to new users - an indicator for a flawed API.
    3. We removed the trailblazer-loader gem just like Apple removed the headphone jack from the iPhone 6. This brings you faster startup and consistency with Rails autoloading.
    1. As of today, you can Wishlist OpenTTD on SteamE. Historically, OpenTTD always had a single home from where we distributed the game. We used to be hosted on SourceForge (you know you are old, if you remember that being a thing :D), and slowly moved towards our own self-created distribution methods. These days, we mostly distribute our game via our website. But times are changing, and so is our hair. Over the last few months, we have silently been working to become a bit more visible in the world. Don’t worry, not for reasons you might think: OpenTTD has as many active users as it had in 2007. But more because we no longer think it is the right approach to only distribute via our own website. This became painfully apparent when we noticed other people post OpenTTD on some stores. They are not always updated with new releases, sometimes even slacking behind a few years. And maybe more important to us: we can not guarantee that the uploaded version is unmodified and is the version as we intended. So, instead of fighting it, why not turn around and join them! Why not release our own, verified, builds on those stores! And this is exactly what we have been working on lately. And when I say “we”, a bit ironic to me, I mean the two developers that are around longest (myself and orudge) ;) A while back orudge added OpenTTD to the Microsoft Store. And today, I am happy to announce we will be on SteamE too! Well, we are on Steam, but we haven’t released anything there yet (sorry that I got your hopes up, just to squash them right after :( ). This is partially because of how Steam works, but also because we know we can bring a better experience for Steam with our upcoming release. That brings me to the most exciting news: if everything goes as planned, we will release OpenTTD 1.11 on Steam on the first of April, 2021! And that is not even an April fools’ joke! You can already Wishlist OpenTTD today .. and till we release on Steam, you can find our game via our website ;)
    1. As of today, you can Wishlist OpenTTD on SteamE. Historically, OpenTTD always had a single home from where we distributed the game. We used to be hosted on SourceForge (you know you are old, if you remember that being a thing :D), and slowly moved towards our own self-created distribution methods. These days, we mostly distribute our game via our website. But times are changing, and so is our hair. Over the last few months, we have silently been working to become a bit more visible in the world. Don’t worry, not for reasons you might think: OpenTTD has as many active users as it had in 2007. But more because we no longer think it is the right approach to only distribute via our own website.
    1. Well, I'm glad they did, because Turbolinks is a much better piece of software than jquery-pjax ever was. It's actively maintained and doesn't require jQuery at all! So we're one step closer to our dream of ditching $.
  44. Jan 2021
    1. Systemd problems might not have mattered that much, except that GNOME has a similar attitude; they only care for a small subset of the Linux desktop users, and they have historically abandoned some ways of interacting the Desktop in the interest of supporting touchscreen devices and to try to attract less technically sophisticated users. If you don't fall in the demographic of what GNOME supports, you're sadly out of luck.
    1. Moving DOM elements around made me anxious and I wanted to preserve natural tab order without resorting to setting tabindex, so I also made a flexbox version that never moves DOM elements around. I think it's the superior solution, at least for the layouts I was going for. https://github.com/wickning1/svelte-components/blob/master/src/FlexCardLayout.svelte
    1. Popper for Svelte with actions, no wrapper components or component bindings required! Other Popper libraries for Svelte (including the official @popperjs/svelte library) use a wrapper component that takes the required DOM elements as props. Not only does this require multiple bind:this, you also have to pollute your script tag with multiple DOM references. We can do better with Svelte actions!
    1. When there are imperfections, we rely on users and our active community to tell us how the software is not working correctly, so we can fix it. The way we do that, and have done for 15 years now, is via bug reports. Discussion is great, but detailed bug reports are better for letting developers know what’s wrong.
    2. The benefits for developers do reflect on benefits for users, with more software delivered faster and more securely.
    3. What’s the use of ie. snap libreoffice if it can’t access documents on a samba server in my workplace ? Should I really re-organize years of storage and work in my office for being able to use snap ? A too high price to pay, for the moment.
    4. I - we all - totally agree about the benefits of snap for developers. But the loss of comfort and flexibility for end user is eventually a no-go option.
    5. I clearly understand why snap is a safety progress on server and IoT but in my « human » usage snap is just restricting how I use my data and computer.
  45. Dec 2020
  46. Nov 2020
    1. There was a major refactoring in the resolver (https://github.com/webpack/enhanced-resolve). This means the resolving option were changed too. Mostly simplification and changes that make it more unlikely to configure it incorrectly.
    1. How many times have you heard the cliché, for example, read between the lines? It turns out, the key to reading between the lines is actually to write between the lines. Once you start, you'll discover a whole new reading experience, elevated from that of a one-sided lecture to a two-sided conversation.

      reading as a conversation between myself and the text.

    1. I encounter this problem in all of my Svelte projects- feels like I'm missing something. Fighting it with absolute positioning usually forces me to re-write a lot of CSS multiple times. Is there is a better way to solve this that I've overlooked?
    1. {#key} was introduced in Svelte v3.28, before that you needed to use a keyed {#each} block with only one item When the key changes, svelte removes the component and adds a new one, therefor triggering the transition.
    1. Svelte's advantage here is that it indicates the need for an update at the place where the associated data is updated, instead of at each place the data is used. Then each template expression of reactive statement is able to check very quickly if it needs to rerender or not.
    2. Svelte slots are much easier to use and reason about than Angular transclude, especially in cases where you don't want an extra wrapper element around the slot content.
    1. If your Svelte components contain <style> tags, by default the compiler will add JavaScript that injects those styles into the page when the component is rendered. That's not ideal, because it adds weight to your JavaScript, prevents styles from being fetched in parallel with your code, and can even cause CSP violations. A better option is to extract the CSS into a separate file. Using the emitCss option as shown below would cause a virtual CSS file to be emitted for each Svelte component. The resulting file is then imported by the component, thus following the standard Webpack compilation flow.
    1. When you’re implementing a bad plan yourself, instead of having a mentor bail you out by fixing it, a few really useful things happen:You learn many more details about why it was a bad idea. If someone else tells you your plan is bad, they’ll probably list the top two or three reasons. By actually following through, you’ll also get to learn reasons 4–1,217.You spend about 100x more time thinking about how you’ll avoid ever making that type of mistake again, i.e., digesting what you’ve learned and integrating it into your overall decision-making.By watching my mistakes and successes play out well or badly over the course of months, I was able to build much more detailed, precise models about what does and doesn’t matter for long-term codebase health. Eventually, that let me make architectural decisions with much more conviction.

      There's a benefit to embarking on a challenge without a more experienced authority to bail you out.

      • You learn many more details about why it's a bad idea.
      • The lessons you learn in terms of how to avoid the mistakes you made stick with you longer

      (I would add that the experience is more visceral, it activates more modalities in your brain, and you remember it much more clearly.)

      These types of experiences result in what the author calls more "detailed, precise models". For me they result in a sort of intuition.

  47. Oct 2020
    1. Instead of this, you can use a File type variable.
    2. Previously, a common pattern was to read the value of a CI variable, save it in a file, and then use that file in your script:
    1. In the software industry we use "dependency" to refer to the relationship between two objects. We say "looking for dependents" for relationships to dependent things and "looking for dependencies" for relationships to prerequisite things, so it gets that connotation, but the literal meaning is the relationship itself, not the object. Finding a better word is exactly the point of the question
    1. To escape from the chaos, we will need new norms of behavior that incline us away from gossip.

      To balance out this gossip-driven world, Arnold Kling argues we need new norms of behavior (I would argue perhaps we need new mechanisms), to incline us away from gossip.

    1. You might think something like “don’t request the same resource thousands of times a day, especially when it explicitly tells you it should be considered fresh for 90 days” would be obvious, but unfortunately it seems not.