547 Matching Annotations
  1. Last 7 days
    1. According to a Pew study from last year, only 20 percent of K-12 students in America study a foreign language (compared with an average of 92 percent in Europe), and only 10 states and the District of Columbia make foreign-language learning a high school graduation requirement.

      use of statistics

    2. According to the Modern Language Association, enrollment in college-level foreign-language courses dropped 9.2 percent from 2013 to 2016.

      Use of statistics

  2. May 2022
    1. To run it you need node.js installed, and from the command line run npm install once inside that directory to install the library dependencies. Then node run.js <yourExportedDirectory>

      Why require Node?

      Everything that this script does could be better accomplished (read: be made more accessible to a wider audience) if it weren't implemented by programming against NodeJS's non-standard APIs and it were meant to run in the browser instead.

    1. Here’s a super rough proof of concept Replit tiny library.

      There's nothing about this that requires Replit (or NodeJS, for that matter). The whole thing can be achieved by writing a program to run on the script engine that everyone already has access to—the one in the browser. No servers required.

  3. Apr 2022
    1. Let's imagine your project talks to databases, supports several, and has adapters for each one of them. Those adapters may have top-level require calls that load their respective drivers: # my_gem/db_adapters/postgresql.rb require "pg" but you don't want your users to install them all, only the one they are going to use.
    2. There are project layouts that put implementation files and test files together.
    3. Let's suppose that your gem decorates something in Kernel:
    1. if Rails.application.config.reloading_enabled? Rails.autoloaders.main.on_unload("Country") do |klass, _abspath| klass.expire_redis_cache end end
    2. If your application decorates classes or modules from an engine,
    3. Some projects want something like app/api/base.rb to define API::Base, and add app to the autoload paths to accomplish that.
    4. By default, app/models/concerns belongs to the autoload paths and therefore it is assumed to be a root directory. So, by default, app/models/concerns/foo.rb should define Foo, not Concerns::Foo.
  4. www.hey.com www.hey.com
    1. It feels great to get an email from someone you care about. Or a newsletter you enjoy. Or an update from a service you like. That’s how email used to feel all the time.
    2. Now email feels like a chore, rather than a joy. Something you fall behind on. Something you clear out, not cherish. Rather than delight in it, you deal with it.
    3. HEY’s fresh approach transforms email into something you want to use, not something you’re forced to deal with.
    1. I am not looking for model based after commits on update/create/etc, I want to be able to dynamically define a block that will be executed only if the current (top-most) transaction passes:
    2. This would work if your transaction only wraps a single model's save operation. I need to wrap at least Node + Version + Attachment

      looking for a callback that you can register to happen after current transaction is committed, not just after_commit of model -- though actually, that might fire precisely when current transaction is committed, too (except that it might only get triggered for nested transactions, not the top-most transaction), so it could maybe go there ... but I think the problem is just that it doesn't belong there, because it's not specific to the model...

      I guess the OP said it best:

      I am not looking for model based after commits on update/create/etc, I want to be able to dynamically define a block that will be executed only if the current (top-most) transaction passes:

    1. You want the front page to show a few hundred posts along with the top three comments on each post. You’re planning on being very popular, so the front page will need to be very fast. How do you fetch that data efficiently from postgresql using Activerecord?
    2. Making one Comment query per Post is too expensive; it’s N+1 queries (one to fetch the posts, N to fetch the comments). You could use includes to preload all the comments for all the posts, but that requires hydrating hundreds of thousands of records, even though you only need a few hundred for your front page. What you want is some kind of GROUP BY with a LIMIT on each group — but that doesn’t exist, either in Activerecord nor even in postgres. Postgres has a different solution for this problem: the LATERAL JOIN.
    1. 3. Who are you annotating with? Learning usually needs a certain degree of protection, a safe space. Groups can provide that, but public space often less so. In Hypothes.is who are you annotating with? Everybody? Specific groups of learners? Just yourself and one or two others? All of that, depending on the text you’re annotating? How granular is your control over the sharing with groups, so that you can choose your level of learning safety?

      This is a great question and I ask it frequently with many different answers.

      I've not seen specific numbers, but I suspect that the majority of Hypothes.is users are annotating in small private groups/classes using their learning management system (LMS) integrations through their university. As a result, using it and hoping for a big social experience is going to be discouraging for most.

      Of course this doesn't mean that no one is out there. After all, here you are following my RSS feed of annotations and asking these questions!

      I'd say that 95+% or more of my annotations are ultimately for my own learning and ends. If others stumble upon them and find them interesting, then great! But I'm not really here for them.

      As more people have begun using Hypothes.is over the past few years I have slowly but surely run into people hiding in the margins of texts and quietly interacted with them and begun to know some of them. Often they're also on Twitter or have their own websites too which only adds to the social glue. It has been one of the slowest social media experiences I've ever had (even in comparison to old school blogging where discovery is much higher in general use). There has been a small uptick (anecdotally) in Hypothes.is use by some in the note taking application space (Obsidian, Roam Research, Logseq, etc.), so I've seen some of them from time to time.

      I can only think of one time in the last five or so years in which I happened to be "in a text" and a total stranger was coincidentally reading and annotating at the same time. There have been a few times I've specifically been in a shared text with a small group annotating simultaneously. Other than this it's all been asynchronous experiences.

      There are a few people working at some of the social side of Hypothes.is if you're searching for it, though even their Hypothes.is presences may seem as sparse as your own at present @tonz.

      Some examples:

      @peterhagen Has built an alternate interface for the main Hypothes.is feed that adds some additional discovery dimensions you might find interesting. It highlights some frequent annotators and provide a more visual feed of what's happening on the public Hypothes.is timeline as well as data from HackerNews.

      @flancian maintains anagora.org, which is like a planet of wikis and related applications, where he keeps a list of annotations on Hypothes.is by members of the collective at https://anagora.org/latest

      @tomcritchlow has experimented with using Hypothes.is as a "traditional" comments section on his personal website.

      @remikalir has a nice little tool https://crowdlaaers.org/ for looking at documents with lots of annotations.

      Right now, I'm also in an Obsidian-based book club run by Dan Allosso in which some of us are actively annotating the two books using Hypothes.is and dovetailing some of this with activity in a shared Obsidian vault. see: https://boffosocko.com/2022/03/24/55803196/. While there is a small private group for our annotations a few of us are still annotating the books in public. Perhaps if I had a group of people who were heavily interested in keeping a group going on a regular basis, I might find the value in it, but until then public is better and I'm more likely to come across and see more of what's happening out there.

      I've got a collection of odd Hypothes.is related quirks, off label use cases, and experiments: https://boffosocko.com/tag/hypothes.is/ including a list of those I frequently follow: https://boffosocko.com/about/following/#Hypothesis%20Feeds

      Like good annotations and notes, you've got to put some work into finding the social portion what's happening in this fun little space. My best recommendation to find your "tribe" is to do some targeted tag searches in their search box to see who's annotating things in which you're interested.

    2. Tools like Hypothes.is are designed as silos to ensure that its social features work.

      As open source as Hypothes.is is, I do wish that it had some additional open IndieWeb building blocks to keep it from being a silo.

      Sadly, I've never had the time, nor the technical expertise and facility with their code to implement the pieces, but I have outlined a bit of what might be done to make the platform a bit less silo-like: https://boffosocko.com/2019/04/08/ideas-for-indieweb-ifying-hypothes-is/

      Fortunately it is open enough for me in other respects that I can bend portions of it to my will and needs beyond what it offers a la carte.

    1. https://hypothes.is/a/krnfMl0pEeyvKGMTU02-Lw

      stuhlmueller Dec 14, 2021

      Elicit co-founder here - feel free to leave feedback through hypothesis, we're reading it. :)

      Example in the wild of a company using Hypothes.is to elicit (pun intended) feedback on their product.

    1. Let's say the user is in the process of selecting some files. The names don't indicate anything. So she has to listen and select.
    1. When a web page is viewed on a screen with a large physical size (assuming a maximised browser window), the author might wish to include some less relevant parts surrounding the critical part of the image. When the same web page is viewed on a screen with a small physical size, the author might wish to show only the critical part of the image.
  5. Mar 2022
    1. This has cropped up in particular when trying to create a copy of a store object when the store changes (which is a common use case with forms where you don't want to mutate the global store until the form is saved).

      Exactly! This is more or less the same kind of use case I tend to have: intentionally having/wanting a stale/out-of-date copy of a (reactive) object.

    1. This is particularly useful in cases where you want to separate your data migrations from your schema migrations or where you have multiple steps in your migration process that must have other steps invoked throughout.
    1. If you need to ensure migrations run in a certain order with regular db:migrate, set up Outrigger.ordered. It can be a hash or a proc that takes a tag; either way it needs to return a sortable value: Outrigger.ordered = { predeploy: -1, postdeploy: 1 } This will run predeploys, untagged migrations (implicitly 0), and then postdeploy migrations.
    2. class PreDeployMigration < ActiveRecord::Migration tag :predeploy end
    3. This is especially useful for zero downtime deploys to Production environments.
    1. En somme, les études sur la communication des élèves atteints d’autisme permettent de mettre en évidence l’importance d’un contexte riche en stimulations appropriées (sons et images), mais également une évidente « stabilité » de l’information à décoder, le suivi des émotions des personnages, le rôle de l’imitation dans les apprentissages. Ces résultats encouragent donc l’usage d’outils informatiques adéquats pour améliorer la communication sociale chez les enfants atteints d’autisme.

      L'association de deux sujets qui n'ont pas de corrélation vérifiéé, revient dans la conclusion en contradiction avec la conclusion de l'étude de Ramdoss, S et al.

    2. Nous allons montrer par une courte analyse de quelques études l’impact du travail éducatif informatisé dans l’apprentissage de la communication sociale chez des enfants atteints d’autisme.

      En contradiction avec l'hypothèse :

      Results suggest that CBI should not yet be considered a researched-based approach to teaching communication skills to individuals with ASD. However, CBI does seem a promising practice that warrants future research. Les résultats suggèrent que le CBI ne devrait pas encore être considéré comme un approche fondée sur la recherche pour enseigner les compétences en communication aux personnes ayant Troubles du Spectre Autistique. Cependant, le CBI semble être une pratique prometteuse qui justifie des recherches futures.

    1. Google Hangouts

      Students could rehearse with each other when not able to physically meet.

    2. Glogster Edu

      Students could create a multimedia poster about their favorite band/artist.

    3. Voki

      I could have students utilize this tool by having them create a spoken word song to which they do not have to be seen.

    4. Google Sites

      I could have students create a website as if they were the website designer for their favorite musician and had to put up information such as new album release, tour dates, etc.

    5. Adobe Spark in the Classroom

      A program like this could be utilized in my class where I have students record a small music snippet and add graphics to it.



  6. Feb 2022
    1. Currently you need to have Node and npm installed on your machine once this is done you can use it with the following command

      There's no real reason why Node/NPM should be required for this. You could dump the logic into a bookworms.html file and run it in the JS runtime that's already on someone's machine (their Web browser)...

    1. This is especially useful for UI library components, as it is generally unknown which events will be required from them for all desired use cases. For example, if a Button component only forwards a click event, then no use case that requires the mouseover or the keypress event can be used with it.
    1. This is a widespread mistake among those who think that a sexy note-taking app like Roam will suddenly free their minds, or that they can train themselves into geniuses with enough spaced repetition, or that they can build a zettelkasten capable of thinking original thoughts for them.

      Thinking that the tool will solve a particular problem without knowing what the tool does or how to use it properly will surely set one up for failure. You can use a screwdriver like a hammer, but your results won't be as good as using a hammer and using it properly.

    1. “ Reports of the destruction of books in transport from Lilienfeld in 1789 are well known. At that time, books were used by the coachmen to patch bad roads. ”

      In the late 1700's Vienna there were reports of coachmen using books to patch bad roads.




  7. Jan 2022
    1. Companies should not assume they can release a product without thinking about its unintended uses and then undo the harm that results. This often doesn’t work.Some technology

      Many products, including technology and social media products, can have a multitude of uses including unintended off-label uses. This can lead to harmful and deleterious effects on large groups of people.

      On the other hand, some users may also see great benefits from off-label use cases. As an example, despite it being a vector for attacks and abuse, some marginalized groups have benefited from social media through increased visibility, the ability to create community, and expand their digital access.

      As a result it's important to look at how a product is being used in the marketplace and change or modify it or create similar but different products to amplify the good and mitigate the bad.

    1. The server generating a 401 response MUST send a WWW-Authenticate header field (Section 4.1) containing at least one challenge applicable to the target resource.

      Meaning that 99% of the people use it are using it "wrong" because they're not using it for HTTP authentication and don't send a WWW-Authenticate header field with their 401 response?

      Hmm. That's a tough one. On the one hand, the spec does say they must send it.

      Initial opinion

      But on the other hand, one could argue that that requirement only applies if using 401 for HTTP authentication. And that saying it's wrong to do so (as they claim at https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses/14713094#14713094 and https://hyp.is/JA45zHotEeybDdM_In4frQ/stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses) is having a too strict/narrow/literal interpretation.

      HTTP is meant to be used widely in many very different uses and contexts, most of which do not use this very specific HTTP authentication scheme; my opinion is that they shouldn't be denied from using it, just because they don't have anything useful WWW-Authenticate header field. (Or (which is also fine with me), just put something "emptyish" in the field, like "Unused". Unless that would trigger a Basic auth modal in the browser, in which case we shouldn't, for practical reasons.)

      Why shouldn't we be able to repurpose this same status code for uses that are still authentication, but just not HTTP authentication per se?

      Is it really wrong to repurpose this useful status code for other contexts, like cookie-based app-defined authentication systems?

      I say that it's okay to repurpose/reuse 401 for any authentication system (that uses HTTP as a part of it, even though not using HTTP's own authentication system), as long as we try to maintain the same semantic as originally intended/described here. I think it's okay to use 401 as a response to a XHR request, and then have the client redirect to a login page, which provides a way to authenticate again (reattempt the authentication challenge), analogous to how it works for HTTP authentication.

      Revised opinion

      https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses/14713094#14713094 has made me change my mind and convinced me that...

      Authentication by schemes outside of (not defined by) RFC7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication should not use HTTP status 401, because 401 Unauthorized is only defined (by current RFCs) by RFC7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication, and has semantics and requirements (such as the requirement that "A server generating a 401 (Unauthorized) response MUST send a WWW-Authenticate header field containing at least one challenge.") that simply don't make sense or cannot be fulfilled if using a non-HTTP authentication scheme.

      403 Forbidden, on the other hand, is defined by the broader HTTP standard, in RFC7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content and RFC7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication.

      In conclusion, if you have your own roll-your-own login process and never use HTTP Authentication, 403 is always the proper response and 401 should never be used.

      Couldn't a custom auth system use WWW-Authenticate header?

      The question was asked:

      Doesn't RFC7235 provide for "roll-your-own" or alternate auth challenges? Why can't my app's login flow present its challenge in the form of a WWW-Authenticate header? Even if a browser doesn't support it, my React app can...

      And I would say sure, if you want (and if the browser doesn't automatically show a Basic auth modal in this case and thwart your plans).

      They might be on to something here with that question!

      But that should probably be the test of whether you can/should use 401: are you actually using WWW-Authenticate header?

      Indeed I found an example where it is used for OAuth2.

    1. Authentication by schemes outside of RFC2617 is not supported in HTTP status codes and are not considered when deciding whether to use 401 or 403.

      What does "are not considered when deciding whether to use 401 or 403" mean exactly? What exactly should not be considered, and what exactly should be considered instead? In other words, how did someone arrive at the conclusion that "if you have your own roll-your-own login process and never use HTTP Authentication, 403 is always the proper response and 401 should never be used."? Why is 403 okay to use for non-HTTP authentication, but not 401?

      Oh, I think I understand the difference now.

      They should have said:

      Authentication by schemes outside of (not defined by) RFC7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication should not use HTTP status 401, because 401 Unauthorized is only defined (by current RFCs) by RFC7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication, and has semantics and requirements (such as the requirement that "A server generating a 401 (Unauthorized) response MUST send a WWW-Authenticate header field containing at least one challenge.") that simply don't make sense or cannot be fulfilled if using a non-HTTP authentication scheme.

      403 Forbidden, on the other hand, is defined by the broader HTTP standard, in RFC7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content and RFC7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication.

      In conclusion, if you have your own roll-your-own login process and never use HTTP Authentication, 403 is always the proper response and 401 should never be used.

      See also my comments in https://hyp.is/p1iCnnowEeyUPl9PxO8BuQ/www.rfc-editor.org/rfc/rfc7235

    2. Meaning if you have your own roll-your-own login process and never use HTTP Authentication, 403 is always the proper response and 401 should never be used.
    3. If HTTP authentication is not in use and the service has a cookie-based authentication scheme as is the norm nowadays, then a 403 or a 404 should be returned.
    1. My case is that I have a component which takes an object as a prop. As the user changes the object's values, they can either Save or Cancel. So in the component I have two variables: value and valueUnsaved. It's similar to the example on my comment above. To avoid mutating the original object directly, I assign valueUnsaved as a deep clone of value. If value is changed outside of the component, valueUnsaved should be updated.
    1. Thunderbird provides the ability to archive messages - that is, to move them from the default folders to archive folders without deleting the messages altogether. This makes it easy to organize archives or move them to a backup device, and keep the Inbox clean. Messages can only be archived manually, not automatically.
  8. Dec 2021
  9. worrydream.com worrydream.com
    1. Bret Victor: email (9/3/04) Interface matters to me more than anything else, and it always has. I just never realized that. I've spent a lot of time over the years desperately trying to think of a "thing" to change the world. I now know why the search was fruitless -- things don't change the world. People change the world by using things. The focus must be on the "using", not the "thing". Now that I'm looking through the right end of the binoculars, I can see a lot more clearly, and there are projects and possibilities that genuinely interest me deeply.

      Specifically highlighting that the "focus must be on the 'using', not the 'thing'".

      This quote is very reminiscent of John M. Culkin's quote (often misattributed to McLuhan) "We shape our tools and thereafter they shape us."

      <small><cite class='h-cite via'> <span class='p-author h-card'>Linus Lee</span> in Towards a research community for better thinking tools | thesephist.com (<time class='dt-published'>12/01/2021 08:23:07</time>)</cite></small>

  10. Nov 2021
    1. For the Europeans the drums were a different device of communication. Mostly attack retreat and come to church.But how we use drums today. Send out a different communication. In the music industry. It is basically electronics from that producers use. That communicates we need to make more money for this artist or out of this artist. And on the dance floor it means hey let’s dance.Even when someone is knocking on the door. That is a sound like a drum too. It means I am here and after the door please. Or I’m a total stranger and you might not have to answer the door.Or your packages arrived.

    1. The negative indirect effects of additional land-use change may outweigh the positive direct effects on global climate and biodiversity, so that a large-scale switch to organic farming in the EU could possibly turn out to be a disservice to global sustainability.


    2. organic farming often requires more land than conventional farming for the same quantity of food output.

      land use

    1. Finally, I think Actions are great for animations, because you will definitely need to apply the same logic to many different elements. One of my favorite examples are FLIP animations, where a change in DOM position can be animated. For example shuffling a list of items. I will not dive deep into the topic in this article: I've written about some techniques in this article about FLIP animations in React and in this article about how to create spring animations with Web Animation API. Although they are not about Svelte, at the end of the day it all boils down to manipulating the HTML element directly. And Svelte Actions are a great place to do it.
    2. But you can get quite close to directly updating CSS with Actions!
    3. export function autofocus(node) { node.focus(); } That's it. This is a legitimate Svelte Action!
    1. Hieroglyphics the oldest form of alphabet. Using Pictures and symbols instead of letters. But the pictures and samples usually meant something else. And then they became letters.

  11. Oct 2021
    1. This function allows you to modify (or replace) a fetch request for an external resource that happens inside a load function that runs on the server (or during pre-rendering). For example, your load function might make a request to a public URL like https://api.yourapp.com when the user performs a client-side navigation to the respective page, but during SSR it might make sense to hit the API directly (bypassing whatever proxies and load balancers sit between it and the public internet).
    1. And on any given day, developing with Svelte and its reactive nature is simply a dream to use. You can tell Svelte to track state changes on practically anything using the $: directive. And it’s quite likely that your first reactive changes will produce all the expected UI results.
  12. Sep 2021
    1. From a media point of view, Genius was offensive for its initial underlying claim: that it was okay to take anyone’s content for zero compensation, so long as it “added transformative value” by tacking on a comment box where people could say it sucked.

      Hot take 🔥

  13. www.dynare.org www.dynare.org
    1. Ease of Use Write your model almost as you would on paper and Dynare will take care of the rest!
    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.

    1. One good use for /dev/tty is if you're trying to call an editor in a pipeline (e.g., with xargs). Since the standard input of xargs is some list of files rather than your terminal, just doing, e.g., | xargs emacs will screw up your terminal. Instead you can use | xargs sh -c 'emacs "$@" </dev/tty' emacs to connect the editor to your terminal even though the input of xargs is coming from elsewhere.
  14. Aug 2021
  15. Jul 2021
    1. It’s fun but when would we ever use things like this in actual code?When it’s well tested, commented, documented, and becomes an understood idiom of your code base.We focus so much on black magic and avoiding it that we rarely have a chance to enjoy any of the benefits. When used responsibly and when necessary, it gives a lot of power and expressiveness.
  16. Jun 2021
    1. for cpp_file in *.cpp; do gcc -c $$cpp_file & done; wait This gives much finer control than make -j.
    2. There is one very important reason for enabling job control to be useful inside scripts: the side-effect it has of placing background processes in their own process groups. This makes it much, much easier to send signels to them and their children with one simple command: kill -<signal> -$pgid. All other ways of dealing with signaling entire trees of processes either involve elaborate (sometimes even recursive) functions, which are often bugnests, or risk killing the parent in the process (no pun intended).
    3. You particular circumstances may or may not warrant a way different from what lhunath (and other users) deem "best practices".
    1. This page is currently in public beta mode. I'm am trying to get feedback from multiple people(including you) before I publish it. To facilitate the feedback submission, I have added a highlighting and commenting option. To use that, just select any text(for eg, double click on this: DOUBLE CLICK ME). When you get a login prompt, use this login details... Username: zettelkasten Password: notes If you have any corrections or suggestions, please select the text and add a comment using this system.

      This is pretty cool. I've not run into anyone using an open account on Hypothes.is to solicit anonymous feedback on an article before.

    1. Deferment is the delay of grazing to achieve a specific management objective (Society for Range Management 2004). Skovlin (1984) suggests that deferring use until the late season (fall), until restoration of habitat is ac-ceptable, offers a good measure of protection without great expense.
    1. The emphasis was made on a raw CDP protocol because Chrome allows you to do so many things that are barely supported by WebDriver because it should have consistent design with other browsers.

      compatibility: need for compatibility is limiting:

      • innovation
      • use of newer features
    1. These tests should only be used when: the functionality/component being tested is small the internal state of the objects/database needs to be tested it cannot be tested at a lower level
    1. Thanks, this was just what I was looking for! This is a perfect appropriate use of instance_eval. I do not understand the nay-sayers. If you already have your array in a variable, then sure, a.reduce(:+) / a.size.to_f is pretty reasonable. But if you want to "in line" find the mean of an array literal or an array that is returned from a function/expression — without duplicating the entire expression ([0,4,8].reduce(:+) / [0,4,8].length.to_f, for example, is abhorrent) or being required to assign to a local, then instance_eval option is a beautiful, elegant, idiomatic solution!!
    2. instance_eval is analogous to using tap, yield_self, … when you are dealing with a chain of method calls: do use it whenever it's appropriate and helpful! And in this case, I absolutely believe that it is.
    3. instance_eval lets you run the code while only specifying a once, so it can be chained with other commands. I.e. random_average = Array.new(10) { rand(10) }.instance_eval { reduce(:+) / size.to_f } instead of random = Array.new(10) { rand(10) }; random_average = random.reduce(:+) / random.size
  17. May 2021
    1. also it's can be helpful for geo deploying when your browser should get access to closest API by GeoDNS but server part can touch neighborhood server or same server.

      "geo deploy"

    1. Make it easier to manage people and control visibility. Give people different permissions depending on their group membership.
    2. Organize large projects. For large projects, subgroups makes it potentially easier to separate permissions on parts of the source code.
    1. Bill Withers

      Grace Jones covered the song - with a reggae-influenced arrangement - on her 1981 album Nightclubbing and subsequently released the song as a single.