775 Matching Annotations
  1. May 2021
    1. But more so, external style cannot be applied to a subsection of a web page unless they force it into an iframe, which has all sorts of issues of it's own which is why external CSS is usually ignored. Inline CSS is often stripped by the tag strippers who don't want you turning things on or off... and media queries shouldn't even play into it since the layout should be controlled by the page it's being shown inside (for webmail) or the client itself, NOT your mail.
    2. Whilst I realize the artsy fartsy types get a raging chodo over their goofy PSD based layout asshattery
    3. That's what's supported, and is all that is EVER likely to be supported... and even then be DAMNED sure you send multipart with a plaintext copy or a great many mail servers will flat out reject it on the assumption that no legitimate e-mail has any damned business even having HTML in it in the first place!
    4. that garbage has ZERO damned business in an e-mail which is why a great many places use HTML only e-mail as a trigger for spam detection! (if you send multipart as both text/html and text/plain, you're fine)
    5. That's something that has been bugging me too. I mean, it's fine if not everything is supported, but if everyone could agree on what is or should be supported then that would make a huge difference. But until then, it's going to be a struggle.
    6. I've worked with people at companies where this was their only responsibility. Setting up emails for clients, making sure they pass a battery of tests and look great in all browsers and clients. It's an incredible PITA and it's not a set it and forget it thing. Clients can change month to month; spam filters change, etc...
    1. I hate to be the guy who will destroy your day but... Tables. You need to work with nested tables/cells. If you think Gmail is annoying you will cry in agony if you also need Outlook support.Work with the good old HTML from the early 2000's. That's the only way to be sure everything will work as intended.Anything else will mostly result in a horrible mess, broken design and incompatible layouts.
    1. More importantly, using a plain email would save lots of time and effort. As a goal-driven-lazy person, that’s a good enough reason to start experimenting.
    2. They don't look like advertisements. The second the recipient interprets your email as an ad, promotion, or sales pitch—and it does take just a second—its chances of being read or acted upon plummet towards zero. A plain email leads people to start reading it before jumping to conclusions.

      forces you to read before deciding

    3. They feel more personal. It's no handwritten note, but it's much more personal than an over-designed email with the recipient's first name crammed somewhere inside.
    4. The plain, unstyled emails resulted in more opens, clicks, replies, and conversions, every time.
    5. They're less likely to go into the "Promotions" tab in Gmail (used by ~16% of all email users), for the same reasons above. From my testing, the plain emails typically end up in the Updates tab and some times even in the primary tab. Of course, the text in the email also affects this.
    6. The plain email—which took no time to design or code—was opened by more recipients and had 3.3x more clicks than the designed email.
    7. If you ever had to go through the hair-pulling process of designing emails, then you understand. If you haven’t, here’s why it’s such pain:
    8. Email tools/clients are inconsistent in how they render HTML and CSS. A designed email might look great in Gmail, broken in Outlook, and unreadable in Apple Mail. Half of all emails are opened on mobile devices (according to one study). Email looks good in different clients? Great, now make it work on a 4" screen just as well as on a desktop.
    9. Email require their own flavor of HTML and CSS. Want to have rows or columns in your layout? You'll have to use <table> tags—a method long buried by web developers. There's also no support for external stylesheets, element position styling, and so on...
    10. You'll have to use <table> tags—a method long buried by web developers
    1. Embedded CSS: This style is becoming more popular with the rise of mobile and responsive emails. Embedded CSS codes are determined in one place of an email, generally in the <head> section as a <style>. Some email servers still strip the information out of this section, which can cause display problems.
    1. Although a lot of email development is stuck in the past, that doesn’t mean we can’t modernize our campaigns right along with our websites. Many of these tips can be baked right into your email boilerplate or code snippets, allowing you to create more accessible HTML emails without too much thought.
    2. I hate making newsletters, but absolutely love reading them.
    3. I hate making newsletters, but absolutely love reading them. Because of this, and on a semi-related note (apologies if this is off-topic/not allowed), I am in the process of creating a newsletter directory, allowing users to browse and find newsletters to sign up for.
    1. While it’s not quite completely table-free, I’ve managed to get The Intermittent Newsletter down to a single table—one that’s not even visible to non-Microsoft email clients. Along the way, I made an effort to make The Intermittent Newsletter accessible to more readers.
    1. The command nix-shell will build the dependencies of the specified derivation, but not the derivation itself. It will then start an interactive shell in which all environment variables defined by the derivation path have been set to their corresponding values, and the script $stdenv/setup has been sourced. This is useful for reproducing the environment of a derivation for development.

      QUESTION: What exactly does nix-shell execute from the Nix expression (i.e., shell.nix, default.nix, etc.)?

      ANSWER: Based on my current understanding, the answer is everything. It calls $stdenv/setup (see annotation below) to set up the most basic environment variables (TODO: expand on this), and "injects" the most common tools (e.g., gcc, sed) into it.

      It also defines the phases (TODO: verify this) and builder functions, such as genericBuilder. For example, the default builder is just two lines:

      source $stdenv/setup
      genericBuild
      

      TODO: pkgs/stdenv/generic/builder.sh is a mystery though.

      QUESTION: Once dropping into nix-shell, how do I know what phases to execute by looking at a default.nix? (E.g., [..]freeswitch/default.nix)

      ANSWER: As far as I can tell, one can override the phases in their Nix build expression (to build the derivation, see at the bottom), but they won't get executed as only the $stdenv/setup (see above) will get sourced, and no builders are called that, in return, invoke the phases (again, see above).

      So if one is using nix-shell

      • to create/hack on a package, the person has to manually invoke the builder or phases (TODO: still fuzzy on this subject)

      • to set up an environment, then one doesn't even have to worry about builders/phases because we just use nix-shell to clear the environment and to inject tools that we need for a given task

      QUESTION: When dropping into nix-shell, is this Nix expression (i.e., freeswitch/default.nix) executed? Or just parts of it?

      ANSWER: As stated above, all of the input Nix expression is evaluated, but no builders and build phases are called; although, nothing prevents one to override the phases, in case they are creating/hacking on a package.

      QUESTION:

      The command nix-shell will build the dependencies of the specified derivation, but not the derivation itself.

      What is the "derivation" here exactly? I know that it is a build expression, but does that mean the default.nix (or other Nix expression) nix-shell is invoked with?

      <sup>This statement also seems like a contradiction with how `nix-shell` works (i.e., if one issues `nix-shell -p curl`, then `curl` will be available in that sub-shell), but `-p` acts like a shortcut to as if `curl` had been listed in `buildInputs` so this is not the case.</sup>

      ANSWER: I have the feeling my confusion comes from the fact that the term "derivation" is used ambiguously in the manuals, sometimes to mean multiple things (see list below).

      TODO: Substantiate this claim, and make sure that it not coming from my misunderstanding certain topics.

      • Nix build expression (such as default.nix) whose output is going to become the store derivation itself (see last item at the bottom about the Nix manual's glossary definition)

      • store derivation.

      Had multiple cracks at unambiguously define what a derivation is, and here's a list of these:

      QUESTION: What is the difference between nix-shell -p and nix-shell invoked with a Nix expression of mkShell (or other that achieves the similar effect)?

      QUESTION: nix-shell does not create a sub-shell, so what does it do? (clarification: so nix-shell indeed does it; I confused it with nix shell)

  2. Apr 2021
    1. It should be defined inline. If you are using the img tag, that image should have semantic value to the content, which is why the alt attribute is required for validation. If the image is to be part of the layout or template, you should use a tag other than the img tag and assign the image as a CSS background to the element. In this case, the image has no semantic meaning and therefore doesn't require the alt attribute. I'm fairly certain that most screen readers would not even know that a CSS image exists.

      I believed this when I first read it, but changed my mind when I read this good rebuttal: https://hyp.is/f1ndKJ5eEeu_IBtubiLybA/stackoverflow.com/questions/640190/image-width-height-as-an-attribute-or-in-css

    2. Ah yes, excactly the right answer. Img tags are for information, css backgrounds are for layout.
    3. What's the "correct" semantic way to specify image height and width? In CSS... width:15px; or inline... <img width="15" ?
    1. You should always specify the height and the width of an image if only to help the browser lay the page out even before the image has been downloaded.
    2. use the width (and the height) attribute....to identify the intrinsic height of the image file, not to specify the desired layout size
    1. La desinhibición a los actos violentos y su diafanada presencia a lo largo de la historia del ser humano, se han visto incitadas y provocadas durante nuestra época por el sistema social con el cual hemos sido instruidos. Cabe denotar que la autora hace énfasis en la violencia de género, parafraseando conceptualizaciones de la ideología feminista nos explica: la postura social de la masculinidad y la feminidad, sus interrelaciones afectadas por la corrosión del comportamiento sustentándolo con una explicación psicoanalítica y la afectación que las organizaciones y el ser humano efectúan sobre el ser humano.. Al final de texto Rita hace un comunicado dirigido a los hombres, induce la idea de ser participes en la solución del problema social puesto que no somos ajenos a él. De esta forma este texto es dirigido para toda persona que deseé informarse sobre uno de los problemas sociales más importantes de nuestra historia, pues Desde el 2009 las muertes violentas de mujeres —y de hombres— se dispararon de manera significativa; sólo en 2010 y 2011 los homicidios femeninos casi se duplicaron. Esta tendencia sólo se revirtió en 2014 y 2015, en el 2016 y hasta el momento la cifra continúa con alzas. Los registros también evidencian una creciente tendencia de las muertes violentas de mujeres. Aún con el confinamiento estricto que paralizó gran parte de las actividades y la movilidad el total de asesinatos de mujeres creció 0.6% en comparación con el mismo periodo del 2019. Como último quiero remarcar lo que dijo la autora "Los hombres deben entrar en las luchas contra el patriarcado, pero que no deben hacerlo por nosotras y para protegernos del sufrimiento que la violencia de género nos inflige, sino por ellos mismos, para liberarse del mandato de la masculinidad."

    1. <aside> is appropriate if the side note "could be considered separate from the content"

      From a programmer's perspective:

      • It shouldn't be in an <aside>, if it is actually directly about what is in <main>
      • An <aside> should be able to be evaluated on its own, (almost entirely) in isolation from, and not dependent on anything in, the <main> content. This could be especially important/relevant for screen readers.
    2. <aside> is not appropriate if the side note is "a parenthetical". The W3C gives no examples of what it means.
  3. Mar 2021
    1. @ajlkn has several related projects including this one:

      Might be an interesting experiment to make one or more of them IndieWeb friendly and create a set up to dovetail one or more of them in with the GitHub pages set up.

    1. My preference here is biased by the fact that I spend everyday at work building web components, so Svelte's approach feels very familiar to slots in web components.

      first sighting: That <template>/<slot> is part of HTML standard and the reason Svelte uses similar/same syntax is probably because it was trying to make it match / based on that syntax (as they did with other areas of the syntax, some of it even JS/JSX-like, but more leaning towards HTML-like) so that it's familiar and consistent across platforms.

    1. Last week, I shared how to check if an input is empty with CSS. Today, let’s talk about the same thing, but with JavaScript.
    1. The :empty selector refers only to child nodes, not input values. [value=""] does work; but only for the initial state. This is because a node's value attribute (that CSS sees), is not the same as the node's value property (Changed by the user or DOM javascript, and submitted as form data).
    2. If you would like to make “empty” include values that consist of spaces only, you can add the attribute pattern=.*\S.*.
    3. Generally, CSS selectors refer to markup or, in some cases, to element properties as set with scripting (client-side JavaScript), rather than user actions. For example, :empty matches element with empty content in markup; all input elements are unavoidably empty in this sense. The selector [value=""] tests whether the element has the value attribute in markup and has the empty string as its value. And :checked and :indeterminate are similar things. They are not affected by actual user input.
    1. the client form validation is the one I like a lot, because, for example, by adding required attribute to an input, I don’t need to write any additional JavaScript to warn a user, when the user submits a form without filling out the required fields
    1. Website: <input type="url" name="website" required pattern="https?://.+"> Now our input box will only accept text starting with http:// or https:// and at least one additional character
  4. Feb 2021
    1. A Nix expression describes everything that goes into a package build action (a “derivation”)

      Come up with an ultimate definition for what a "derivation" is.

      So round up all the places where it is mentioned across Nix* manuals, and check out these:


      From Nix Pills section 6.1. The derivation function (see annotation):

      A derivation from a Nix language view point is simply a set, with some attributes. Therefore you can pass the derivation around with variables like anything else.

      So there is clearly an ambiguity between what derivations are perceived to be and what is stated in the Eelco Dolstra's PhD thesis. Or maybe I'm having issues with reading comprehension again...

    2. For each output declared in outputs, the corresponding environment variable is set to point to the intended path in the Nix store for that output. Each output path is a concatenation of the cryptographic hash of all build inputs, the name attribute and the output name. (The output name is omitted if it’s out.)

      QUESTION: So when I see $out in a builder script, it refers to the default output path because the output attribute in the Nix expression has never been explicitly set, right?

    3. A derivation causes that derivation to be built prior to the present derivation; its default output path is put in the environment variable.

      That is, if an input attribute is a reference to a derivation in the Nix store, then

      1. that derivation is built first (after a binary substitute is not found, I presume), and
      2. the path to the built package (for a better word) is handed to the shell build script.
    4. derivationA description of a build action. The result of a derivation is a store object. Derivations are typically specified in Nix expressions using the derivation primitive. These are translated into low-level store derivations (implicitly by nix-env and nix-build, or explicitly by nix-instantiate).

      Organically related to the annotation regarding my nix-shell confusion.

      The dissection of this definition to show why I find it lacking:

      A description of a build action.

      The first (couple) time(s) I read the manuals, this description popped up in many places, and I identified it with Nix expression every time, thinking that a derivation is a synonym for Nix expression.

      Maybe it is, because it clearly tries to disambiguate between store derivations and derivation in the last sentence.

      The result of a derivation is a store object.

      Is this store object the same as a store derivation?

      Derivations are typically specified in Nix expressions using the `derivation primitive. These are translated into low-level store derivations (implicitly by nix-env and nix-build, or explicitly by nix-instantiate).

      QUESTION: So, the part of the Nix build expression (such as default.nix) where the derivation primitive is called (explicitly or implicitly, as in mkDerivation) is the derivation, that will be ultimately be translated into store derivations?

      ANSWER: Start at section 15.4 Derivation.


      QUESTION: Also, why is typically used here? Can one define derivations outside of Nix expressions?

      ANSWER(?): One could I guess, because store derivations are ATerms (see annotation at the top), and the Nix expression language is just a tool to translate parameterized build actions into concrete terms to build a software package. The store derivations could be achieved using different means; e.g., the way Guix uses Guile scheme to get the same result))


      I believe, that originally, derivation was simply a synonym to store derivation. Maybe it still is, and I'm just having difficulties with reading comprehension but I think the following would be less misleading (to me and apart from re-writing the very first sentence):

      Derivations are typically the result of Nix expressions calling the derivation primitive explicitly, or implicitly usingmkDerivation`. These are translated into low-level store derivations (implicitly by nix-env and nix-build, or explicitly by nix-instantiate).

    5. $stdenv/setup

      QUESTION: Does this refer to pkgs/stdenv/generic/setup.sh? According to 6.5 Phases in the Nixpkgs manual?

      ANSWER: I'm pretty sure it does. It sets up the environment (not sure how yet; I see the env vars, but not the basic commands - sed, awk, etc. - that are listed below) and defines a bunch of functions (such as genericBuilder) but it doesn't call these functions!

    6. The function mkDerivation in the Nixpkgs standard environment is a wrapper around derivation that adds a default value for system and always uses Bash as the builder, to which the supplied builder is passed as a command-line argument. See the Nixpkgs manual for details.

      "Documented" in the Nixpkgs manual under 6.1 Using stdenv.

      Used the double-quotes above because I don't consider it well documted. Will give it a try too; worst case scenario is that I'll fail as well.

    7. C.12. Release 1.6 (2013-09-10)In addition to the usual bug fixes, this release has several new features:The command nix-build --run-env has been renamed to nix-shell.
    8. See annotations with the build-phases tag.


      Why are the build phases not enumerated in the Nix manual? If the instructions on how to create a derivation (and thus, a package) then why not go all in instead of spreading out information in different manuals, making the subject harder to grasp?...

      (By the way, it is documented in the Nixpkgs manual under 6.5 Phases; not sure why it is not called build phases when every page refers to them like that.)

    9. Chapter 14. A Simple Nix Expression

      This such a stupid move to go through a derivation example before introducing the language.

    10. Add the package to the file pkgs/top-level/all-packages.nix. The Nix expression written in the first step is a function; it requires other packages in order to build it. In this step you put it all together, i.e., you call the function with the right arguments to build the actual package.

      In addition to this rant, step 3. should be more generic, instead of tying it to Nixpkgs; at least, either show how to build your own Nix expression repo, or don't add this step, but it is not at all necessary to write a derivation. There is a Nixpkgs manual for a reason.

    11. $ nix-env -i firefox --substituters ssh://alice@avalon This works similar to the binary cache substituter that Nix usually uses, only using SSH instead of HTTP

      So a substitute is a built binary for a given derivation, and a substituter is a server (or binary cache) that serves pre-built binaries, right?

      Update: in the next line it says that "it will fall back to using the binary cache substituter", so I guess that answers it.

    12. substitute

      this is another key topic. Also:

      • substitute vs. substituter => this (I think)

      See annotations with the substitute tag

    13. When you ask Nix to install a package, it will first try to get it in pre-compiled form from a binary cache. By default, Nix will use the binary cache https://cache.nixos.org; it contains binaries for most packages in Nixpkgs. Only if no binary is available in the binary cache, Nix will build the package from source. So if nix-env -i subversion results in Nix building stuff from source, then either the package is not built for your platform by the Nixpkgs build servers, or your version of Nixpkgs is too old or too new.

      binary caches tie in with substitutes somehow; get to the bottom of it. See annotations with the substitute tag.

      Maybe this?

    14. closure

      Another gem: who knows what a "closure" is.

      [This highlight] (a couple lines below) implicitly explains it though:

      The command nix-copy-closure copies a Nix store path along with all its dependencies to or from another machine via the SSH protocol. It doesn’t copy store paths that are already present on the target machine.

      or this, also just a couple lines below:

      the closure of a store path (that is, the path and all its dependencies)

    15. the closure of a store path (that is, the path and all its dependencies)
    16. The command nix-copy-closure copies a Nix store path along with all its dependencies to or from another machine via the SSH protocol. It doesn’t copy store paths that are already present on the target machine. For example, the following command copies Firefox with all its dependencies:
    17. subscribes you to a channel that always contains that latest version of the Nix Packages collection.

      That is a misleading statement. The latest version is where the master branch points, isn't it?

      So a channel points to a Nixpkgs commit (on a branch named after the channel) where all packages inside are deemed stable, and all packages are built to have available binary substitutes by a (hydra) build farm.

    18. A Nix channel is just a URL that points to a place that contains a set of Nix expressions and a manifest.
    19. garbage collector roots

      Definitely avoid this, when a term is used but only introduced formally way later. (There is also a reference to "garbage collector roots" almost at the beginning as well.)

    20. $ nix-env --switch-profile /nix/var/nix/profiles/my-profile $ nix-env --switch-profile /nix/var/nix/profiles/default These commands switch to the my-profile and default profile, respectively. If the profile doesn’t exist, it will be created automatically.

      learn more about profiles; creating new profiles was new info

    21. Chapter 10. ProfilesProfiles and user environments are Nix’s mechanism for implementing the ability to allow different users to have different configurations, and to do atomic upgrades and rollbacks.
    22. user environment
    23. In Nix, different users can have different “views” on the set of installed applications. That is, there might be lots of applications present on the system (possibly in many different versions), but users can have a specific selection of those active — where “active” just means that it appears in a directory in the user’s PATH. Such a view on the set of installed applications is called a user environment, which is just a directory tree consisting of symlinks to the files of the active applications.
    24. nix-env -qas

      ... and it takes AGES to complete

    25. 4.3.1. Change the Nix store path prefix

      There is a lot of place in this manual (and probably in the others as well) where the prefix is referred to (usually with italics, such as "prefix/store"), so in the book

      • this should be linked to this section (or the one in the book), and

      • establish a clear and well-communicated notation to convey this

    26. At the same time, it is not possible for one user to inject a Trojan horse into a package that might be used by another user.
    27. Chapter 6. SecurityNix has two basic security models. First, it can be used in “single-user mode”, which is similar to what most other package management tools do: there is a single user (typically root) who performs all package management operations. All other users can then use the installed packages, but they cannot perform package management operations themselves.Alternatively, you can configure Nix in “multi-user mode”. In this model, all users can perform package management operations — for instance, every user can install software without requiring root privileges. Nix ensures that this is secure. For instance, it’s not possible for one user to overwrite a package used by another user with a Trojan horse.

      Would have been nice to link these to the install chapter where single- and multi-user modes were mentioned.

      How would this look in a topic-based documentation? I would think that his chapter would be listed in the pre-requisites, and it could be used to buld different reading paths (or assemblies in DocBook, I believe) such as practical, depth-first (if there are people like me who want to understand everything first), etc.

    28. reentrancy
    29. You can uninstall Nix simply by running: $ rm -rf /nix
    30. $ mkdir /nix $ chown alice /nix

      Traditionally, when a command should be invoked with sudo, it is either included in the example, or the shell indicator is # instead of $.

    31. To explicitly select a single-user installation on your system:

      It should be noted in this section also that since nix 2.1.0, single user install is the default.

    32. nix-shell '<nixpkgs>' -A pan

      What is happening here exactly?

      nix-shell's syntax synopsis always bugged because it looks like this

      SYNOPSIS
      nix-shell [--arg name value] [--argstr name value] [{--attr | -A} attrPath] [--command cmd] [--run cmd] [--exclude regexp] [--pure] [--keep name] {{--packages | -p} packages...  | [path]}
      

      and the canonical example is nix-shell '<nixpkgs>' -A pan; what tripped me up is that path is usually the first in examples, and I thought that the position of arguments are strict. As it turns out, nix-shell -A pan '<nixpkgs> is just as valid.

      Side note<br> Apparently there is no standard for man pages. See 1, 2.

      '<nixpkgs>' path is the one specified in the NIX_PATH environment variable, and -A pan looks up the pan attribute in pkgs/top-level/all-packages.nix in the Nixpkgs repo.

    33. since packages aren’t overwritten, the old versions are still there after an upgrade. This means that you can roll back to the old version:

      Wouldn't hurt to tell folks that this is a convenience layer, and one could also just use the old package from the /nix/store, even though that path would be long and obscure; one could use symlinks of course.

      Or, onc could just use nix-shell -p that specifies a specific version (that's already in the store), but, of course, it's not that simple...

      https://github.com/NixOS/nixpkgs/issues/9682

    1. Specifying a name and a src is the absolute minimum Nix requires.

      Didn't they mean what mkDerivation requires?

      I have been jumping around in this manual, so not sure about what arguments does derivation require.

    2. For convenience, you can also use pname and version attributes and mkDerivation will automatically set name to "${pname}-${version}" by default.

      The error messages are not helpful when one messes up the input attribute set ofmkDerivation (i.e., either name, or pname and version attributes have to be present); see Nixpkgs issue #113520.

    3. 6.1. Using stdenv
    4. fetchpatch works very similarly to fetchurl with the same arguments expected. It expects patch files as a source and and performs normalization on them before computing the checksum. For example it will remove comments or other unstable parts that are sometimes added by version control systems and can change over time.
    5. 19.3. Submitting security fixes Security fixes are submitted in the same way as other changes and thus the same guidelines apply. If the security fix comes in the form of a patch and a CVE is available, then the name of the patch should be the CVE identifier, so e.g. CVE-2019-13636.patch in the case of a patch that is included in the Nixpkgs tree. If a patch is fetched the name needs to be set as well, e.g.: (fetchpatch { name = "CVE-2019-11068.patch"; url = "https://gitlab.gnome.org/GNOME/libxslt/commit/e03553605b45c88f0b4b2980adfbbb8f6fca2fd6.patch"; sha256 = "0pkpb4837km15zgg6h57bncp66d5lwrlvkr73h0lanywq7zrwhj8"; }) If a security fix applies to both master and a stable release then, similar to regular changes, they are preferably delivered via master first and cherry-picked to the release branch. Critical security fixes may by-pass the staging branches and be delivered directly to release branches such as master and release-*.
    6. 18.6. Patches Patches available online should be retrieved using fetchpatch. patches = [ (fetchpatch { name = "fix-check-for-using-shared-freetype-lib.patch"; url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=8f5d285"; sha256 = "1f0k043rng7f0rfl9hhb89qzvvksqmkrikmm38p61yfx51l325xr"; }) ];

      ... and from Chapter 11:

      fetchpatch works very similarly to fetchurl with the same arguments expected. It expects patch files as a source and and performs normalization on them before computing the checksum. For example it will remove comments or other unstable parts that are sometimes added by version control systems and can change over time.

      ... and also adding highlight of 19.3. Submitting security fixes

      because these are the only places I've seen fetchpatch mentioned.

      From the wild in freeswitch/default.nix in Nixpkgs:

      stdenv.mkDerivation rec {
        pname = "freeswitch";
        version = "1.10.5";
        src = fetchFromGitHub {
          owner = "signalwire";
          repo = pname;
          rev = "v${version}";
          sha256 = "18dhyb19k28dcm1i8mhqvvgm2phsrmrwyjmfn79glk8pdlalvcha";
        };
      
        patches = [
          # https://github.com/signalwire/freeswitch/pull/812 fix mod_spandsp, mod_gsmopen build, drop when updating from 1.10.5
          (fetchpatch {
            url = "https://github.com/signalwire/freeswitch/commit/51fba83ed3ed2d9753d8e6b13e13001aca50b493.patch";
            sha256 = "0h2bmifsyyasxjka3pczbmqym1chvz91fmb589njrdbwpkjyvqh3";
          })
        ];
        postPatch = ''
          patchShebangs     libs/libvpx/build/make/rtcd.pl
          substituteInPlace libs/libvpx/build/make/configure.sh \
            --replace AS=\''${AS} AS=yasm
      
          # Disable advertisement banners
          for f in src/include/cc.h libs/esl/src/include/cc.h; do
            {
              echo 'const char *cc = "";'
              echo 'const char *cc_s = "";'
            } > $f
          done
        '';
      
    7. 6.5. Phases

      Not sure why this isn't called build phases... See also.

    1. Using details/summary for dropdown nav menu without requiring any JavaScript

    2. in this post, we’ll look at how to use this as the basis for an accessible dropdown navigation element that can be opened equally well by keyboard users tabbing through the page, and mouse users hovering on the nav item
    3. The HTML details element comes with a surprise – in most browsers it has the ability to hide and show content with no additional JavaScript or CSS whatsoever. Here’s a little bit about how it works. details has with a child called summary, and when a page first loads, the summary is the only part of the element that’s visible, along with a triangle that browsers display by default, to suggest the expandable nature of the content. Interacting with the summary element, by clicking or using the keyboard, will make the rest of the details element visible and add an open attribute to the details element itself.
    1. <pre>  My Bonnie lies over the ocean.   My Bonnie lies over the sea.  My Bonnie lies over the ocean.  Oh, bring back my Bonnie to me.</pre>

      This looks really useful.

  5. Jan 2021
    1. How to wrap long word (text without spaces) in html table’s cell? This is very, very easy! We must add only a CSS proprty to table cell “td” tag – “word-break: break-all;” then all column’s widths become as intended. 
    1. It is also very likely that the contents of the table might change the structure or dimensions of the table. For example, long words residing in the table cells can cause the cell width to increases. If you fix that problem, it might happen that the long words cross the cell boundaries.
  6. Dec 2020
    1. for authoring accessible pages on the web ranging from static documents to dynamic applications.

      Accessiility ist in den Standard eingebunden und keine untergeordnete Anforderung. Außerdem ist der Standard seitenorientiert.

  7. Nov 2020
    1. SVG has the advantage that integrates very well with Svelte, since it’s an XML and the nodes can be managed as if they were HTML. On the other hand, Canvas is more efficient, but it has to be generated entirely with JavaScript.
    1. If you set the width to a fixed number of pixels, then rotating portrait to landscape just changes the scale, because the number of virtual pixels remains constant.
    1. HTML contient un nombre arrêté d’éléments définis dans un standard, sans customisation possible

      Cette affirmation tend à ne plus être vraie: d’une part, les balises non spécifiées dans l’HTML5 «canonique» (ex. pour une balise que j’invente <bibliotheque></bibliotheque>, les navigateurs afficheront sans problème son contenu, à l’exception d’anciennes version de Microsoft Internet Explorer †); d’autre part on peut bel et bien créer des éléments avec la fonction JavaScript document.createElement('balise-speciale') (et cela est très fréquemment en usage aujourd’hui, particulièrement avec des frameworks comme Angular, React, Vue.js).

    1. It won't work in all use cases, but it's better than the div soup.
    2. I run into this on almost every project and end up doing this as a workaround: :global([slot="content"]) This allows me to style that extra div in the component that contains the slots but it would be super nice to have <MyComponent slot="content"/> and eliminate that extra div
    3. If this is getting implemented, I think I'll love to see both implemented. I can see a lot of use cases where I would like to encapsulate the component with additional wrappers and in another scenarios I would like to just use the component. Now i work around this using empty div but then at times it breaks the structure because of the div element and I'll have to add more class utilities to make it work. This will be a great addition for Svelte.
    4. I don't like adding unnecessary divs.
    1. I'm looking at https://html.spec.whatwg.org/#attributes-3 right now, and it seems that there are a few others that ought to be boolean but are not currently in this list: allowpaymentrequest, formnovalidate, hidden (is on the original list in the master branch), itemscope, nomodule, and playsinline.
  8. Oct 2020
    1. hyperscript is more concise because it's just a function call and doesn't require a closing tag. Using it will greatly simplify your tooling chain.

      I suppose this is also an argument that Python tries to make? That other languages have this con:

      • cons: closing tags make it more verbose / increase duplication and that Python is simpler / more concise because it uses indentation instead of closing delimiters like end or } ?
    1. HTML template strings for the Browser with support for Server Side Rendering in Node.
    1. If a part of the content deserves its own heading, and that heading would be listed in a theoretical or actual table of contents, it should be placed in a <section>. The key exception is where the content may be syndicated; in this case, use <article> element instead.
    1. This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded.
    2. The defer attribute has no effect on module scripts — they defer by default.
    3. This is a boolean attribute: the presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value.
  9. Sep 2020
    1. The <output> tag represents the result of a calculation. Typically this element defines a region that will be used to display text output from some calculation.

      How <output> tag can be used in HTML5

    1. El matrimonio igualitario Argentina, Uruguay, México, Brasil y Colombia son los únicos países de América Latina que han legalizado el matrimonio de parejas homosexuales, con todas las condiciones legales que tienen los matrimonios convencionales. De igual manera, Holanda, Bélgica, Suecia, Alemania, Sudáfrica, España, Inglaterra, Portugal y otras 12 naciones más han hecho lo propio.   Entretanto, sólo 11 países permiten la unión civil entre parejas del mismo sexo (no incluye todos los derechos legítimos maritales) entre estos Ecuador, Chile, Austria, Italia y Grecia. Cambio de identidad El proceso de cambio de género o sexo es un proceso quirúrgico y psicológico que contempla el cambio físico. En la actualidad, naciones como Venezuela, Colombia, Uruguay, Bolivia y Perú permiten que la transformación también sea legal, con el cambio del nombre y género en los documentos de identidad de las personas LGBTI. Sin embargo, en Brasil y Argentina, este tipo de decretos han sido desaprobados o son procesos difíciles por lo riguroso de los exámenes y requisitos que truncan el derecho al trámite. Igualdad en derechos patrimoniales Las garantías, protecciones legales en los matrimonios tras el fallecimiento y divorcio también son logros alcanzados en menos de 20 años por la comunidad LGBTI. Pero estos aún están condicionados dependiendo del país, por la diferencia entre permitir la unión civil (algunos derechos de cónyuges) o el matrimonio igualitario (derechos legítimos).   Adopción homoparental Uruguay, México, Canadá (el primer país en permitirlo en 1999) y algunos estados de EE.UU. han legalizado la adopción para personas unidas del mismo sexo. Asimismo, España, Holanda, Francia y otros permiten que las parejas no heterosexuales puedan tener hijos por medio de la adopción legal. Protección a víctimas de discriminación Hasta 1948 la homosexualidad era considerada una enfermedad mental, pero esto cambió lo que permitió la apertura de sistemas de protección a víctimas de discriminación y agresión. En la actualidad, existen programas de atención social y judicial para el seguimiento de los casos de hostigamiento y asesinatos contra los homosexuales. Además hay coberturas de salud gratuitas para tratar enfermedades como el sida y la programas de integración laboral en distintas áreas. Tags Día contra la Homofobia LGBTI Derechos Discriminación BBC - La Vanguardia - El Excelsior - La Semana Por: teleSUR- db - SB - JCM Noticias Relacionadas OLP exhorta a Oriente Medio a tomar medidas contra Guatemala Bolivia afirma que Venezuela frena dominación de EE.UU. Chavismo toma Caracas en cierre de campaña de Nicolás Maduro Rodríguez: Comicios en Venezuela definen futuro de América Lati googletag.cmd.push(function() { googletag.display('div-gpt-ad-1493942656293-0'); });//]]>--> por Taboolapor TaboolaEnlaces PatrocinadosEnlaces PatrocinadosEnlaces PromovidosEnlaces PromovidosTe RecomendamosHepatitis C | Search AdsSigns of Hepatitis C (Some May Surprise)Hepatitis C | Search AdsPeoplewhizOne Thing All Cheaters Have In Common, Brace YourselfPeoplewhizDID U KNOW ReviewsUnsold 2019 SUVs Going for Pennies on the Dollar: Great For SeniorsDID U KNOW ReviewsDownload Now on Google Play | Neverland CasinoSan Jose Woman Was Playing on This Free Slot Machine App, When All Of A Sudden She Won BigDownload Now on Google Play | Neverland CasinoGet it on Google Play | House Of FunCasinos Will Hate You For Doing This but They Can’t Stop YouGet it on Google Play | House Of FunFungus Clear SupplementsSurgeon: Nail Fungus? Do This Immediately (Watch)Fungus Clear SupplementsCCPA Notice window._taboola = window._taboola || []; _taboola.push({ mode: 'thumbnails-a', container: 'taboola-below-article-thumbnails', placement: 'Below Article Thumbnails', target_type: 'mix' }); window.fbAsyncInit = function() { FB.init({ appId : '1009084795820552', xfbml : true, version : 'v2.5' }); }; (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/es_LA/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/es_LA/sdk.js#xfbml=1&version=v2.5&appId=1009084795820552"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); $(document).ready(function () { $("#comentNativos").addClass("coment"); $("#btn-face").addClass("activeComent"); $("#btn-cf").click(function () { // alert("btn-facebook"); $("#comentNativos").addClass("coment"); $("#btn-face").addClass("activeComent"); $(".fb_ltr").css({width: "940px"}); $("#comentFace").removeClass("coment"); $("#btn-nativo").removeClass("activeComent"); }); $("#btn-cn").click(function () { // alert("btn-nativo"); $("#comentFace").addClass("coment"); $("#comentNativos").removeClass("coment"); $("#btn-nativo").addClass("activeComent"); $("#btn-face").removeClass("activeComent"); }); }); Comentarios con facebook () Comentarios con teleSUR (0) Comentarios 0 Ingresa o Regístrate para poder comentar, usar el foro y más Ingresar Regístrate Nota sin comentarios. //]]>--> footer .legal{ font-size:15px; background:var(--bg-footer-legal,#1c2036); border-bottom: 2px solid #fff; opacity:.5; float:left; } footer .colFootRedes .wpFootSuscrip input[type="text"]:focus{ border: 2px solid #555; border-radius:5px; width:320px; height:46px; } footer .colFootRedes .wpFootSuscrip input[type="text"]{ border: 2px solid #555; border-radius:5px; width:320px; height:46px; } footer .colFooti h4{ color:transparent; cursor:context-menu; } .vivoFooter{ position:relative; } .vivoFooter h4{ position:absolute; margin-top: 6%; margin-left:8em; } footer .wpRedesFoot{ top:135px; border:none; } footer .wpRedesFoot a{ margin-top:-20px; } footer .wpRedesFoot a:hover{ opacity:0.5; } .vivoFooterBoton{ Width:25em; height:3.5em; border-radius:5px; border: none; color:#fff; margin-top:5px; background:#9a1212; transition:1s; font-weight:bolder; } .vivoFooterBoton:hover{ opacity:0.8; transition:1s; } .vivoFooterBoton a{ font-size:16px; } .colFoot img{ margin-left:3px; margin-bottom:-5%; } footer .colFoot{ font-size:12px; line-height:15px; } .colFooti a{ font-size:14px; line-height:15px; } footer .colFootRedes .wpFootSuscrip input[type="submit"]{ background:url("/https://www.telesurtv.net/arte/subNew.png"); background-repeat: no-repeat; width:9%; line-height:32px; margin-left:0px; color:transparent; } footer .colFooti{ color:transparent; font-size:0px; cursor:context-menu; } @media only screen and (max-width: 600px) { footer .wpRedesFoot a{ margin-right:-5px; } footer .colFootRedes .wpFootSuscrip input[type="text"]{ width:210px; } footer .colFootRedes .wpFootSuscrip input[type="text"]:focus{ width:210px; } footer .colFootRedes .wpFootSuscrip input[type="submit"]{ width:12%; color:transparent; } .vivoFooterBoton{ width:20em; margin-top:8px; margin-bottom:5px; } footer .colFooti{ margin-left:28%; margin-bottom:5%; } } Términos de uso Sobre teleSUR Acerca teleSUR Contactos Equipo Empleos Terminos de uso Cobertura satelital Canales Latinoamérica y el Caribe Mundo Deportes Cultura Opinión Programación Servicios Catálogo Multimedia Blog Videos teleSUR Inglés teleSUR Inglés
    1. The only difference is that they’re named with camelCase like onClick, onFocus, onDragEnter instead of the all-lowercase names from HTML (onclick, onfocus, ondragenter).
  10. Aug 2020
    1. The bindings are two-way because any HTML5 contraint validation errors will be added to the Final Form state, and any field-level validation errors from Final Form will be set into the HTML5 validity.customError state.
  11. Jul 2020
    1. One of the most important concepts in AMP’s design is its focus on reducing the amount of DOM reflow required to render its web pages. To reduce DOM reflow, AMP includes a layout system to ensure the layout of the page is known as early as possible in the lifecycle of downloading and rendering the page.
    2. Why was the container type inferred? Because we did not specify a height attribute for the amp-img tag. In HTML, reflow can be reduced by always specifying a fixed width and height for elements on a page. In AMP, you need to define the width and height for amp-img elements so that AMP can pre-determine the aspect ratio of the element.
    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. One way around this is simply linking to each SVG with an <img> tag, instead of embedding the actual SVG in the DOM. This way, the virtual DOM only needs to track one node per image, instead of hundreds for each SVG. Inline SVG [above] vs linked SVG. But in doing so we’ve crippled our ability to manipulate our SVGs. No longer can we add stroke, move shapes, remove nodes or change fill. In short, if you want :hover to change the fill color, you’re back in the stone age.
    1. You know the trade-off. Use the img tag to display an SVG, and you get clean markup — at the cost of styling the SVG using its properties like fill, stroke, SVG filters and more.
    1. Shorthand attributes It's not uncommon to have an attribute where the name and value are the same, like src={src}. Svelte gives us a convenient shorthand for these cases: <img {src} alt="A man dances.">
    1. The Document Object Model (DOM) is a programming interface for HTML and XML documents

      it's an API

  12. Jun 2020
    1. The CSS above will ONLY select the h1 and h2 within the div. The other h1 and h2 within the p tag will be left unstyled.

      父级选择器用空格

  13. May 2020
  14. Apr 2020
    1. Entity references consist of & + any of the valid HTML5 entity names + ;. The document https://html.spec.whatwg.org/multipage/entities.json is used as an authoritative source for the valid entity references and their corresponding code points.