1,375 Matching Annotations
  1. Oct 2020
    1. Domain-driven design separates the model layer “M” of MVC into an application, domain and infrastructure layer. The infrastructure layer is used to retrieve and store data. The domain layer is where the business knowledge or expertise is. The application layer is responsible for coordinating the infrastructure and domain layers to make a useful application. Typically, it would use the infrastructure to obtain the data, consult the domain to see what should be done, and then use the infrastructure again to achieve the results.

      Domain Driven Design separates the the Model in the MVC architecture into an application layer, an infrastructure layer and a domain layer.

      The business logic lives in the domain layer. The infrastructure layer is used to retrieve and store data. The application layer is responsible for coordinating between the domain and infrastructure layer.

  2. Sep 2020
    1. En concreto, el software libre implica que los usuarios tienen las cuatro libertades esenciales: (0) ejecutar el programa, (1) estudiar y modificar el código fuente del programa, (2) redistribuir copias exactas y (3) distribuir versiones modificadas.

      Estas son las cuatro libertades del sl

    1. I took the same approach with _layout.svelte and not just for the svelte-apollo client. Except I put all of that setup into another module (setup.js) and imported from _layout. I just couldn't stomach having all that code actually in my _layout file. It's for layout, supposedly, but it's the only component that is a parent to the whole app.
    2. I got this working by using _layout.svelte as the point to initialise and set the Client we can then use getClient in each route that uses this layout.
    1. If you need to call the function repeatedly, this is much, much faster than using eval.
    2. Developing software is usually easier if you break your project into smaller separate pieces, since that often removes unexpected interactions and dramatically reduces the complexity of the problems you'll need to solve
    1. I've committed to using Svelte, so I want to see it become highly adopted and not die or lose steam. For that, I believe we need to build up the ecosystem. Shared components, actions, transitions, etc. which make it easier for ourselves and others to build apps. I feel this will help Svelte continue to grow and will make it a better tool for our jobs. I see actions as one of the needed pieces to make this happen.
    2. I think hooks will be beneficial to the Svelte ecosystem, making sharing code for Svelte apps that solve common problems easier.
    1. Svelte started with no decoupling anywhere, with everything available at compile-time. Then <:Component> introduced separation at the component level -- but they're still coupled at properties. The spread feature would fill that gap. I see it as an intentional separation as opposed to an accidental shot at static analysis.
    2. I have no familiarity with Svelte internals, so much of your talk about what they would do eludes me. I'm just concerned with developer ergonomics
    1. Modern view libraries like React allow teams to build and maintain these components more easily than ever before, but it is still extraordinarily difficult to do so in a fully accessible way with interactions that work across many types of devices.
    1. Forwarding events from the native element through the wrapper element comes with a cost, so to avoid adding extra event handlers only a few are forwarded. For all elements except <br> and <hr>, on:focus, on:blur, on:keypress, and on:click are forwarded. For audio and video, on:pause and on:play are also forwarded.
    1. ¿Qué opinas?

      Es algo que siempre me cuesta trabajo, pero no sabía que es una cuestión donde hay posiciones y desacuerdos; la pensé como buena/mala práctica jaja. A mí me parece raro que la configuración se guarde en el mismo lenguaje de programación,si el usuario no es una persona que desarrolla software, que conozca el lenguaje o que le interese ver más allá de una interfaz de usuario. En esos casos un archivo de esos, hasta XML, me parece como una buena zona de intercambio, o como se llame, entre lo que el usuario configura y la manera en como esta se lleva acabo. Aunque luego también uno cae en tener demasiados archivos de configuración por todos lados jajaj. Pero ese es un caso entre muchos, lo que rescato es la idea de no poner pasos extra para el uso de un programa. Por ahí va la idea de tratar de tener una zona de intercambio entre distintas maneras de hacer una publicación y una interfaz de escritura que acerque al escritor promedio a las tecnologías de publicación automatizada y multiformato, muy comunes entre personas dedicadas al software.

    1. A small group of computer illiterate politicians, driven by fear and images of dying people have thrown the United Kingdom into chaos. They did this on the evidence of a thirteen year old computer programme written in the C language that has no comments, and that no one has seen or audited to ensure its basic assumptions are correct. This tragic event, which has cost the United Kingdom billions, is a perfect example of why critical software must be open source and open to peer review before it is accepted for any purpose where human life is at stake.
    1. Medical Software Development: Benefits and Implementation Strategy

      Read this guide by Cleveroad to learn more about medical software development.

    1. In general, my focus has shifted from optimization to DX. Partly because Svelte does a lot of the heavy lifting. For things that can be optimized on a need-to basis, I would rarely sacrifice DX.
    2. The language should work for developers, not the other way around.
    1. If component authors were in the habit of expecting a style prop, and applying it to top-level elements, we could do the same thing like so

      Seems to be the idea proposed here: https://github.com/sveltejs/svelte/pull/4749

    2. This has the merit of simplicity and obviousness, but it's not particularly ergonomic: it signals that we don't consider component themeability to be a problem worth solving properly.
    1. There is interactive state as well. What about modals that come up because something is clicked? What is the active tab? Is this menu open or closed? What scroll position are they at? There are infinite permutations of this. Imagine a warning bar that shows up seven seconds after the user logs in to warn user about their expired credit card which contains a custom styled select menu which can be in an open or closed state, but only on the user settings page.
    2. Remember the timing thing? We might think of timing as one generic form of state. There are countless other things that could be state related. Is the user logged in or not? What plan are they on? Is their credit card expired thus showing some kind of special message? Do situational things like time/date/geolocation change state? What about real-time data? Stuff from an API?
    1. Slide 13:

      “No man ever steps in the same river twice, for it's not the same river and he's not the same man.”

      ― Heraclitus

      Of course it’s not the same river — the river, is, what? The water flowing past your feet? The sound that it makes? These things are different at every moment. Our idea of ‘the river’ doesn’t correspond to anything in the real world. Understanding this concept means getting closer to an understanding of reality itself — once you fully absorb the impact of this idea, it changes you, from a person who didn’t have that understanding into one who does.

      And as you bask in your newfound zen-like enlightenment, you discover an almost spiritually calming effect — the world as it is right now is the only thing that matters, not the state of the world as it was yesterday or as it will be tomorrow.


      Slide 39:

      “No man ever steps in the same river twice, for it's not the same river and he's not the same man.”

      ― Heraclitus

      And I think Heraclitus probably understood it all along. There’s a paradox contained in this statement. If the concept of identity over time is meaningless, then what do we mean by ‘it’ and ‘he’?

    2. It turns out that even the length of time an element has been mounted is an important piece of state that determines what pixels the user sees. And some of this state can’t simply be lifted into our application state.

      What this means is that our desire to express UI using pure functions is in direct conflict with the very nature of the DOM. It’s a great way to describe a state => pixels transformation — perfect for game rendering or generative art — but when we’re building apps on the web, the idea chafes against the reality of a stateful medium.

    1. And because it's real CSS, rather than some camelCased quotes-everywhere impostor, we can take advantage of the 'tweak in devtools, paste back into our source code' workflow, which I personally couldn't live without.
    2. Your styles are scoped to the component. No more leakage, no more unpredictable cascade.
    3. It's fashionable to dislike CSS. There are lots of reasons why that's the case, but it boils down to this: CSS is unpredictable. If you've never had the experience of tweaking a style rule and accidentally breaking some layout that you thought was completely unrelated — usually when you're trying to ship — then you're either new at this or you're a much better programmer than the rest of us.
    4. It gets worse when you're working on a team. No-one dares touch styles authored by someone else, because it's often unclear what they're doing, what markup they apply to, and what disasters will unfold if you remove them. The consequence of all this is the append-only stylesheet. There's no way of knowing which code can safely be removed, so it's common to undo some existing style with another, more specific style — even on relatively small projects.
    1. It’s become increasingly common to divide code into components, rather than by file type. React, for example, allows for the collocation of a components markup and JavaScript. In Svelte, this is taken one logical step further: the Javascript, markup and styling for a component can all exist together in a single `.svelte`​ file
    1. These creeping changes help us forget how important our privacy is and miss that it’s being eroded.

      This is important we are normalizing the fact that our privacy is being taken slowly, update after update

    1. Secure-by-default is a great approach, but this is not that. It's not even, we know what's best. It's clean up your act or you're out. You really should provide an opt-in to running with scissors. Maybe like config.opt_in_to_dynamic_routes_you_dumbass = true. 1 Pick your reaction
    2. I too would like to know more about the security concerns that are the motivation to remove these useful dynamic routing components. The only thing I can think off is someone who accidentally exposes a private method public, is there more? The dynamic routes are a great way to keep the routing.rb DRY and avoid unneeded dependencies between the routing and the controller files, it has been quintessential Rails magic since version 1.0, surely there must be more serious security concerns to give up such important benefits? What are they? Do we really need to completely remove this from the code base, when removing it from the default routes.rb already would get you most of the security benefit?
    3. I'm sure the security overlords have our best interest in mind and I'd be happy to change my opinion if someone can explain this tradeoff better. I know I can recreate the functionality for myself but I also like to keep in mind what's best for Rails. Just a hand wavy "we've had this for almost 10 years, but it might become an issue in the future so let's preventively eliminate it" does not seem a good enough reason to cut a feature that can make code much more DRY and elegant.
    1. Many changes, including bug fixes and documentation improvements can be implemented and reviewed via the normal GitHub pull request workflow. Some changes though are "substantial", and we ask that these be put through a bit of a design process and produce a consensus among the Yarn core team. The "RFC" (request for comments) process is intended to provide a consistent and controlled path for new features to enter the project.
  3. Aug 2020
    1. For example, to search for text occurrences, I used ack-grep. Later on, I found that there is a faster approach using ag. Then, there is an even faster alternative called ripgrep.
    1. There’s just so much noise small businesses tend to ignore. But in Indonesia, that isn’t the case…yet. The software landscape there is similar to the 1990s in the US. It’s harder to piggyback off of existing software infrastructure — whether it’s payments or platforms — but there’s also a lot of obvious opportunity in software that no one is going after. The same could be said about investing elsewhere in Southeast Asia or in LatAm or Africa. There are fewer startups to compete with for attention, and it’s less of a marketing game than building a software company in the US.

      The software industry in southeast asia, latam or africa is similar to the US in the 1990s and is more about building than about marketing.

    2. As economist Carlotta Perez describes, we are now in the Deployment Phase of the internet in the US — meaning, we are in-process of exhausting all use cases for internet technologies in the US. What has traditionally happened at the end of a technology phase is oversaturation of investment dollars chasing smaller returns. Valuations go up, returns go down, and investors lose their money. (Sound familiar?) On a company level, what this means is, if not careful, a lot of companies will end up wasting marketing dollars in this type of landscape. Companies in the 2020s, unlike in the 1990s, need to really be performance-marketing driven in order to compete. The end of last year certainly showed us many examples of well-funded companies that could not make the unit economics work. The software industry has become a marketing game.

      According to Carlotta Perez we are in the Deployment Phase of internet as a technology. Meaning we are exhausting the use cases for the internet and more money is chasing decreasing returns.

      As a result companies need to be more efficient with their marketing spend in the 2020s compared to before.

      The software industry has become a marketing game

    1. The RAT model sees software development as an off-line program-construction activity composed of these parts: defining, decomposing, estimating, implementing, assembling, and finishing

      This is what can lead to the 'there is only version 1.0' problem - and improvements / iterations fall to the sidelines.

      This can have a number of consequences

      • over designed / engineered
      • doing unnecessary work
      • lack of user feedback and ability to accommodate it
      • rigid / fragile architecture
    1. Digital work has significantly faster feedback loops for productivity. Software, quite simply, can produce and iterate new things at a daily if not hourly or minute basis.

      Software is uniquely suited for iterative development. This also creates faster feedback loops for productivity.

    1. Stallman has also stated that considering the practical advantages of free software is like considering the practical advantages of not being handcuffed, in that it is not necessary for an individual to consider practical reasons in order to realize that being handcuffed is undesirable in itself.
    2. Free software thus differs from: proprietary software, such as Microsoft Office, Google Docs, Sheets, and Slides or iWork from Apple. Users cannot study, change, and share their source code. freeware, which is a category of proprietary software that does not require payment for basic use.
    1. GitLab is moving all development for both GitLab Community Edition and Enterprise Edition into a single codebase. The current gitlab-ce repository will become a read-only mirror, without any proprietary code. All development is moved to the current gitlab-ee repository, which we will rename to just gitlab in the coming weeks. As part of this migration, issues will be moved to the current gitlab-ee project.
    2. How does the licensing work in this new setup? Everything in the ee/ directory is proprietary. Everything else is free and open source software. If your merge request does not change anything in the ee/ directory, the process of contributing changes is the same as when using the gitlab-ce repository.
    1. We've introduced new ways to leverage tags to find the games you'll love. Tags now show a preview of how many results will be returned, making it easier to see which are most relevant to your search. By popular demand, it's also possible to exclude tags from your search. If you're a fan of survival games, but not horror or zombies, you can now search to your exact taste.
    2. We've heard from you that it can be frustrating to browse through search results that include a lot of games you already know about. Our new filters allow you to hide games that are ignored, wishlisted, or already in your library. These controls can be enabled or disabled without reloading your search, and their settings are preserved between searches.
    3. Search now supports setting a maximum price, and a filter to only see special offers. If you're looking for a game in your budget, or hoping to discover just the right thing during a sale, this control will help you find the games you want.
  4. Jul 2020
    1. "Other office suites are focusing on the 'power user' which is a valuable market, for sure, but the real power and range for an open-source office suite alternative is the vast majority which is the 'rest of us. Sometimes we all forget how empowering open source is to the entire world."
    1. A growing number of platforms, vendors, and partners support the AMP Project by providing custom components or offering integration with AMP pages within their platforms.

      I guess AMP is actually open-source software, but it still feels like it's something non-standard. I guess it's just an alternative open standard to the "main" web open standards.

    1. Building blocks that ensure performance It takes a lot of time and effort to build a great website. AMP components are already optimized for the best performance.
    1. If you have worked with emails before, the idea of placing a script into an email may set off alarm bells in your head! Rest assured, email providers who support AMP emails enforce fierce security checks that only allow vetted AMP scripts to run in their clients. This enables dynamic and interactive features to run directly in the recipients mailboxes with no security vulnerabilities! Read more about the required markup for AMP Emails here.
    1. It’s also been a year where we’ve had to acknowledge that we have reached the ideal of what we can achieve as a consulting firm in our current configuration, and — more importantly — that we don’t wish to transform the organization into something larger. As with most things that bring joy, the kind we experience within the confines our our tight-knit company are particularly problematic to scale — especially when faced with impending remote-working realities — so we’re opting to go the “love you and leave you” route instead.
    1. TLA+ is a high-level language for modeling programs and systems--especially concurrent and distributed ones.

      Need to look more into TLA+ and formal verification with regards to software development.

    1. See https://choosealicense.com/ for tl;dr Please, please add a license. The fact none is listed makes using this software a legal quagmire. Currently it is not legal to use this code or its derivatives in any useful software. I may be mistaken but hopefully this is not the intended effect. Currently no license is mentioned anywhere, what makes this code fully copyrighted, like any other creative work. It limits usefulness of this project - and I hope that it is unintentional. For example it seems that it would solve my problem of profiling hilariously slow rspec tests (2036.33 seconds ./spec/word_processor_spec.rb:43), in current situation I would be unable to legally publish project that would use this solution. Obviously, please do not release it under any license if you are not the author (that would be even worse legal quagmire)
    1. Great news, right?

      My first annotation! This is a great platform. Love what you are doing! Anyone knows similar websites to this one that talks about software development?

  5. Jun 2020
    1. For example, if error messages in two narrowly defined classes behave in the same way, the classes can be easily combined. But if some messages in a broad class behave differently, every object in the class must be examined before the class can be split. This illustrates the principle that "splits can be lumped more easily than lumps can be split".
    1. Prefactoring is the application of experience to the creation of new software systems. Its relationship to its namesake refactoring is that lessons learned from refactoring are part of that experience.
    1. An Idiom is a low-level pattern specific to a programming language. An idiom describes how to implement particular aspects of components or the relationships between them using the features of the given language.
    2. A Design Pattern provides a scheme for refining the subsystems or components of a software system, or the relationships between them. It describes a commonly recurring structure of communicating components that solves a general design problem within a particular context.
    3. Building blocks are what you use: patterns can tell you how you use them, when, why, and what trade-offs you have to make in doing so.
    4. patterns are considered to be a way of putting building blocks into context
    5. A "pattern" has been defined as: "an idea that has been useful in one practical context and will probably be useful in others"
    1. uses a pre-clone step to seed the project with a recent archive of the repository. This is done for several reasons: It speeds up builds because a 800 MB download only takes seconds, as opposed to a full Git clone.
    1. "You wanted open source privacy-preserving Bluetooth contact tracing code? #DP3T software development kits/calibration apps for iOS and Android, and backend server, now on GitHub. iOS/Android apps with nice interface to follow." Michael Veale on Twitter (see context)

    1. Deadlocks are a classic problem in transactional databases, but they are not dangerous unless they are so frequent that you cannot run certain transactions at all. Normally, you must write your applications so that they are always prepared to re-issue a transaction if it gets rolled back because of a deadlock.
  6. May 2020
    1. The overall software architecture is actioning years of developers experiences through Uncle Bob's Clean Architecture. Thanks to Lerna and Yarn workspaces, GanttLab now comes with the entities, use-cases and gateways packages that are used by the adapter-webapp making up the web application on https://app.ganttlab.com.
    1. This starter takes advantage of Typescript and Emotion. This is a personal choice, and I'd encourage you to give it a shot. If you're interested in using plain ES6 and regular scss styling, see release v1 of this library.
    1. The Journal was a primitive hypertext-based groupware program, which can be seen as a predecessor (if not the direct ancestor) of all contemporary server software that supports collaborative document creation (like wikis). It was used by ARC members to discuss, debate, and refine concepts in the same way that wikis are being used today.
    1. Hey there. We see you’ve been busy reading, which is fantastic, so we’ve promoted you up a trust level! We’re really glad you’re spending time with us and we’d love to know more about you. Take a moment to fill out your profile, or feel free to start a new topic.
    1. Code Owners allows for a version controlled single source of truth file outlining the exact GitLab users or groups that own certain files or paths in a repository.
    1. The folks at Netlify created Netlify CMS to fill a gap in the static site generation pipeline. There were some great proprietary headless CMS options, but no real contenders that were open source and extensible—that could turn into a community-built ecosystem like WordPress or Drupal. For that reason, Netlify CMS is made to be community-driven, and has never been locked to the Netlify platform (despite the name).

      Kind of an unfortunate name...

    1. after nearly 10 years of continuous improvement

      Not necessarily a good or favorable thing. It might actually be preferable to pick a younger software product that doesn't have the baggage of previous architectural decisions to slow them down. Newer projects can benefit from both (1) the mistakes of previously-originated projects and (2) the knowledge of what technologies/paradigms are popular today; they may therefore be more agile and better able to create something that fits with the current state of the art, as opposite to the state of the art from 10 years ago (which, as we all know, was much different: before the popularity of GraphQL, React, headless CMS, for example).

      Older projects may have more technical debt and have more legacy technologies/paradigms/integrations/decisions that they now have the burden of supporting.

    2. open source

      So open-source that there is no link to the source code and a web search for this product did not reveal where the source code is hosted.

      They're obviously using this term merely as a marketing term without respect for the actual meaning/principles of open source.

    1. Traditional CMSes are "coupled", which means that the CMS also takes care of the presentation layer responsible for delivering the content to the clients. The content and the presentation are closely interlinked. Typically, content managers create and manage their content through tools like WYSIWYG editors. The CMS then delivers the content according to the front-end delivery layer built into the CMS. Typically, a traditional CMS supports your websites but not much else.
    1. Most traditional (monolithic) CMS systems are “coupled”, meaning that the content management application (CMA) and the content delivery application (CDA) come together in a single application, making back-end user tools, content editing and taxonomy, website design, and templates inseparable. Coupled systems are useful for blogs and basic websites as everything can be managed in one place. But this means that the CMS code is tightly connected to any custom code and templates, which means developers have to spend more time on installations, customizations, upgrades, hotfixes, etc. and they cannot easily move their code to another CMS.
    1. RAND terms exclude intangible goods which the producer may decide to distribute at no cost and where third parties may make further copies. Take for example a software package that is distributed at no cost and to which the developer wants to add support for a video format which requires a patent licence. If there is a licence which requires a tiny per-copy fee, the software project will not be able to avail of the licence. The licence may be called "(F)RAND", but the modalities discriminate against a whole category of intangible goods such as free software[11] and freeware.[12]
    2. The Free Software Foundation suggests the term "uniform fee only" (UFO) to reflect that such "(F)RAND" licenses are inherently discriminatory.
    1. The other pressing issue is that users have lost the right to run private extensions in the release version of Firefox, without needing to hand over their source code to Mozilla.
    2. What I don't like is how they've killed so many useful extensions without any sane method of overriding their decisions.
    3. I know, you don't trust Mozilla but do you also not trust the developer? I absolutely do! That is the whole point of this discussion. Mozilla doesn't trust S3.Translator or jeremiahlee but I do. They blocked page-translator for pedantic reasons. Which is why I want the option to override their decision to specifically install few extensions that I'm okay with.
    4. honestly it looks a lot more like typical tech company anti-freedomism
    5. What's terrible and dangerous is a faceless organization deciding to arbitrarily and silently control what I can and can not do with my browser on my computer. Orwell is screaming in his grave right now. This is no different than Mozilla deciding I don't get to visit Tulsi Gabbard's webpage because they don't like her politics, or I don't get to order car parts off amazon because they don't like hyundai, or I don't get to download mods for minecraft, or talk to certain people on facebook.
    6. They don't have to host the extension on their website, but it's absolutely and utterly unacceptable for them to interfere with me choosing to come to github and install it.
    7. It's no less beyond the pale than when apple actively sabotaged people's devices to force them to upgrade or amazon deleted people's already bought and downloaded ebooks. It's completely unacceptable and frankly should fall under consumer rights laws.
    1. estadísticas

      Es absurdo que un organismo público sólo publique estos datos "abiertos" en formato de imagen (sí, "imagen" de una tabla) o PDF. Ignorancia o mala intención? Acá publico la data cruda extraída con el excelente software libre Tabula, el 05/may/20.

  7. Apr 2020
    1. Becouse of CanCan, StateMachine and others I deside to create OpenSource organization to maintain gems. People disappear, lose their passion about coding, get new interests, families, children. But if us many we can support gems much longer. I dont pretend to be an expierenced ruby developer, but I can do administarative work: managing teams, members, approve simple pool-requests. If you think it good idea and want to support some inactive gems, not life time, maybe just a little - welcome to organization.
    2. There's actually discussion among the rubygems team about a process for putting gems "up for adoption" that you might be interested in: http://www.benjaminfleischer.com/2014/08/17/rubygems-adoption-center/
    1. Isomorphism itself is not purely a JavaScript thing. You can also build an isomorphic application in Dart or even use two different languages/stacks to render the same result. In fact there are many “isomorphic” applications which render a full HTML document on the server using PHP, Java or Ruby and use JavaScript and AJAX to create a rich user experience in the browser. This was the way things were done before the rise of Single Page Applications. The only real reason isomorphism is tied to JavaScript is because it’s the only language widely supported in the browser, and so at least part of the whole thing will use JavaScript. There’s no such thing as Isomorphic JavaScript, only isomorphic applications.
    1. Our hope is that once a formal specification for these extensions is settled, this patchset can be used as a base to upstream the changes in the original project.

      What does "can be used as a base to upstream the changes in the original project" mean here?

    1. This repository contains the parts of the RubyMotion product that are opensource. It does not contain the full product, which can be purchased at www.rubymotion.com.
    1. Will Fithian en Twitter: “The authors said by email that they used a built-in Stata function and aren’t sure themselves how the software used the input weights. I suspect they misapplied that function (too complicated to tweet why) but I don’t know Stata well enough to be sure; it seems neither do they.” / Twitter. (n.d.). Twitter. Retrieved April 27, 2020, from https://twitter.com/wfithian/status/1252692362037362693

    1. Although we don’t anticipate publishing source code for manipulating 1Password keychains, others, unaffiliated with AgileBits, have done so.

      May not technically be an open file format, but meets some of the criteria for one:

      • [?] The format is based on an underlying open standard
      • [⍻] The format is developed through a publicly visible, community driven process
      • [⍻] The format is affirmed and maintained by a vendor-independent standards organization
      • [✓] The format is fully documented and publicly available
  8. community.snowsoftware.com community.snowsoftware.com
    1. a more intuitive modern community that will be better synced with our Knowledge Base and other support materials
    1. 1Password wasn’t built in a vacuum. It was developed on top of open standards that anyone with the right skills can investigate, implement, and improve. Open tools are trusted, proven, and constantly getting better. Here’s how 1Password respects the principles behind the open tools on which it relies:

      I found it ironic that this proprietary software that I have avoided using because it is proprietary software is touting the importance of open tools.

    1. Changing things doesn't necessarily imply improving them and it's improvement we should strive for, otherwise change is pointless.

      I'd even go further and argue why change things at all in first place ? And that's why Open Source Software is better in this debate too. Don't change your software just for the sake of change.

    1. In the early 1990s, the creators of Netscape apparently built a function that enabled each web page to be annotated by those visiting it, as a way for viewers to discuss the page’s content. But according to a [1] produced in 2013 by a nonprofit called [Hypothesis][2], the feature was turned off.
    1. The result, all too often, is that we decide (often unconsciously) that the sweeping change just isn't worth it, and leave the undesirable pattern untouched for future versions of ourselves and others to grumble about, while the pattern grows more and more endemic to the code base.
    2. Part of why most code -- and most software -- sucks so much is that making sweeping changes is hard.