19,634 Matching Annotations
  1. Nov 2023
    1. yeah - it is basically half the stuff you don't want autoloaded and half app/lib but it is not called app/lib because DHH does not want app/lib"
    2. The subdirectories in app have a name that describes their contents, but app/lib means nothing. So, app/models and app/lib are at different level of abstraction, and that feels wrong to me.
    3. It is also worth noting that lib/tasks typically has application-specific tasks, thus not fitting into the condition for lib. Which makes me question the criteria for lib
    4. I think the real question then becomes: Where do Ruby classes, who I can't find a meaningful folder in app
    5. I stand by what I said and I do not believe it is off-topic. Nevertheless, I realize it is your forum and if you want to silence and exclude people because something we say does not fit in your worldview, then I am certainly willing to accept this and remove myself from the forum. In the big picture, I will not be shut up or bullied and I think you owe me an apology as nothing I have said or done warrants your actions.
    6. Going by the intended purpose of lib/ ("pending extraction"), I think lib/assets should remain (as those are assets pending extraction).
    7. lib/ is intended to be for non-app specific library code that just happens to live in the app for now (usually pending extraction into open source or whatever).
    8. And if it's app specific, for some reason, then app/models is fine. I don't think the trade-off here is worth it
    9. Stuff like a generic PhoneNumberFormatter is exactly what lib/ is intended for.
    10. The criteria for code in lib is what @dhh said above: non-app specific library code that just happens to live in the app for now (usually pending extraction into open source or whatever)
    11. But I do question why lib and not something in app is the common suggestion for classes/modules who do not fall into the default set of folders (models, controllers, jobs, etc). Is it just because it's what we've been doing for so long? To me feels like we're trying to shoehorn the lib folder into further being a kitchen sink (now holding rake tasks and miscellaneous classes), rather than just saying "your Ruby classes/modules go somewhere in app because they're application code".
    12. If application code lives in app, then doesn't that imply that things in lib (such as PhoneNumberFormatter) are not application code? I think that's one of the reasons why your recommendation of app/lib felt right to me -- my classes feel like they belong in app somewhere.
    13. Yeah, I agree that lib (or app/lib
    14. (BTW, the app/models directory is there to organize the model layer. The model layer is greater than the persisted models.)
    15. So then they put it into lib only to find that they have to manually require it. Then later realize that this also means they now have to reboot their server any time they change the file (after a painfully long debugging time of "why what aren't my changes working?", because their lib folder classes are now second-class citizens). Then they go down the rabbit hole of adding lib to the autoload paths, which burns them because rake tasks then all get eager loaded in production. Then they inevitably realize anything inside app is autoloaded and make an app/lib per Xavier's advice.
    16. The real fundamental problem is that lib is a kitchen sink
    17. I think the symmetry of the naming between lib and app/lib will lead a fresh Rails developer to seek out the answer to “Why are there two lib directories?", and they will become illuminated. And it will prevent them from seeking the answer to “How do I autoload lib?” which will start them on a rough path that leads to me advising them to undo it.
    18. Everything has a place so do better and find it. There is a certain belief that everything within app should be organized into functionally-named directories and any files placed in app/lib actually belongs in app/services or app/interactors or app/models or someplace if the developers just tried harder. The implication is that developers are bad developers if they don’t yet know what kind of constant they have and where its forever home should be. I reject this. Over the lifespan of an application, there will be constants that have not yet found their functional kin, if those kin ever come to exist at all; sometimes you simply need some code and a place to put it. app/lib can be the convention for where those constants can live temporarily or as long as necessary. Autoloading is really nice, let’s treat them to it.
    19. It is confusing that app/lib is named similarly to lib . I agree, but it is not uncommon to have directories with the same name and similar function nested under different contexts. I believe developers can handle this complexity. Most similarly, Linux has lib and usr/lib . Within a new Rails app, there are many such directories that are manageable: app/assets and lib/assets (sometimes even vendor/assets too) app/javascript and vendor/javascript storage and tmp/storage config and app/assets/config app/controllers and app/javascript/controllers
    1. Please note that you should also ignore subdirectories that are not meant to be namespaces. For example: Rails.autoloaders.main.ignore('lib/tasks', 'lib/assets') Otherwise, Zeitwerk would define a Tasks constant, but that is not your intention (and could potentially conflict with a genuine Tasks constant).
    2. Another alternative that would feel a lot better would be app/my_app in the same way I do lib/my_app, and then app/my_app/my_file.rb would define MyApp::MyFile, like normal. That would be fine, preferable, even. But how do I tell Zeitwerk that?
    1. I'm assuming some of the goals are to make it clear where to put new files (and to stay within current Rails conventions). We already have a few non-standard app folders in our project, such as app/services, app/queries, etc. and we put some non-ActiveRecord classes in app/models. If we are going to move files, it might make sense to first define where files should go, and then move each file to the appropriate place. This might be more of a reorganization project, than copying over a folder.
    1. In API design, exceptional use cases may justify exceptional support. You design for the common case, and let the edge case be edge. In this case, I believe lib deserves ad-hoc API that allows users to do exactly that in one shot:
    2. People want to autoload from lib, which is understandable. If we can, this use case should have first-class support from the framework.
    3. lib is meant for things that are kind of tangential to the application core. What's in there feels better located in lib than under app, for me.
    1. The OAuth Proxy, which intercepts all requests to the APIs and translates cookies to tokens.
    2. Besides the security concerns related to potential XSS vulnerabilities, keeping the token in memory has a big downside regarding user experience as the token gets dropped on page reloads. The application must then obtain a new token, which may trigger a new user authentication. A secure design should take user experience into account.
    1. authenticate_by addresses the vulnerability by taking the same amount of time regardless of whether a user with a matching email is found: User.authenticate_by(email: "...", password: "...")
    1. @tmoschou You can find the source for Apple's pkill on opensource.apple.com/source. It's together with other utilities in the collection adv_cmds. Maybe you can spot the bug.
    1. But rather than do all that work to identify the running pod, why not run the backup using the deployment? (That's what I've always done) kubectl exec deployments/gitlab --namespace gitlab -- gitlab-rake gitlab:backup:create
    1. I think we are a victim of behavioural norms and so many of the apps that I use have this pattern. That's not to say it's the right behaviour, but it may be hard to break the pattern for users.
    2. It was an intentional decision to make the items in the dropdown of content editor span two lines instead of one. The reason being that sometimes the text can get too long and the dropdown spans the entire width of page which isn't ideal. Also, a slimmer dropdown looks better on mobile devices.
    1. Implement restrictive defaults (potentially allowing an explicit bypass) I understand that easy usability and rich out-of-the-box functionality is likely essential to this library's appeal to its users. Nevertheless I'd like to propose making the authorization properties ransackable_[attributes/associations/etc.] empty sets by default, forcing the developer to explicitly define whitelists for their use case. To soften the usability blow, a new ransack_unsafe(params[:q]) or ransack_explicit(params[:q], ransackable_attributes='*', ransackable_associations=(:post, :comment)) method could be introduced to offer developers a shorthand to bypass or override the whitelists for specific queries (after they've had to read a warning about why these methods can be dangerous).
    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...

    1. Postbox is Thunderbird for Mac.6ShareReportSavelevel 2TheRealKenJeong · 2 yr. agoThis is a good app. It started off as a reskinned Thunderbird client but has branched off somewhat. It's different enough at this point that it no longer supports plug-ins, but over t ime, it's assumed most functionality of the more popular plug-ins anyway.

      If it really is based on Thunderbird code, then how are they able to sell it on https://www.postbox-inc.com/store/pricing and not make the source code available for free?

    1. Please contact Google for support on Gmail. This really isn't an action that has anything to do with your Mac. You can access all of your mail online in a web browser. What you would like to do isn't an action of the Mail app which is simply a client but would be managed by the ISP, in your case Google.
    1. Google Chrome for Android no longer has an option to disable “Pull to Refresh”. For people who don’t really like using this feature, this is pretty annoying. There was a way to disable this using a flag, but version 75 removed this flag too.
    2. The nice point of Kiwi is that it supports Chrome extensions, this is why I am trying it. Browser extensions are something which I believe should be rather more widespread in Android by now.
    3. FIREFOX has a regular setting to disable it. Better mobile browser in many ways!
    4. I was filling and completing a report on a website, uploaded an attachment just wanted to fill up some remaining inputs on final step, while scrolling down the whole page refreshed!.. hours of work and composition was gone instantly, extremely frustrating!
    5. I stoped using chrome android for purchases, due to the refresh occuring while scrolling up. Poor design choice
    1. An identifier embodies the information required to distinguish what is being identified from all other things within its scope of identification. Our use of the terms "identify" and "identifying" refer to this purpose of distinguishing one resource from all other resources, regardless of how that purpose is accomplished (e.g., by name, address, or context).
  2. Oct 2023
    1. usage is also, however, a concern for the prescriptive tradition, for which "correctness" is a matter of arbitrating style
    2. In the descriptive tradition of language analysis, by way of contrast, "correct" tends to mean functionally adequate for the purposes of the speaker or writer using it, and adequately idiomatic to be accepted by the listener or reader
    1. Usage seems to us peculiarly a matter of ear. Everyone has his own set of rules, his own list of horribles.
    2. "Usage is trendy, arbitrary, and above all, constantly changing, like all other fashions--in clothing, music, or automobiles. Grammar is the rationale of a language; usage is the etiquette."​ 
    3. But when they ask, 'Does spelling count?' we tell them that in writing, as in life, everything counts. For academic writers, as for writers in a wide variety of fields (business, journalism, education, etc.), correctness in both content and expression is vital.
    4. although we do point out the mistakes.
    5. What interests us far more is that these apprentice writers have interesting ideas to convey, and manage to support their arguments well.

      only partial match: the most important thing is the information (more than presentation/formatting)

    6. New words, and new senses and uses of words, are not sanctioned or rejected by the authority of any single body: they arise through regular use and, once established, are recorded in dictionaries and grammars.
    7. In this book, grammar refers to the manner in which the language functions, the ways that the blocks of speech and writing are put together. Usage refers to using specific words in a manner that will be thought of as either acceptable or unacceptable. The question of whether or not to split an infinitive is a consideration of grammar; the question of whether one should use literally in a nonliteral sense is one of usage."
    8. Rules of proper usage are tacit conventions. Conventions are unstated agreements within a community to abide by a single way of doing things--not because there is any inherent advantage to the choice, but because there is an advantage to everyone making the same choice. Standardized weights and measures, electrical voltages and cables, computer file formats, the Gregorian calendar, and paper currency are familiar examples.
    1. Not much to say except I'm really annoyed by the critics sometimes. This movie is solid. Has a vintage old-time feel to it. Well acted. Deals with the problems of the times (racism, bullying, war, alcoholism, death) in a dramatic, humorous and clever way.Great story. Whole family loved it. They dealt with faith in a reasonable way. They pulled heartstrings without being saccharine. The critics are just so dead-set on hating any movie that deals with faith, especially the Christian faith.
    1. The term "Hobson's choice" is often used to mean an illusion of choice, but it is not a choice between two equivalent options, which is a Morton's fork, nor is it a choice between two undesirable options, which is a dilemma. Hobson's choice is one between something or nothing.
    2. A Hobson's choice is different from:
    1. seeking to exonerate people who participated in the Jan. 6, 2021, siege of the U.S. Capitol as civic-minded people who were being politically persecuted
    1. You also have an editable display name. As I do with all social media, I went with my full name.
    2. Instead of centralized services, which, Dorsey now regrets creating with Twitter, it's distributed so that anyone can build an interface to display the data and activity flowing underneath. It's also designed so that your identity and information is easily transferable to any other platform that supports the protocol (Authenticated Transfer Protocol).
    1. options.delete(:expires_in) { ActiveStorage.urls_expire_in }

      What is the contents of the block for? When is it invoked?

      I assume this is a type, and should have been fetch() { } instead?

    1. When a language presumes to know more than its user, that's when there's trouble.
    2. Just because a language has a feature that might be dangerous doesn't mean it's inherently a bad thing. When a language presumes to know more than its user, that's when there's trouble.
    3. I'd argue that when you find a programming language devoid of danger, you've found one that's not very useful.
    4. The reason eval is there is because when you need it, when you really need it, there are no substitutes. There's only so much you can do with creative method dispatching, after all, and at some point you need to execute arbitrary code.
    5. When is eval justified? In pragmatic terms, when you say it is. If it's your program and you're the programmer, you set the parameters.
    1. transitive verb

      It's hard for me to see the difference between the transitive and intransitive forms of this verb.

      Is that the transitive form can/must be used with a noun following it, like "presume something", while the intransitive form cannot be followed by a noun, but can (and often is) followed by a prepositional phrase, "presume that something"? Pretty subtle difference, but I guess it's there...

    1. The main usage difference is that dependency can be used in a second sense as a "concrete" noun to mean a person or thing which depends on something/someone else. But note that in the programming context it's not uncommon to see it used to mean a software resource upon which some piece of software depends (i.e. - reversing the need/provide relationship).

      Is that really true? Can dependency refer to a person or thing which depends on something/someone else?? I'm only used to it the other way.

    2. as a native speaker I'd probably tend to refer to his drug dependency, but his dependence on drugs (maybe because I see one as a problem he has, and the other as something he's doing, I don't know).
    3. And as others have pointed out, there is potential for ambiguity: if A is dependent on B, then a dependence or dependency (relationship) exists; but referring to either A or B as the dependency demands context.

      "demands context" :)

    4. I think that "dependency" is usually the thing that you depend on, whereas dependence is the state of depending on it. But there are certainly cases where you could use either interchangeably.
    5. If you want the easy way out (which looks like the way majority usage is going anyway), you can probably get away with using dependency all the time.
    6. Dependence and dependency can both be used in the state/condition of being dependent sense.

      .

    7. There are certainly cases where you can use dependency and cannot use dependence: for example "The UK's overseas dependencies", or "This software releases has dependencies on Unix and Java". So if the dependent things are discrete and countable, it should definitely be "dependency".
    1. I think "dependence" and "dependency" are like "competence" and "competency". Both are nouns. Yet, "dependence" emphasizes the quality of being dependent. So, it may also be abstract. Whereas, "dependency" focuses on the state of being dependent. It is likely to be concrete.

      This seemed reasonable at first, but I'm not convinced it's the best explanation.

      The conclusion at https://oneminuteenglish.org/en/dependence-or-dependency/ was a bit clearer, although mostly the same:

      Just remember that “dependence” is the quality and “dependency” is the state of having to rely on someone or something else.

      https://ell.stackexchange.com/questions/41528/differences-between-dependence-and-dependency/41561#41561 disagrees with the claim that "state" makes it likely to be concrete. And I like how it clarifies state as "state/condition" (condition is a lot clearer to me):

      Dependence and dependency can both be used in the state/condition of being dependent sense. By definition, all words referencing such "states" are abstract nouns, so I don't see any justification for OP's abstract/concrete distinction in that sense.

    2. I don't understand the distinction between quality and state.

      Now that I mention it, neither do I. What's the difference between a quality and a state?

    1. Just remember that “dependence” is the quality and “dependency” is the state of having to rely on someone or something else.

      While I agree with this... What's the difference between a quality and a state?

    1. git branch --delete --remotes origin/X git branch -dr origin/X # Shorter
    2. they're not wrong, but they don't teach what you don't know you don't know, whereas the one I link to makes this critical unknown unknown become a known unknown and then a known known. I didn't know you had a 1) local branch, 2) locally-stored remote-tracking branch, and 3) remote branch until I read that answer. Prior to that I thought there was only a local branch and remote branch. The locally-stored remote-tracking branch was an unknown unknown. Making it go from that to a known known is what makes that answer the best.
    1. I just want to tell you how wonderfully helpful, thorough, and precise your reviews are. I really appreciate them, and finding this review has led me to read others of yours. I don't think I've ever read a better review. Thank you!
  3. Sep 2023
    1. The indentation of the remaining lines can be corrected with other cops such as IndentationConsistency and EndAlignment.
    1. One thing for the impatient: after the program displays number of messages in both accounts, it seems that it has hung up. But it does something in the background and one has to wait a longer while before it starts displaying info about copied messages.
    1. Good feedback is always welcome! and bad feedback is very often welcome It may sounds crazy but I do reply personally to every single email message I receive, so don't hesitate to spend time writing to me about your email problems, you're sure to get my attention and my time.

      personally replies to every single email message they receive

    1. --stop-after-configfile-check
    2. Kamatera is a very good option to run a mail server because They don’t block port 25, so you can send unlimited emails (transactional email and newsletters) without spending money on SMTP relay service. Kamatera doesn’t have any SMTP limits. You can send a million emails per day. The IP address isn’t on any email blacklist. (At least this is true in my case. I chose the Dallas data center.) You definitely don’t want to be listed on the dreaded Microsoft Outlook IP blacklist or the spamrats blacklist. Some blacklists block an entire IP range and you have no way to delist your IP address from this kind of blacklist. You can edit PTR record to improve email deliverability. They allow you to send newsletters to your email subscribers with no hourly limits or daily limits, whatsoever. You can order multiple IP addresses for a single server. This is very useful for folks who need to send a large volume of emails. You can spread email traffic on multiple IP addresses to achieve better email deliverability.
    1. Mass electronic surveillance by governments revealed over the last several years has spurred a new movement to re-decentralize the web, a movement to empower individuals to be their own service providers again.
    1. If you are watching this show with non-Chinese subtitles you are massively missing out. The Chinese dialogue is written with the skill of a bard. The language is sophisticated, succinct, elegant and poetic - as beautiful as the visuals. In comparison, the English subtitles were dull and prosaic, an abominable shadow of the original dialogue, using the vocabulary of a primary school student. It's as if the varying shades of blue - cerulean, sapphire, teal, indigo were translated into "blue, blue, blue, blue". I was truly disappointed by the English subtitles
    1. This allows reading your email offline without the need for your mail reader (MUA) to support IMAP operations. Need an attachment from a message without internet connection? No problem, the message is still there.
    2. IMAP's main downside is that you have to trust your email provider to not lose your email.
    1. Modoboa is an alternative to those 3 options. It frees you from dependence on email providers and makes accessible to all the creation his own secure email server.
    2. use the services of free email providers (Gmail, Live, Yahoo...) which are limited and your data is used for commercial purposes. Install your own email server, which requires important technical knowledge to setup and configure the system.
    1. Besides that ffscreencast can act as an ffmpeg command generator. Every available option can also just show the corresponding ffmpeg command instead of executing it. Non-ffmpeg commands, such as how the camera resolution is pulled and others can also be shown instead of being executed.
    2. allows fool-proof screen recording via the command line
    3. a shell wrapper for ffmpeg
    1. Inspect the proposed changes in the pull request and ensure that you are comfortable running your workflows on the pull request branch. You should be especially alert to any proposed changes in the .github/workflows/ directory that affect workflow files.
    1. Exclude and include rules are resolved relative to the root of the transfer, but finding rule files (e.g. --exclude-from='exclude-list') is done relative to the working directory of the rsync process (which it inherits from the process that ran it).
    1. For example, still not over the death of Google Reader after all these years? Why not host your own RSS aggregator like Sismics Reader that nobody can ever take away from you?
    2. Self-hosting is when you---either using a computer on your local network at home or a remote "bare metal" server host you've purchased---host your own services for various purposes.
    1. In the author’s view, using a combination of content-addressing, signed content, and petnames would help decentralise that layer. It keeps centralisation around aggregators (because of the scarcity of attention), but mitigates their harmful lock-in.
    2. “Perhaps there is a rule of thumb here? If you decentralize, the system will recentralize, but one layer up. Something new will be enabled by decentralization. That sounds like evolution through layering, like upward-spiraling complexity. That sounds like progress to me.”
    3. “But our everyday reality using the computer does not feel empowering. You want to use the internet without being tracked? Almost impossible. Want to message a friend? I hope you have read and agree to the WhatsApp Terms of Service and Privacy Policy. Want to install some software on your Apple device? It better be in the App Store. Perhaps you want to lend an Amazon eBook to your sister? Well you don’t actually own it, so you’ll have to ask Amazon.”
    1. "All skill, no luck. There may be dice, but they're not for rolling. Beating your opponent is pure skill."

    1. You do not need to buy the expensive Cascade Plus surfactant. You can use any clear shampoo you can find at Dollar Tree. The application rate is 3 ounces per 1,000 square feet. If you have 2,000 square feet to spray, put 6 ounces of shampoo into a hose-end sprayer, fill the jug carefully with water, and spray it out as evenly as you can over the entire yard. If you use too much, no problem. A friend of mine sprayed at 64 ounces per 1,000 and never had a problem. So spray your yard and follow that up with 1/2 to 1 inch of rain or irrigation. Wait 3 full weeks for the magic to happen. Once it does you will find that after a rain or deep irrigation the soil will become unsettlingly soft and it will return to very firm/hard underfoot when the soil dries out.

      This is not my rant alone. I’m simply conveying what is well known in some of the better lawn care forums online. I did not believe in the shampoo treatment until I tried it. Before that all I knew was that core aeration did nothing for my lawn. So I spent a dollar on some cheap shampoo, and it worked way beyond my expectations. Also one treatment seems to last for many years as long as you don’t neglect watering for many weeks during a very hot/dry summer.

    1. It is open sourced and you can find it at https://github.com/digitalocean/droplet-agent
    2. The above diagram depicts the details of a session creation.
    3. Since the Console UI is a web-based app running on the customer’s browser, there are a few challenges we had to overcome due to the limitation set by the browser environment. Typically, the SSH protocol runs over a TCP connection. However, a raw TCP connection isn’t allowed by most browsers.  Moreover, even if we had a way to support a direct TCP connection from within the browser, the Console UI still would not be able to connect to the target Droplet due to CORS limitation unless we assigned every Droplet a sub domain that complies with the CORS requirements, which is impractical.
    4. When building the Droplet Console, we had a few options to support SSH keys-based authentication. The most straightforward way would be to directly allow the customer to specify a private key that is already set up for accessing the Droplet. However, there are some problems with this solution: