stdenv/linux: document some tips in debugging stdenv bootstrap tower

Just a few comments added:

added a few one-liners to explore which tools are rebuilt at each stdenv iteration during bootstrap
explicitly listed available toolchains and their sources for on each
bootstrap step: glibc, binutils, gcc, coreutils.

Should help slightly in explaining and untangling https://github.com/NixOS/nixpkgs/issues/208412
Description of changes

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

There are some other utilities present in the final stdenv like xz and things rebuilt multiple times during the bootstrap like perl. Should those be addressed here?

There are some other utilities present in the final stdenv like xz and things rebuilt multiple times during the bootstrap like perl. Should those be addressed here?

Good question. Some of the secondary dependencies are volatile in nature: they come and go with patches and release updates.   It's quite a big list (dumped it below).
Some dependencies are very important, like libidn2->glibc->libidn2 loop. Or a hack to clobber ld's INTERP right after glibc upgrade. Some feel less relevant, like xz, bzip (and maybe perl?). Some are somewhat important, like static linkage of libmpc into final gcc, but not very special WRT which stage builds it.
We can pick more interesting cases and document them as well.
So far I mainly followed toolchain-like packages: those that produce code (gcc, binutils), or those that provide code for embedding (glibc).
The whole bootstrap list (needs some scrolling to the right to see the list):
  * s0 -> s1+
    $ nix-store --query --graph $(nix-instantiate -A stdenv) | grep -P -v '[.]sh|[.]patch|bash|[.]tar' | grep -P '.*bootstrap-stage0-stdenv.*->.*'
    "sss8m2sbnqbmshm60n2qiaglnv5zrjqp-bootstrap-stage0-stdenv-linux.drv" -> "gxdaidcbnaamgldrsn3141vbm1irvrm3-bootstrap-stage2-gcc-wrapper-.drv" [color = "red"];
    "sss8m2sbnqbmshm60n2qiaglnv5zrjqp-bootstrap-stage0-stdenv-linux.drv" -> "iax324ji7951dqbj0fzwip8ds4vac324-bootstrap-stage0-glibc-bootstrap.drv" [color = "magenta"];
    "sss8m2sbnqbmshm60n2qiaglnv5zrjqp-bootstrap-stage0-stdenv-linux.drv" -> "kfp58s06f3vk1h4nnbdfpzpblf46ifk8-bootstrap-stage1-gcc-wrapper-.drv" [color = "blue"];
    "sss8m2sbnqbmshm60n2qiaglnv5zrjqp-bootstrap-stage0-stdenv-linux.drv" -> "0pid46kmxphfjmx7wlr9fdl7fllw29pa-bootstrap-stage0-binutils-wrapper-.drv" [color = "red"];
    "sss8m2sbnqbmshm60n2qiaglnv5zrjqp-bootstrap-stage0-stdenv-linux.drv" -> "ngdp6x4cfpcrwzn4gahkdxcy1hg0spk5-bootstrap-stage3-gcc-wrapper-.drv" [color = "black"];
    "sss8m2sbnqbmshm60n2qiaglnv5zrjqp-bootstrap-stage0-stdenv-linux.drv" -> "nkpkl0050sm25fqybik5qyc3z3fhbs3k-bootstrap-stage4-gcc-wrapper-13.0.0.drv" [color = "burlywood"];

  * s1 -> s2+
    $ nix-store --query --graph $(nix-instantiate -A stdenv) | grep -P -v '[.]sh|[.]patch|bash|[.]tar' | grep -P '.*bootstrap-stage1-stdenv.*->.*'
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "1j9wzpdamixsi1j1amlrbycsma5kwa0n-gnum4-1.4.19.drv" [color = "red"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "3ha7dr05jcib6irhv9sqm6j1cbix2x9s-bison-3.8.2.drv" [color = "black"];
    "iw8m0ajv0mk6rgdmvy1lwdnxylxlfsgh-bootstrap-stage1-stdenv-linux.drv" -> "3hwhcsn5azmzlxj2v1b5s0gj55kz0svm-binutils-wrapper-2.39.drv" [color = "black"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "886hzg1wmj6rcwb7ry6xzc5smbpc4psd-expand-response-params.drv" [color = "red"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "0pg4y7baxc39szjr5d6ka8g028z5f4w1-binutils-2.39.drv" [color = "red"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "1d6ddz6k73d1yiifvyha7d5xi1mr0ada-gettext-0.21.drv" [color = "red"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "ak0ybs7w05hjffziki3qngjv8020r6kz-texinfo-6.8.drv" [color = "green"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "f7hs58r69qlp3bv03578yqx01nfb2lxy-xz-5.4.0.drv" [color = "red"];
    "iw8m0ajv0mk6rgdmvy1lwdnxylxlfsgh-bootstrap-stage1-stdenv-linux.drv" -> "igzsn1dzng4bfb7l4pqzq3a3l8mwqiqi-binutils-wrapper-2.39.drv" [color = "green"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "qigxgh2h1xm90xgvqcjqcd9v2q6hkxmh-zlib-1.2.13.drv" [color = "burlywood"];
    "rpyd9fyc5idrihbik72z760zl7748d2h-bootstrap-stage1-stdenv-linux.drv" -> "shi17zrfdag2cw437lz4lfbfby7y0gn3-perl-5.36.0.drv" [color = "burlywood"];

 * s2-> s3+
   $ nix-store --query --graph $(nix-instantiate -A stdenv) | grep -P -v '[.]sh|[.]patch|bash|[.]tar' | grep -P '.*bootstrap-stage2-stdenv.*->.*'
   "89kaz6k451ck2vh8ga2valgw4wq130j4-bootstrap-stage2-stdenv-linux.drv" -> "17lzy22lvw9w8qvp18dh1zf8j8b1kim1-linux-headers-6.1.drv" [color = "black"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "57271y6vc1353w92fxkq58wj7h49gfmz-libidn2-2.3.2.drv" [color = "green"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "5kivra808dsk9wmyvqjzv91gq0x9gcsi-libunistring-1.0.drv" [color = "red"];
   "89kaz6k451ck2vh8ga2valgw4wq130j4-bootstrap-stage2-stdenv-linux.drv" -> "8id9zhcpijc4l2iy59bq376yks5z8k98-bootstrap-stage0-glibc-iconv-bootstrap.drv" [color = "blue"];
   "89kaz6k451ck2vh8ga2valgw4wq130j4-bootstrap-stage2-stdenv-linux.drv" -> "a5aab34ih7hjz7dkj072p34pp5p4k657-binutils-2.39.drv" [color = "burlywood"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "mbr3wk8xdhibfb0gqljnls92b69skypv-expand-response-params.drv" [color = "burlywood"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "savk0l1zv1wiz32l30rwgfymbm0klwsx-patchelf-0.15.0.drv" [color = "black"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "vijzw99ib8lx2zzkd42agb0lws8f60ki-glibc-2.35-224.drv" [color = "burlywood"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "vw7jj8i48zjld8g8xxrvng60cgd7gndf-python3-minimal-3.10.8.drv" [color = "magenta"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "1c1j06fjz38afd5vk7dlc53q0bikv7gw-autoconf-archive-2022.09.03.drv" [color = "burlywood"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "34nfl1ijs461rcgyskn5jabjsn7q9y5a-xz-5.4.0.drv" [color = "green"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "56jffxbkyviwjjdah1wd8q6cqwgk38sf-bzip2-1.0.8.drv" [color = "red"];
   "89kaz6k451ck2vh8ga2valgw4wq130j4-bootstrap-stage2-stdenv-linux.drv" -> "80ywjgkdkswcsxfnd21h0v4zwwq52a0r-hook.drv" [color = "green"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "0cvwyqrfl8hf1z1dch7p1869lgbhz95m-libtool-2.4.7.drv" [color = "burlywood"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "1y62inb9g43nk1qbhg8w7lbccpn7kfm5-autoconf-2.71.drv" [color = "blue"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "7cfgkhd876ipbqs4xdj93mvfpc2hrwlq-automake-1.16.5.drv" [color = "black"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "cfkkc6m38prsdbyzvyj61vay2x6fhl8g-zlib-1.2.13.drv" [color = "magenta"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "cxmdps9l7qxkaq999risiynlb7m5f8fx-gettext-0.21.drv" [color = "black"];
   "89kaz6k451ck2vh8ga2valgw4wq130j4-bootstrap-stage2-stdenv-linux.drv" -> "d588xih5x1aj0zps766ixbrcykk67i04-pkg-config-wrapper-0.29.2.drv" [color = "red"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "gq5vazp93cz5rb9fz2dbk523axpf4wy0-expat-2.5.0.drv" [color = "red"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "gvqv2bk6b0qxsji9vxdhm5w3f7vsc7ra-pkg-config-0.29.2.drv" [color = "black"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "hvq0c8dp4yy7rv7b2rr5mgm0k4wqpjq2-libxcrypt-4.4.33.drv" [color = "magenta"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "md5yc9cvr88hn6b8k68j8mdqq9jv846m-texinfo-6.8.drv" [color = "black"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "qpihwmpl07jy7kx6dsh0wcv7ryg5j9kc-help2man-1.49.2.drv" [color = "blue"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "bnj413zi1gm425z9fjkk9z1mxx1k8vrr-perl5.36.0-gettext-1.07.drv" [color = "green"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "c8h7vlknl1gfh0z21cc32z26fba6ryj7-perl-5.36.0.drv" [color = "red"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "x1125aihymyqrs5d9wdmcryf2amd1pb3-file-5.43.drv" [color = "black"];
   "89kaz6k451ck2vh8ga2valgw4wq130j4-bootstrap-stage2-stdenv-linux.drv" -> "yvw7zhr0kq3qaa1c9wa0s2hpfgmwqnlm-nuke-references.drv" [color = "red"];
   "kd72va0i3ay01hcszk4rrp4agpqjzgn2-bootstrap-stage2-stdenv-linux.drv" -> "z250qq4j5pbjxqa49qzf6hlsa5c07gk9-libffi-3.4.4.drv" [color = "black"];

  * s3 -> s4+
    $ nix-store --query --graph $(nix-instantiate -A stdenv) | grep -P -v '[.]sh|[.]patch|bash|[.]tar' | grep -P '.*bootstrap-stage3-stdenv.*->.*'
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "2dx7k86vw2701cidbwlf5ax91387n5lp-gettext-0.21.drv" [color = "burlywood"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "c8jfkzv5z1wyri93f3zxi9bsld5f4bqv-texinfo-6.8.drv" [color = "black"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "cv31bwgvz1ms8g481y0hk37lrn6y6sx0-zlib-1.2.13.drv" [color = "green"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "d47js1wik2lf9j9x0rn59vnjfpa6kir3-gcc-13.0.0.drv" [color = "red"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "8ngy9ncv45y6lpjsxkbbdhd2w1i667vb-mpfr-stage3-4.1.1.drv" [color = "burlywood"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "didv4h48bp73j5w2swd8v9lbs58yjzqn-libmpc-stage3-1.2.1.drv" [color = "magenta"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "bkwxrqy1xw1plrjgbwr3686frr4qfdwa-mpfr-4.1.1.drv" [color = "blue"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "fhwr5c6f6kd23045ib9fi0qr0m5pa1xh-expand-response-params.drv" [color = "green"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "iqh4dg54hkpzc4cc3wwmsa3frqacdikk-xz-5.4.0.drv" [color = "green"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "msmp6hkkrmipivaibyn7r8llhq81zr0x-flex-2.6.4.drv" [color = "blue"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "hxwl3f6kbsm2d80gn8lnvl23gzsm51xr-help2man-1.49.2.drv" [color = "red"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "9y5490350svrxysfzz1x8cirpv80q030-perl5.36.0-gettext-1.07.drv" [color = "black"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "igh4cwfbwrcd43sq4a64rkqzimzzvhpj-perl-5.36.0.drv" [color = "red"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "p31hzp67h1ir41j3avxxj1y31v8c7lj1-gmp-with-cxx-6.2.1.drv" [color = "burlywood"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "s46jnhcswf71wds6qi0k5fb7rwsjvxm5-which-2.21.drv" [color = "green"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "vp3r1q7h50bfbdfs5sca1v7v4bq2z8h5-libxcrypt-4.4.33.drv" [color = "green"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "wdy9ci6q8p8w03yw4jp9za4s2qfkgyna-isl-stage3-0.20.drv" [color = "burlywood"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "wwavja7952gn82c6vd60bp861jfmnqvk-gmp-with-cxx-stage3-6.2.1.drv" [color = "black"];
    "9ics3hn931bfxmll6pga3ixb9vpir3dh-bootstrap-stage3-stdenv-linux.drv" -> "x2zfsc8gb1x8s4qcgahlgmrx6rfd74qb-hook.drv" [color = "green"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "512x62mw6b2b94j24dqmqcrqvp003dgb-libtool-2.4.7.drv" [color = "blue"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "51m3rnl383w7x0k1ahvdzzj2cwrfmg9p-autoconf-2.71.drv" [color = "blue"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "7aq50zyqmhav7z712w95693vcsw28q6v-automake-1.16.5.drv" [color = "burlywood"];
    "chga8a1d6pcxk4i1yv40n4bzmr0vmjzv-bootstrap-stage3-stdenv-linux.drv" -> "gv67lrmir7r5k5rq2lis8c2rhf1lzl4l-file-5.43.drv" [color = "green"];

  * s4 -> final
    $ nix-store --query --graph $(nix-instantiate -A stdenv) | grep -P -v '[.]sh|[.]patch|bash|[.]tar' | grep -P '.*bootstrap-stage4-stdenv.*->.*'
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "2kkpn9l97lfryd8alvjy3p923y2aw3cn-attr-2.5.1.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "39dw118hq02bx4x4v3ay2p6jc287qj2j-gmp-with-cxx-stage4-6.2.1.drv" [color = "green"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "6f7x7grg4ync7w1qrgmq1bmy2239g5s9-diffutils-3.8.drv" [color = "blue"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "6qd137375hd066w6lwwj8s297mkzn8bx-bzip2-1.0.8.drv" [color = "green"];
    "f77mcaqvynmin9f77z06sziirlxfk7p5-bootstrap-stage4-stdenv-linux.drv" -> "5gqsa7vc2h9h1h3jgpw4ybxcs8f0l8ib-hook.drv" [color = "magenta"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "35xzppkmbbijs29kbshimmi7l2abckv7-automake-1.16.5.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "3y275vwm6s5wab603jb8s3ddgscfg59c-autoconf-2.71.drv" [color = "red"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "6pj2g2s3dcczb70ql0aypapb3f3lqasq-libtool-2.4.7.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "9bh10gs9zhhkjhvijpdxyapm7xh0ks21-patchelf-0.15.0.drv" [color = "green"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "b66qnf4bfy57a80g6ijpv5bvs17w9j2n-gnused-4.9.drv" [color = "black"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "c4bsk8sw0im51jdmkbh2jzxa17wiyxba-gnugrep-3.7.drv" [color = "black"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "c5s9fm842njyilahi3fx9ff9slz4933q-gnutar-1.34.drv" [color = "red"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "d6096q9lzkpsavpv88f7xg762djz0mpr-help2man-1.49.2.drv" [color = "blue"];
    "f77mcaqvynmin9f77z06sziirlxfk7p5-bootstrap-stage4-stdenv-linux.drv" -> "dlclsqrd208ry7imchhk8rpd8rz2w01g-gcc-wrapper-13.0.0.drv" [color = "red"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "fxmg8l1l2rbw0l9b5w31n5n2qw7ysimi-xz-5.4.0.drv" [color = "black"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "g0mh37ih39wwyrrb8fj7qrq86pa6n68b-coreutils-9.1.drv" [color = "blue"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "ghv09314nh7khp77igjcy02162swqlyf-perl5.36.0-gettext-1.07.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "hmiky549ypqxxmvg9r0arax2v13idvd9-gawk-5.2.1.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "i2lnvviydhlxmz6g1s65cg1bycxyw4sy-perl-5.36.0.drv" [color = "blue"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "irhgkpxibylrxbbnf5nfn6r83fi3yk3i-patch-2.7.6.drv" [color = "burlywood"];
    "f77mcaqvynmin9f77z06sziirlxfk7p5-bootstrap-stage4-stdenv-linux.drv" -> "iw78x2ijj2cvnw1w21sn0qnhpgj3g8b8-binutils-wrapper-2.39.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "k3l1yrp4jq5w1gv1dbkkrz6r1vab1bww-gzip-1.12.drv" [color = "magenta"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "kpxx5lgj0qjviav2bfzaml8iqi43yk7w-gnumake-4.4.drv" [color = "blue"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "m4y5pfnvmaqlxjb8gdn4jhg3hbp8vlbb-file-5.43.drv" [color = "green"];
    "f77mcaqvynmin9f77z06sziirlxfk7p5-bootstrap-stage4-stdenv-linux.drv" -> "r71xhg2hvsnqk6lj4lpzbga6321w0xsd-setup-hook.drv" [color = "green"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "r9qx3z26l80x90z1wmz7rbfxx1bchwcn-ed-1.18.drv" [color = "black"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "pcbm3np7rhzsgdhwcwakxlwka3lp0v5a-lzip-1.23.drv" [color = "burlywood"];
    "f77mcaqvynmin9f77z06sziirlxfk7p5-bootstrap-stage4-stdenv-linux.drv" -> "srdmshnbmgi13nsgmaw3m8a79sinadqr-glibc-iconv-2.35.drv" [color = "green"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "vlwl4vrjqqi03xlnxizfkkxm5hffif0g-acl-2.3.1.drv" [color = "blue"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "x3iclzi0q0dqq66ah269r082axnfavwy-binutils-2.39.drv" [color = "red"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "xh4ngz24lbzwsr8yqjzbdzp6myikg0bq-findutils-4.9.0.drv" [color = "burlywood"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "xr735lr697xkk59hinnkb05ir528qcav-libxcrypt-4.4.33.drv" [color = "magenta"];
    "g85bilaynpw3dfg3bf0yd7lpwa60kmri-bootstrap-stage4-stdenv-linux.drv" -> "xsqc2qi99dmvnaiks6sffznqysjdrhvb-pcre-8.45.drv" [color = "green"];

Looking at this again, I'd say you do actually address the other utilities implicitly in the new section on bootstrap goals. The goals sound good to me. Maybe add some justification like "These goals ensure the final stdenv has been built exclusively by packages available in the final stdenv so that compiler versions and environments etc. are consistent". That at least is how I understand the goals.
Is there any mechanical way to check that those those goals are met? I think the allowedRequisites and disallowedRequisites will ensure point 1 is not violated by accident (though we currently violate it deliberately using cp; checking hashes should catch that). I'm not sure if there's a way to do point 2 except by manual inspection, and I'm not immediately sure what to look for.
Can you put the command to generate that list in the comments too? That looks very helpful.

Looking at this again, I'd say you do actually address the other utilities implicitly in the new section on bootstrap goals. I just wanted to be sure that we knew where they should come from. The goals sound good to me. Maybe add some justification like "These goals ensure the final stdenv has been built exclusively by packages available in the final stdenv so that compiler versions and environments etc. are consistent". That at least is how I understand the goals.

I think I get what you say. I added the following blurb:
# These goals ensure that final packages and final stdenv are built
# exclusively using nixpkgs package definitions and don't depend
# on bootstrapTools (via direct references or via inclusion
# of copied code of generated code by bootstrapTools).

I think we are on the same page, but just in case I'll try to explain myself a bit.
I did not include your definition as is because (AFAIU) there is a fundamental problem of bootstrap process that has to be solved by pulling package definitions from non-final stdenv:

most of pkgs depends on stdenv (by literally depending on things like gcc from stdenv)
stdenv depends on pkgs (version of gcc from previous stage of stdenv)

To untie this infinitely unfolding cycle final stdenv stage overrides some of normal package definitions to refer to package definitions of previous stdenv. This make latest stdenv to use non-vanilla package definitions.
The final result is morally equivalent to your phrasing: "final stdenv has been built exclusively by packages available in the final stdenv". But mechanically we do it the other way around: we declare that previous (stage4 instance) is good enough and untied enough from bootstrapTools to declare it final and copy some of it's reference into final stdenv as is. While in reality it's built from various stdenv iterations. We expect them to be the same if we add more rebuild iterations, but we can't easily ensure it's always true.
Thus the more vague wording around the goals.
I hope I did not make things worse with this brain dump.

Is there any mechanical way to check that those those goals are met? I think the allowedRequisites and disallowedRequisites will ensure point 1 is not violated by accident (though we currently violate it deliberately using cp; checking hashes should catch that). I'm not sure if there's a way to do point 2 except by manual inspection, and I'm not immediately sure what to look for.

I don't think there is a good way to detect even our current libgcc_s.so hack :( It does not have a hash within that refers to a /nix/store path. The only hints are stale RUNPATH entries to nuked references and old compiler ID  in .notes sections. Both would be absent if we were a bit more eager removing these optional bits when we build bootstrapTools seed tarball.
cp is hard to detect reliably in general: for contentAddressed builds it's natural when produced binaries are identical to binaries produced on previous steps.

Can you put the command to generate that list in the comments too? That looks very helpful.

Sounds good. Added.

Rephrasing the blurb slightly and fixing the typo:
# These goals ensure that final packages and final stdenv are built
# exclusively using nixpkgs package definitions and don't depend
# on bootstrapTools (via direct references, inclusion
# of copied code, or code compiled directly by bootstrapTools).

I think this PR is good other than some other minor typos.

I don't think there is a good way to detect even our current libgcc_s.so hack :( It does not have a hash within that refers to a /nix/store path. The only hints are stale RUNPATH entries to nuked references and old compiler ID in .notes sections. Both would be absent if we were a bit more eager removing these optional bits when we build bootstrapTools seed tarball.

I did not actually check, but I guess it is not a given that the file, especially since it's a binary, would make it through without being changed. That is unfortunate but oh well.

Rephrasing the blurb slightly and fixing the typo:
# These goals ensure that final packages and final stdenv are built
# exclusively using nixpkgs package definitions and don't depend
# on bootstrapTools (via direct references, inclusion
# of copied code, or code compiled directly by bootstrapTools).

Applied this wording.

I think this PR is good other than some other minor typos.

Thank you!

Can we also get rid of the libmpfr hack if we add a second gcc rebuild? Seems like it, so it might actually be worth it.

Can we also get rid of the libmpfr hack if we add a second gcc rebuild? Seems like it, so it might actually be worth it.

The ideal solution is to make gcc's stage1 and stage2 be separate nix derivations.  then we don't have to build gcc twice (or rather we don't have to build it four times).  I think @Ericson2314 had some thoughts on this topic.

Hey, thanks for documenting all of this!
Except for lib{mpfr,mpc,isl,gmp}.a all of my review comments are just typos and minor stuff. But please do take a look at the comments about how those are handled so we don't mislead people into thinking they are built by the final gcc['s stage1 bootstrap compiler] -- they aren't!

Thank you, Adam! I applied (and squashed) all your suggestions as is. Great point on gcc's static libraries! The are very important to cal out.

Something got mangled with the goals, 1 and 2 are almost the same now. I think 2 should be the one about being compiled by the bootstrap compiler?

Something got mangled with the goals, 1 and 2 are almost the same now. I think 2 should be the one about being compiled by the bootstrap compiler?

Good catch! Re-numbered to start from 1. and reworded last goal in terms of code generators:
...
# 2. final stdenv must not contain any of the bootstrap files
#    (the only current violation is libgcc_s.so in glibc).
# 3. final stdenv must not contain any of the files directly
#    generated by the bootstrap code generators (assembler, linker,
#    compiler).

Thanks for doing this! I do want to make it saner per things like building GCC separately just as @amjoseph-nixpkgs said, but yes let that not be a reason not to document how things exist currently. I learned stuff reading this too!


Dishwasher missing/not loaded to Home Assistant

Hello,
I have a dishwasher and an extractor hood and moved from the official home connect app to this one. In the official home connect app both devices are listed but in the "home connect alt" version I only have a device for the extractor hood and a Home Connect Service, the dishwasher is not listed as device.
Any ideas how to get the dishwasher integrated? It's an SMD6ECX57E
official Home Connect Integration:

Home Connect Alt Integration:

Read the README

issues solved, a reset of the dishwasher solved the problem. However it is not necessary to check the connection over mobile phone without wifi. the important thing is that the connection to the device is established via cloud. this can be checked within in the home connect app in the settings of the device under the network section.


No documentation on what WinJS API is exposed to Angular controllers

I've been experimenting for about a day now, but I still haven't quite figured out how to call WinJS methods from an Angular controller.
For instance, I'd like to toggle a SplitView when the user clicks a certain button, but I can't figure out how to get a reference to the SplitView being used in my controller.
Are WinJS controls exposed as services, or are their methods supposed to be bound to from HTML?

There's a win-control directive that allows you to expose the WinJS winControl object to your angular scope:
<win-split-view win-control="variableOnScope">

That'll put the reference to your SplitView on the scope, so that you can then call methods on it.

For the case of toggling the SplitView, you can bind to SplitView's pane-hidden property.

Thanks @rigdern, I figured out the binding part after I posted the issue. But I'd prefer having a reference to the control instances as well, which @TheWrathOfConst's solution provides.
It would help if the winControl directive is documented in the README (or some other place) though.

An example has been added to the readme


eo appears to include "if"

Hello,
It looks like the examples use if to branch, but the language should not include any flow control constructs such as if

@yegor256 please, pay attention to this issue

Hi @sharpobject! This is kind of true. But the README says "flow control statements" not "constructs". The if's in the examples are objects, not statements.

Good to know! How can I create my own object that does conditional execution without using the if object?

Ok, I just wonder if there is a useful distinction between objects and statements when we're talking about objects that are impossible to implement in the language.

@sharpobject Ah, I see. In answer to your previous question then ("How can I create my own object that does conditional execution without using the if object?"): polymorphism I guess.

@pa9ey
Maybe he'd rather use something similar to LISP's 'cond'?
Is there a possible answer or is the language just devoid of that feature?

@LandonPowell In one sense the language is devoid of all sorts of things at the moment. I'm not trying to give a final answer, just an answer in the current framework of expected things (and to the original questions). A cond object is an interesting idea. Although it's only a sort of expanded if isn't it?
But even if we had that I think I would still have to answer the original questions the same way. (I've only just seen @sharpobject's edits by the way.)

@sharpobject I may not be following the questioning very well, so forgive me if so. But match and switch seem to be things that would be saying something like "you tell me what type of object you are and I'll tell you (or someone else) what to do". This doesn't seem very "elegant" nor very object-y.

Half the point of if is to branch execution, for instance to avoid infinite
recusion.
I think in EO we also want if to return a value as there is no other
immutable way to give back a result
If arguments to the if constructor are evaluated before calling the
constructor, then a regular if object would be of limited use (it would
revert to a choice object).
However if the if constructor takes two functions as arguments (if/else
branch) then it is all much easier. You may then need syntactic sugar
similar to Java's lambdas, or override two methods in the if interface
(more verbose, scoping repeatability issues), or pass two method objects
from arbitrary pre-existing objects (object2::method3)
If we go into lisp-land, then if is a Macro (does not evaluate it's
arguments, return new code block), which typically relies on cond macro as
a special construct.

feb. 2017 3:09 e.h. skrifaði "John Page"<EMAIL_ADDRESS>

@sharpobject https://github.com/sharpobject I may not be following the
questioning very well, so forgive me if so. But match and switch seem to
be things that would be saying something like "you tell me what type of
object you are and I'll tell you (or someone else) what to do". This
doesn't seem very "elegant" nor very object-y.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/yegor256/eo/issues/123#issuecomment-282314331, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAPd5b7O0eaMeDtlbhRSzAKN4snA35DXks5rfvKVgaJpZM4MHywu
.

@sharpobject we don't have if anymore. Instead, the object bool has if child object for branching.

@sharpobject we don't have if anymore. Instead, the object bool has if child object for branching.


Tooltips gets in the way of general operations in the editor

VSCode Version: 1.7.1
OS Version: Windows 10 64bit

Steps to Reproduce:

I'm finding that the hover over tooltip gets in the way of general operations in the editor. i.e. when trying to double click on words. The tooltip prevents selection (see the screenshot).
Can we have a setting to change the delay timing for these tooltips?

It is not currently possible to configure the delay until the hover is shown. It is however possible to disable it via "editor.hover": false

+1 some poslish on usablity would be wonderful

I don't want to see popups on everything I hover over, but do want them when there is an error (lint, etc.). Setting editor.hover to false turns off all hover help.
Can you make it more granular?  Or can you add a control-key+hover/click or something to show the tooltip?

It is however possible to disable it via "editor.hover": false

@alexandrudima Was this setting removed? It apparently doesn't exist. The hints hinder more than help me and I would really like to disable all of them. Disabling parameterHints didn't solve it either

"editor.hover": false seems to work although Code returned the settings as
Unknown configuration setting.
Note it won't work as per language setting, it has to be a general setting.
This need to be fixed and have more granularity on setting this: delay, what tooltip to disable, per language setting.
In the meantime, you still can use Ctrl+k, Ctrl+i to show the tooltip at the caret position.
setup: v1.10.2 on Win x64 pro

@freMea That appears to have done the trick for Mac v1.10.2 as well. Weird

Beware that if "editor.hover": false is used and you intend to use Ctrl+k, Ctrl+i to force tooltip display at caret position, you may encounter an error that will prevent tooltip to display in any case after VS Code has restarted like
Cannot read property 'startShowingAt' of undefined
To fix this, you have no choice but set "editor.hover": true, and restart Code.
Thus "editor.hover": false is far from being ideal since it will break the tooltips even when you try to force them to show up.

The best solution to avoid the "hover over tool-tip" annoyance would be to assign its invocation to a keyboard combination like "CTRL+SHIFT+T". This way it is always off until you need it at which time you could invoke it by hitting "CTRL+SHIFT+T" or a keyboard combination of user's choice settable in "settings.json" file.

@alexandrudima any reason why editor.hover is not a public setting? I have a user that searched for it and wants to enable.

@bpasero You're going to need to negotiate with @isidorn The editor.hover is programmatically disabled when debugging and programmatically enabled when debugging. Exposing the setting publicly would mean for the debugger code paths to read the setting from the settings service according to our language-based options to re-establish the user setting here.

@alexandrudima you describe it quite well, nothing to add here except please create a feature request for this and assign it to me. If there are users wanting this then we can surely add it.

Ok I opened https://github.com/Microsoft/vscode/issues/28535

I agree with @DSoa

Can you make it more granular? Or can you add a control-key+hover/click or something to show the tooltip?

A scenario occurring frequently for me is that the hover comes up while typing, and there's no way to hide it without using the mouse to click somewhere else. It's particularly frustrating when it's useless generated type information - which is enormous - like this:

I would love a simple key binding to close the hover information. There's a keybinding for editor.action.showHover but there's no editor.action.hideHover!

Yup, super annoying!

Yeah I am having the same issue as @pakastin and @wmadden , a way to choose a cap to character count on the tool tip before going to "..." would be great

One thing that would solve this "tooltip issue" for me is to make it NOT hit-testable so that the tooltip does not get in my way every now and then when I click the code.

Current workaround with 1.20.0 debian package:
# sudo sed -i s/HOVER_TIME=300/HOVER_TIME=1000/ /usr/share/code/resources/app/out/vs/workbench/workbench.main.js

Still going since 2016 - impressive! :-)
I'm just wondering how this isn't enough of a daily annoyance for the team members who actually know the implementation that it isn't resolved already, by necessity of maintaining sanity. Are they all using the vim extension exclusively, so they never have a need to click to focus in some code and be routinely prevented by the tooltip? It's always been a problem, but it seems particularly bad recently, which is why I came digging through the issue tracker. Is it really so complicated, that exposing a custom delay or required shortcut key hook is um, not an option? I like them sometimes, so disabling them isn't desired - just controlling them better somehow.

I think more granularity on usability would be very welcomed.

Something as simple as a longer delay (or delay setting) would go a long way to keeping the hyperactive feeling black boxes from constantly obscuring your direct actions and being helpful again.
In addition, lack of context granularity really becomes annoying when you're trying to select text.  If you have text selected, it's a lot less likely that you still want the tooltips to pop up at all.
Maybe it is possible to adjust the placement or styling of the black box to be a little less of a "close talker" intruding on my attention, so it's not so uncomfortable and distracting.

For me this is distracting and obnoxious enough that I start considering switching to something else entirely.  Which is sad, so I persist... for now.

I think all in all more granularity on usability would be very welcomed.

Something as simple as a longer delay (or delay setting) would go a long way to keeping the hyperactive feeling boxes from being obscuring and annoying to being helpful again.
Lack of context granularity really becomes annoying when you're trying to select text as well.  If you have text selected, it's a lot less likely that you still want the

I've had this issue since I first started using vscode, and wow am I surprised to find there isn't a solution??
The biggest annoyance is the issue wmadden brought up. typing multiple key/value pairs in an object while the tooltip pops up every new line, preventing me from using my arrow keys to jump lines, forcing me push esc to get rid of it. >(
I would like an option to selectively hide certain tooltips (because I do rather like the suggestions tooltip), or maybe the ability to move it to another part of the page, maybe upper-right corner.

These 4 changes would fix this entirely.

Only keep the tooltip open when the mouse is over the triggering code string itself. Hide using the usual delay once the mouse moves over the tooltip window.
Clicks on the tooltip window should pass-through to the code beneath.
Holding a modifier key (Shift? Ctrl?) to negate both 1 and 2 in case someone wants to select a code sample from the tooltip window itself.
Differentiate between informational tooltips (the ones complained about here) and code-completion prompts, and have separate "showAfter" settings for each.

There should definitely be a way to at least disable the arrow navigation inside tooltips. I'd much rather be able to navigate through my code than endless tooltips

Not being able to configure the hover delay introduces substantial friction to my use of VS Code.  Additionally a key binding to hide the view, such as esc, would be helpful.

I plan to look into improving things for the hover.
Just to clarify on expectations, this issue has gotten bombarded with various ideas or complaints about two different widgets. One is the hover and that shows typically when using the mouse over a symbol and the other is the parameter hints widget and that shows when typing (similar to suggestions) and renders the arguments that should be passed in to a method call. I plan to improve things for the hover.

Type
Screenshot
Link

Hover

https://github.com/Microsoft/vscode/issues/15667#issue-190133079

Parameter Hints

https://github.com/Microsoft/vscode/issues/15667#issuecomment-348932383

Parameter Hints

https://github.com/Microsoft/vscode/issues/15667#issuecomment-353326281

To summarise the current proposed ideas regarding hover:

The setting "editor.hover" should no longer be an internal thing and it should work per language.
Add option to configure the duration to hover until something is painted.
Add option to show only errors & warnings in hover and not compute semantic hovers.
Add option to configure hover to be shown with a different gesture than mouse hovering. (e.g. Ctrl key pressed and hover).
If "editor.hover": false, the hover cannot be shown via keybindings.
Allow clicking to pass through the hover (i.e. hover should not eat mouse events).
Do not show hover when selecting text
Hide the hover when the mouse leaves the triggering code.

All sounds great, except for

Allow clicking to pass through the hover (i.e. hover should not eat mouse events).

While I think this is probably a good default, I often copy from hovers, so I would request a way to allow the hover to have focus. Maybe Ctrl+click or something. So we don't loose that ability.

Until someone has a better suggestion, I'm just going to set the delay to a higher number...
"editor.hover.delay": 3000000

BTW, I think disabling the hover also affects the color selector popup in CSS files...

I believe that "editor.hover": false no longer works.

@chrisdothtml You're right. I guess the old setting "editor.hover": false was preventing the others from working. The delay property works as expected now too. Thanks!

Ah this bad boy has saved me from frustration "editor.hover.delay": 3000

I didn't see it on @alexandrudima 's list, but right now the hover appears directly above the hover element. I'd suggest adding 20px or 30px margin so it's a little less likely to get in the way.
"editor.hover.delay" seems to default to 300, I think 500 may be good enough. With 300, as I mouse up the screen, and I slow down when I get close to the text I want to select, as the mouse passes over the line below the hover for that line shows up... right on top of the text I was about to select!

Any movement on the "Parameter Hints" issue @wmadden presented? (comment link)
As his GIF demonstrates, this is not a hover-related issue, rather, the tooltip appears as you type.  ESC works to clear it, but the very next keystroke, the tooltip re-appears.  And it's VERY inconsistent, at least for me, in when it displays.  I've yet to determine the rhyme or reasoning.  At times, it even appears when typing a comment line...

"editor.hover.enabled": false
It worked for me

@edwarddim I'm glad "editor.hover.enabled": false works for whatever concern you've experienced.
The issue which @wmadden has described in his post, and to which I am referring, is not related to a mouse hover condition.  The graphic @wmadden provides in his post is exactly what I am experiencing.  The pop-up appears the same as a hover action, but it occurs without ever moving the mouse - it occurs when typing and/or using nothing more than the keyboard's arrow keys to move around in the code.
I'll restate that "editor.hover.enabled": false does not prevent that which is depicted in @wmadden's post.

I have Visual Studio Code 1.26.1 with Electron 2.0.5 on Linux and I have attempted to change the value of editor.hover.delay to 2000 (something different than the default 300) in the user settings. The result was the tooltips appeared after 2000 ms, but after restarting Code, the delay was again 300 (I guess since the tooltips appeared too fast). I have also attempted to set the value in the workspace settings and I've got the same result: after a restart, Code doesn't seem to take into account the value of editor.hover.delay in the user settings or in the workspace settings. It takes it into account only after modifying it to something else, then setting it to the desired value.

@red-lonely-neuron I previously had the setting "editor.hover": false (before it was deprecated), and found that that setting was preventing the editor from registering the new hover delay setting "editor.hover.delay": 3000 I was attempting to add.
So there's a chance some other setting is conflicting with your hover delay setting.

@reeddunkle: there's no other modified editor.hover setting either in the user settings file, or in the workspace one. There is a editor.formatOnSave set to false.

@red-lonely-neuron I don't think that "editor.formatOnSave" would interfere. Sorry, I don't have any other ideas.

@joaomoreno did we remove the setting editor.parameterHints for toggling on/off parameter hints ?

@alexandrudima It seems to have changed to editor.parameterHints.enabled: https://github.com/Microsoft/vscode/pull/55354 cc @jrieken

Thank you both. I can confirm that this fixes the parameterHints display issue.
"editor.parameterHints.enabled": false
Tooltips and its discussion is still relevant for this ticket.

Any progress on this? I'm just starting to try using vscode and I'm finding it very difficult with the parameterHints popping up and covering my code after I've already dismissed the parameter hint for the block of code I'm working on.

I just disabled every single tooltip I could find 🤷♂

I actually find the tooltips super helpful when they aren't blocking the actual code I'm writing.

this parameterHints issue is bothering me for a while now, up to the point I ended up here to find a solution.
Being able to turn it off completely is not really solving the issue imho, that's hiding the problem (but helps for sure with the trade off to loose useful hints).
One solution I can think of, is to let one set where he wants this popup to appear, something like "editor.parameterHints.position" with options like cursor, topLeft, topRight, bottomLeft, bottomRight, etc
That way we could still enjoy the hints without having them overlaying the code we're working on.

In the past I've coded modals that do exactly as you describe, @sylv3r .
As part of your feature request, please provide wireframes, some user interaction flow (gif's are worth a million points), edge case solutions (e.g. what should happen when the cursor is at the extremities of the screen), and other potential problems I haven't thought of off the top of my head :)
Not saying I'll work on it but hopefully this helps describe the problem complexity.
Honestly since I turned off the feature a year ago, I feel like I've opened more library code to fully understand dependencies being injected..

Might I suggest implementing modifier keys to control the behavior of these popups and hint windows and whatever the heck you call them? For example, by default, have these popups visible but non-interactive (not clickable). You have to hold CTRL/CMD to be able to interact with the popups—that's one modifier key. Another one would be SHIFT perhaps, which would make the popup transparent while the key is pressed.
This general "Hold a modifier key to interact with something" pattern is already established for when you click on links in those popups, so why not extend it to affect the interactivity behavior of the entire popup?

A bar/panel at the bottom of the editor that would appear with no delay could do the trick too.
But with the new flexible layout released in may 2020, a parameter info view that one can move everywhere would be nice too. Maybe a new activity being oriented towards code documentation that would implements the current parameter info tooltip as well as other documentation aggregator like DevDocs would be nice and complete.
I have a workaround to have access to this info tooltip without being annoyed by them. I explain it here #102198 because this highlighted another bug.
Here are other related issues more or less duplicate : #33752, #16221 (an awesome feature suggestion), #51253, #30797, #63144.

I endorse the suggestion to make the default "editor.hover.delay" greater than 300 ms.
It ironically prevents double cliking un-used variables to copy the name and paste elsewhere, because it pops up a tooltip about them being unused.

I endorse the suggestion to make the default "editor.hover.delay" greater than 300 ms.
It ironically prevents double cliking un-used variables to copy the name and paste elsewhere, because it pops up a tooltip about them being unused.

can we get a setting to change the anchor position for the hover tooltips? I actually like the 300ms delay, but I'm forced to change it to 700 because it gets in my way. If you could just move it so it doesn't cover up the thing you're clicking on, then the short delay wouldn't matter. Especially with web languages because there's an MDN documentation link at the bottom of the tooltip. So say I'm trying to click on a line but I end up hovering over a CSS property that's beneath it. Right before I click, the tooltip pops up, and now my cursor is right over the MDN documentation link. So now instead of clicking in the editor I'm opening a firefox window.
This happened to me on a daily basis until I just bit the bullet and increased the delay. But now I find the delay irritating too lol. A simple solution is to just make the tooltips anchored to the top right of the hovered context. And not just moving it to the right but move it up a little bit too. Right now it actually seems to overlap with the hovered line by like 3 or 4px. Instead, the lower edge of the tooltip should run halfway through the line above the hovered line. That way there's still room to click on the line above the hovered line.
Ideally this would be a preference so users can choose between anchor points as well as a fixed position. Some users might prefer to have the tooltips completely out of the way of the workspace. Well, a fixed tooltip would still be in the workspace, but it wouldn't be in the immediate vicinity of the cursor, which means it wouldn't be in the immediate vicinity of the code the user is currently working on. I might actually prefer that myself, but since the option doesn't exist, I haven't tried it yet. Right now I think my preference would just be to move the tooltip up and to the right a little bit. Or to anchor it to the bottom of the hovered element instead, and then move it down and to the right. That's how tooltips are typically implemented in browsers.

can we get a setting to change the anchor position for the hover tooltips? I actually like the 300ms delay, but I'm forced to change it to 700 because it gets in my way. If you could just move it so it doesn't cover up the thing you're clicking on, then the short delay wouldn't matter. Especially with web languages because there's an MDN documentation link at the bottom of the tooltip. So say I'm trying to click on a line but I end up hovering over a CSS property that's beneath it. Right before I click, the tooltip pops up, and now my cursor is right over the MDN documentation link. So now instead of clicking in the editor I'm opening a firefox window.
This happened to me on a daily basis until I just bit the bullet and increased the delay. But now I find the delay irritating too lol. A simple solution is to just make the tooltips anchored to the top right of the hovered context. And not just moving it to the right but move it up a little bit too. Right now it actually seems to overlap with the hovered line by like 3 or 4px. Instead, the lower edge of the tooltip should run halfway through the line above the hovered line. That way there's still room to click on the line above the hovered line.
Ideally this would be a preference so users can choose between anchor points as well as a fixed position. Some users might prefer to have the tooltips completely out of the way of the workspace. Well, a fixed tooltip would still be in the workspace, but it wouldn't be in the immediate vicinity of the cursor, which means it wouldn't be in the immediate vicinity of the code the user is currently working on. I might actually prefer that myself, but since the option doesn't exist, I haven't tried it yet. Right now I think my preference would just be to move the tooltip up and to the right a little bit. Or to anchor it to the bottom of the hovered element instead, and then move it down and to the right. That's how tooltips are typically implemented in browsers.

I don't think this problem is solved by changing the position OR the duration.
The issue is the tooltip covers content when trying to interact or read it.
This person has a fantastic suggestion:

hold CTRL/CMD to be able to interact with the popups—that's one modifier key. Another one would be SHIFT perhaps, which would make the popup transparent while the key is pressed.

Another idea (with possibly less conflicts) is to support a "double tap" for modifier keys.
Double tap shift to toggle the tips on/off would be amazing for my workflow.

Could the click behavior on tooltips be 'fixed' with an option to apply some CSS like  pointer-events: none;? (Then that can be toggled with a modifier key or double-tap modifier.)
Just brainstorming... 😇

Could the click behavior on tooltips be 'fixed' with an option to apply some CSS like pointer-events: none;? (Then that can be toggled with a modifier key or double-tap modifier.)

I thought about that, but it would be impossible to select text inside the hover (which can contain useful stuff like the types of what's under the cursor) :-/ . Also I'm not sure scrolling would still work with pointer-events: none

I think I used the wrong word "option."
I'm not sure what options might be required, but I've got 2 rough behaviors in mind:

The tooltips show as configured, however in order to interact (click or scroll) I'd hold down a modifier key [ctrl] (or similar.) Any click on the tooltip would effectively click the item immediately beneath as though the tooltip wasn't there. Holding the modifier would be the only way to scroll, or click on links.

Another approach that might work: add ability to rapidly toggle the tooltips on/off. Where the tooltips wouldn't show on-hover at all, until I double tap [shift or ctrl]. Then they would stay enabled until I toggle them away.

Modifier keys could be fine for most users, but I don't see how the problem isn't solved by changing the tooltip position. I went ahead and tested it with Monkey Patch and it works just fine. I don't enable Monkey Patch in normal usage so it isn't a solution for me personally, but it does prove that changing the tooltip position solves the problem of clicking the tooltip when you're trying to click text.
And of course, requiring a modifier key to interact with tooltips/popups might solve this rather marginal problem for us, but at the cost of making the entire program less accessible for everyone. Locking it behind an opt-in pref could work, but why bother if modifying the tooltip position would mitigate the issue equally well with less cost?
Maybe you're thinking of some other use case that hasn't occurred to me. My own concern is with a scenario where you're trying to click a region of the text area that's covered up by the tooltip. If the tooltip is moved far enough away from the text that generated the tooltip, then there's no way for the tooltip to block the mouse.
Think about it like this — if the tooltip is offset from the text that generated it by 20x20px, then any attempt to click the text area underneath the tooltip would actually succeed, because it would require you to move your cursor off of the generating text, thereby closing the tooltip. By the time your cursor reaches the region that was covered up by the tooltip, the tooltip has already disappeared, since it was generated by text that's 20x20px away from itself.
Incredibly simple fix, it could even be implemented with CSS alone although it's probably better to go lower level so it can't bleed off the window by the offset distance amount. Modifying whatever component vs code uses to anchor the tooltips to the generating text I guess.
The exact offset might depend on how quickly the tooltip fades after the "mouseleave" event triggers on the generating text. A shorter fade duration/delay means the offset can be smaller. By that I mean the delay before the tooltip fades after the cursor leaves the generating text, not the delay before the tooltip opens.
A fade duration + delay of 0 would mean even a few pixels should work in most cases, but at that point it depends on the timing between a mouse movement in the OS and the end of a single run of the event loop, which I suppose is gonna depend on how busy the javascript engine is. So there's definitely some minimum offset required, but it can be pretty small if the tooltip fade duration + delay are shortened as much as possible.

@aminomancer What you're not taking into consideration is that some tooltips have elements inside that are intended to be clickable.
Let's define the issue clearly:

Tooltips can contain links, and thus need to be clickable.
However, tooltips also cover up/obscure code that the author may be trying to interact with.

Therefore, the solution becomes clear:

By default, tooltips need to be mouse-phobic: they should rapidly fade to transparent when the mouse moves over them. Neither should they respond to clicks (assuming someone manages to click on them while they're fading out); instead, any clicks should be passed down to the code beneath them.
When a modifier key is held, it removed the mouse-phobia from the tooltips, allowing them to remain on-screen when hovered, and to register mouse clicks.

The one caveat with that is that the modifier key should not be one that affects text selection; eg. if ALT-clicking makes multi-cursor selections, ALT would be a terrible modifier key to hold to make tooltips clickable. Presumably allowing a user-defined modifier key would solve this potential issue.

Here’s a solution that works for me with no modifier keys:

Tooltips have a dedicated area of the screen away from the text selection point.
Normally, tooltip area shows tip for what is under the mouse cursor, with no delay, and no clicking.
When the mouse cursor is over the tooltip itself (or after a keypress with no mouse movement) the tooltip area shows the tip for what is at the text selection point.

This keeps the tooltip area away from obscuring the text, makes links (and the color picker!) clickable, and allows very fast “scanning” of tips by just moving the mouse around.

Well said @proimage - Another issue that @aminomancer touched on is the issue of a delay. That alone means an offset wouldn't work in every case.
For example, if you want to click 2 or 3 lines above the cursor, just as the tooltip opens, you'll still run into the problem.
@trevyn's suggestion of a dedicated area is another good option.
I suspect it would be a huge benefit for accessibility (e.g. folks sensitive to motion, or those using non-mouse/alternate input methods, etc.)

Why is this issue still open when there is editor.hover.sticky setting?
And I see no mention of it in this thread.
Set it to false and the tooltip hides when hovered :)

Why is this issue still open when there is editor.hover.sticky setting?
And I see no mention of it in this thread.
Set it to false and the tooltip hides when hovered :)

Weren't we just talking about how tooltips can contain hyperlinks, i.e. to MDN documentation?

@aminomancer I guess I missed that part, I never needed to click on a tooltip so it never came to my mind

This is a super annoying issue. I like tool tips. I use them all the time. but VS code is especially aggressive in displaying them.
I specifically have a huge issue with them popping up while I'm typing, covering up the line above it, which I sometimes want to actually read while I'm typing. Just like an offset reposition setting that a user could configure would be huge. Either that, or like a half second delay.
Also noting issue originally filed in 2016, so apparently I'm one of the few who finds this annoying and distracting.

Allow me to reiterate my solution, which in all honesty I believe to be ideal:

Tooltips are "transparent" to mouse clicks by default.

When a mouse click "goes through" such a tooltip, make the tooltip disappear.

If you hold down a (user-selectable) modifier key, tooltips can be interacted with.

CTRL/CMD might be a good default, to allow easy copy-pasta & link clicking without having to hold down an additional modifier key.

I specifically have a huge issue with them popping up while I'm typing, covering up the line above it, which I sometimes want to actually read while I'm typing. Just like an offset reposition setting that a user could configure would be huge.

I would love to have the tool tips appear a little further away from the cursor, so an offset reposition would be great.
FWIW, there is already an option to delay appearance of tooltips. I use it but depending on circumstances sometimes I would like it faster and sometimes I don't want it at all. So the present delay option is far from perfect.
I think one of the problems I have is sometimes the tooltips are huge - a great chunk of a constant array or whatever that I don't want blocking the stuff I want to see. That amplifies the problem greatly.

@Sofianio

Why is this issue still open when there is editor.hover.sticky setting?
And I see no mention of it in this thread.
Set it to false and the tooltip hides when hovered :)

@Jimbo99 an offset can't ever know what lines you wish to be looking at.
The discussion around 'Sticky' or 'Offset' options will NEVER accommodate the multiple use-cases here.
I hope no-one is burning time building support for offset or fancier delay settings.
I've been noticing this issue more frequently as I coach & mentor people. Pair programming can be stressful anyway, but this behavior makes it border on painful. As navigator I need to be able to scan the code without asking "can you move your mouse? I was reading that..." 20x a session.
It violates a critical best practice "not to micro-manage the driver mid-flow."
It's now crystal clear to me how it harms momentum & focus for both driver & navigator.
I did some back-of-the-napkin math from 7 hours of pairing this past week.

The frequency of unwelcome tooltips is between 20 seconds and 4 minutes. (Defined as: anytime the users has to click around or move the mouse to get under a tooltip.)
The majority of delays fall between 2-15 seconds. Sometimes minutes as the tooltip can drag focus into other parts of the app.

These small delays might be fine for some folks, however I feel my ADHD get turbocharged. I struggle to build momentum & get into flow.
Here's a recording of me trying to click on methods the tooltip covers:

Essentially, I don't want tooltips to be interactive or perhaps show at all until I hold down a modifier, like [SHIFT].
It could also be a "sticky" state you toggle by Double Tapping [SHIFT] or whatever the user configures.
Considering most technical folks are already familiar with Ctrl+Click or Cmd+Click to open things in a new tab. This could extend behavior in a roughly similar spirit: holding the key toggles either showing, clicking, or scrolling.
Some toggle behavior/states could be:

show-while-modifier-key-pressed OR
default to show (similar to current defaults,) but grayscale until interactivity is enabled. Clicks should passed through to underlying content as if the box isn't there.

I just want to be able to pick where the tooltip appears 😞. Lately it's been so obstructive that I'm considering going back to my vim setup, which doesn't have this issue because I'm able to select the position of the tooltip.

As an inspiration I’d like to show how KDevelop deals with this problem. It combines some ideas that were already mentioned here or in other issues. I do not want to say that KDevelop has the perfect solution. However, it has an existing solution so it can be tried out to get a feeling which parts of it make sense.
Tooltips in KDevelp are accessible via hovering with the mouse and via keyboard (by pressing Alt). When using the mouse, the hover delay is also applied when switching between tooltips. Therefore the tooltip stays in place when the mouse accidentally hovers another hover target for only a short amount of time. This allows placing the tooltips farther away from the hover target to keep more context in view while still allowing mouse interactions with the tooltip.

Alternatively the tooltip content can be show in a panel. As soon as the panel is visible, all tooltip content is shown there and tooltips are disabled. The panel content follows the mouse cursor as well as the text cursor. The idea of using a panel is discussed in #51253 and was also mentioned in #63144. The Docs View extension implements this idea partially, however, this extension considers only the text cursor and only documentation therefore it cannot entirely replace the tooltips.

Personally, I quite like the idea of dynamically switching between showing the information in a panel or in a tooltip simply based on the visibility of the panel. Also, I think this solution might be applicable to both hover tooltips and parameter hints.

This issue has been open for five years. I didn't know VS Code was an Atlassian product.

I love having all the information popup because I'm learning right now but back off from the cursor a little bit. As @Flupp shows in Kdevelope the popups are a couple of line widths off the cursor.  vscode is literally on top of anything I'm trying to type so I can't even see what I'm typing.
Often times the suggestion popup stays after I type a semicolon at the end of the line and then when I hit enter to go to the next line it replaces everything I just typed with whatever it was suggesting.
It seems there are several trigger keys like when I try to type it('should... for a jest test as soon as I type '('' it inserts some code that does I don't know what but starts with the letters 'it' . When I see the suggestion pop up I have to type a space to make it go away and then backspace to finish typing what I was trying to type.
I just found the setting today to make it stop adding unwanted import statements to the top of the file that cause crashes and confusing errors.  In some cases I went back to previous code in review and just happened to see these extra import statements and couldn't figure out how they got there. Luckily in those cases the statements weren't causing any errors but in many cases they did until I figured out what was going on.

How am I STILL getting emails from this? I posted an issue a couple months ago about validation and it was fixed within less than a week without anyone else voting. Why is this particular issue taking so long to move forward?

My original issue is solved. There is lot of other issues posted here that are in and around the original issue.
Going to close this off and people can open their own issues if there still not solved

How am I STILL getting emails from this? I posted an issue a couple months ago about validation and it was fixed within less than a week without anyone else voting. Why is this particular issue taking so long to move forward?

To put it into perspective, when this issue was first posted, Americans were still in shock that Trump had won the 2016 elections.

These tooltips are just extremely annoying. The only things the vscode team cares about is if the product gets more addictive, and if they can use it to push users even further into azure.

This issue is not fixed, please re-open it. The tooltips are incredibly annoying whether they appear immediately above or below the line your cursor is on, it would be so much better if you could set the number of lines (above or below) the cursor where any tooltip should be rendered.
Disabling tooltips is not a solution because they actually contain very useful information.

I agree the tooltips are annoying but I'm pretty sure theorizing about sinister conspiracies by microsoft isn't gonna help get this issue fixed

I tried finding the 'mouse hover wait before showing tooltip' variable in the source code but did not suceed. For anyone else who is trying to edit the code, I don't think you will have sucess changing the MOUSE_MOVE_MINIMUM_TIME variable (in src/vs/editor/browser/controller/mouseHandler.ts#L66).


Connect to VSTS behind proxy

How can we specify the http or https proxy setting for yo team?
The npm config for proxy and https-proxy does not seem to work
yo team hangs at "Getting Agent Queues" and then exits:

Can you check your personal access token?  You can test is with the VSTeam PowerShell Module. All the issues I have ever seen with Yo Team are PATs that are expired or don't have the correct permissions.

Hi @DarqueWarrior , I'll have a look and let you know. It all works when I'm not on my corporate network. It has something to do with the proxy. Strange...even though I set it in npm. Not sure if there is a yeoman proxy setting?

I am not sure. But my generator just makes https calls to the VSTS REST API. Could your proxy be blocking it?

Great idea @DarqueWarrior . I'll test the VSTS REST API behind the proxy and get the domain white-listed if need be. I'll check back with you soon. I create the PAT today for 1 year. So it can't be expired.

Hi @DarqueWarrior , would you be able to tell me what hostnames/fqdn and IP's your generator is making https REST calls to? I would like to get them whitelisted on our corporate proxy and firewall


Linq and Entity Framework 7 support

I would like to see you support LINQ the standard way in C# to work with data: Linq2Objects for data in memory and Linq2SQL through different ORMs. So different sources but the same language to work with them.
Under a commercial view point it is as smart as your decission of supporting SQL. We all have Apps in .NET based on NHibernate or Entity Framework which use LINQ  for accessing SQL bds. Indeed now for me is difficult to think in a project with relational databases involved where an ORM is not used.  So if you want to make it easy we move to your db, best would be offer a LINQ API. Even better than this would be you offer an Entity Framework 7 provider. This version of this ORM will support SQL and NOSQL DBS so it will make easier to devs to change from a relational db to a non relational one.
Problem of ORMs with LINQ is the high cost of transforming LINQ to SQL. They solve it caching compiled queries. Problem happens specially with dynamic LINQ queries (those you would do it concatenating strings if you were writing SQLs).  Dynamic LINQ ones can't be cached.
And those ones are the ones programmers would prefer to use if they could forget of performance.
The other problem of ORMs is they don't produce optimal SQL queries.
So devs despite we would love to use LINQ and dynamic LINQ because it is a typed language and it heps us to avoid typos and saves us of a lot of extra work. We use SQL for complex queries and avoid dynamic LINQ ones.
The point is the bottleneck is LINQ2SQL. As far as I understand LINQ2GraphDB won't be a bottle neck. Why? Because LINQ is an extensible language for manage objects, it is OO language. The gap between OO and relational DBs is bigger than the gap between OO and graph dbs. So, this gap won't be a problem for a graph db like for a relational one.
If you finally offer a LINQ2Graphdb driver we would be able to use LINQ for complex queries and dynamic LINQ without be worried of the performance hit it could cause.
Regards

Yes to develop a LINQ driver is not easy but you can do it gradually as this guy is doing with MongoD with FluentMongo'.
https://github.com/craiggwilson/fluent-mongo/wiki/Linq
He adds native support LINQ gradually.
I think it would be a good idea you start adding a minimum support to LINQ and while you are busy working in other priorities of OrientDb maybe other people interested like me can send you pull requests supporting more subsets of LINQ.

Related to make a provider for EF7 once you have developed a LINQ provider it shouldn't be difficult to have the EF7 provider. I think you can start using as a base the in memory EF7 provider it includes but instead of saving data in memory you should save data in OrientDB

The whole ASP.Net 5 is focusing on ease of use and interoperability. As I read on the EF7 GitHub page they are relying on re-linq to ease the Linq implementation. They are also providing a sample project for a EF7 provider. Although I would wait till they update the provider implementation guideline. The wiki page clearly states it is out of date. I am currently diving into those matters, so perhaps I'll have a look at it as soon as the guideline is updated.

Guys, I think that writing LINQ provider to orientdb is an excellent feature that will give .NET developers the ability to quickly start using this database.
I spoke with the development team orientdb and they tell me that SQL syntax changes after release 2.0 which should be soon.

Sounds good, by the time the EF project might have updated their guidelines as well. Then all parts would be in place.

I can't even fathom how LINQ relates to a graphical model. I would strongly advise against doing a LINQ provider. Steal from LINQ what looks like what will fit and just build a sane querying api likely with fluent chaining. If you actually build LINQ into this, you will spend a never ending number of years hunting down the infinite number of edge cases users will complain about. I could never in sound conscious recommend a person go develop a LINQ provider.

Can you please show a sample some of those edge cases you are talking about?
I use currently a Siaqodb an object/document oriented db that offers as its only API a LINQ provider and I haven't find the edge case you are talking about.

Dynamic LINQ indeed is a fluent API that offer fluent chaining what is the problem with that? I think that using the same API other dbs use is good to help devs to migrate from one db to other. If LINQ limits you in some way you can enrich your provider with extra functionality to help devs to leverage the characteristics of your concrete db

one one side developing a linq provider is propably one of the hardest things someone can do.
on the other side working with linq and the benefits (refactoring, intellisense, etc.) may be worth the effort.
propably most devs will need for select query purposes on the first instance - insert and update have a much lower priority as these relate to batch updating large sets of documents.

@chubie,
You absolutely right, current implementation already support fluent API for select statement to.
Look to the this test case https://github.com/orientechnologies/OrientDB-NET.binary/blob/master/src/Orient/Orient.NUnit/Query/SqlGenerateSelectQueryTests.cs

LINQ is relatively straight forward for simple selects and where caluses, but once people start tossing JOIN, AGGREGATE, GROUP BY, UNION, EXCEPT. It's just a never ending set. LINQ providers work great when they're mapped to SQL Database as there's almost an exact 1:1 relationship between operations (unsurprisingly since LINQ is modeled after SQL).
You just end up with a mine field of combinations that may or may not be supported. LINQ and IQueryable is the leakiest abstraction ever made.

@dotnetchris
i fully agree with you - of course linq has -- by design -- a strong relationship to sql query syntax.
but on the other hand orientdb has also a sql query syntax and many operations would be portable to linq.
with this feature the client driver gets - imho - usable.
writing queries as formatted strings works obviously in small projects but when projects grow and get more dynamic it get's much more difficult.
we're currently developing a quite large groupware that uses many entities and rely strong on features shared across completely different modules.
at the moment we're using an extended ravendb (enhanced by a quite strong security model) as document store that works quite well.
unfortunately we've to implement some kind of foreign key concept to ensure concistency of the database relationships.
in order to reuse common query clauses depending on client side submitted json filters we're using interfaces and generate additional clauses. this means we need queryables that provide the type of the current queried set (which may change during the query due selections and so on).
for statistical purposes we're using linq2sql - but we can reuse out query filters from the ravendb.
in that point i see a much more flexible point in using linq.
when writing a query i don't want to care about the database itself or the database model in some respect. a good linq provider should translate the most important features into the best database dependend methods.
therefore a suitable linq provider for the requirements in our solution (1 mio lines of codes / around 7 independent modules) just requires a suitable filtering method (where), edge traversal (generating new queryables of another type?) and a good select clause.
when optimising for the database and a special case that has to be really optimized the native syntax may still be used. but in most cases it's important to write stable and maintainable code.
nobody likes to debug systems that break because some inputs have not been escaped correctly.
handling parameters in general is a weak point (a linq abstraction does not help at this point) - i don't want to get back to the times where sql injections have been the favorite way to attack the systems.

@chubie that's why i'm suggestion that Orient create a LINQ like syntax for select, where, and other relevant methods, but not enumber itself to try to be a true LINQ provider.
I fully support strong typing all the way. RavenDB aside from having it's LINQ provider also has a strongly typed LuceneQuery Api that is not LINQ but is LINQ-like. I would strongly recommend emulate the LuceneQuery Api of RavenDB, not the full "LINQ"

Well, LINQ maybe is near from SQL however if you take a look with a profiler to what an ORM produces to tranlate LINQ to SQL many times it sucks. So maybe it is not so near as we initially think.
I prefer to see LINQ as a language to manage objects with common operations you usually do with objects. There are operators like JOINS that are very used when you work with a relational db. But there are other more object oriented like INCLUDE that I avoid as much as I can when I work with a relational db because it has an horrible performance. Just the opposite happens when I use an object oriented db (a graph db should be the same). In that case INCLUDE method has a very good performance in comparison to a relational db. Furthermor WHERE method filtering for properties of related object you didn't INCLUDED or JOINED in your query work very well in comparison to a relational db.
I agree OrientDb can implement a LINQ provider only for select, where, include, and other methods they think this db can give the best performance using native calls (better than a translation to sql that have to be translated to a native call). For tther LINQ methods they think the capabilities of the db are not going to provide a better performance or that have a complexity of programming them that are not worth in the value they return simply can use default implementation of LINQ to Objects instead of offering all the methods as a LINQ to DB implementation.
In fact this is the approach Siaqodb took. Initially they offered support by the db only for a bunch of the LINQ methods they consider a must, for the other methods they simply used LINQ to Objects (this operations were executed with the data in memmory). With the past of the time and hearing the request of the users they have added support for other methods they have find ways to implement improving LINQ to objects performance.
So, if this path is available I would prefer to use a LINQ provider that fits the standard instead of using a LINQ-like provider in order to make my code less dependent of an specific db.

@jersiovic don't ever try to fool yourself. Your LINQ code is 100% coupled to your database. The only rare exceptions is MYSQL vs MS-SQL vs PostGres, maybe just maybe you can get away with cross compatibility. That has to do with the fact they rely on the ANSI SQL standard however and drive through a provider model. That is not relevant to anything else.
Do you really believe you could write a query for OrientDB and have it mean anything on MS-SQL, RavenDB, Couch, or LevelDB? Sure maybe if it's the most basic query in the world single thing, basic filters but anything outside of that trivial scenario?

Indeed, currently I'm sharing code between Siaqodb a  Nosql db without any sql API and Sql Server through Entity Framwork. How? Through LINQ.An it is not a trivial scenario for sure. I don't say it was easy but I say it has been possible with tye help of Siaqodb guys that were very open to new ideas. The point is now after see the result I would like to see other dbs offer the same LINQ api.
Sql is ok but as it is it is only useful for relational dbs. What you say was true in the past when all dbs were relational. Now with all the new Nosql dbs a new standard oriented to objects is needed or you are happy with a different API for every different Nosql db? By the moment nearest standard available is LINQ.
If RavenDB or other doesn't work with LINQ is only a matter of interest, because if they want they can specially in the conditions I pointed in previous post..

IMHO Linq to Sql  is/would be great with OrientDB and doable. You can easily refactor your code when schema is recreated from objects. Far more better experience than producing sql string or fluent interface.   You can also detect where your fields are used, queried,set and so on.
Prefetchable objects or edges could work incredibly good with lambdas but you have to introduce "views" properties for edge labels.
I did some attempt in my company with internal driver  to implement something close and following queries works like charm.
// prefetchable objects may work like here
var df2 = db.Query<Film>().Where(t => t.Budget == film.Budget).SelectWithPrefetch(t => t,t=>t.Cast);

var travoltaJohn = db.Query<Actor>().Where(t => t.FirstName == "John" && t.LastName == "Travolta").FirstOrDefault();

var df5 = db.Query<Film>().Where(t => t.TheMostFamousAward.Year >= 1990 && t.Genres.Contains(film.Genres[index])).Flatten( t=> t.References.ToRecords());

var df7 = db.Query<Film>().Where(t => (t.StarringActorsCount > 0) || (t.Budget != 0)).Flatten(t => t.TheMostFamousAward.Who).OrderBy(t => t.LastName).Take(2).Skip(1);

var df = db.Query<Film>().Where(t => t.Colorful == true).Select(t => new { BudgetClone = t.Budget, AnotherVar = t.Colorful });

Linq would be a awesome idea ! The current syntax is quite difficult

Yes, it would be wonderful, we considering move from Mongo, but we used linq in its' simplest form i.e.
r=> r.Application=model.Id but in so many ways that nobody would want to rewrite that

Has anyone considered supporting Gremlinq? https://github.com/Loupi/Frontenac/wiki/Gremlinq
From the description: "Gremlinq is a Blueprints ORM and graph traversal language based on Gremlin and LINQ."
Gremlinq is part of Frontenac (Blueprints implementation for .Net). Support for Frontenac in OrientDB would be great.


Virtual network gateway custom routes feature

Resource Provider
What is the Azure resource provider your feature is part of?
Network
Description of Feature or Work Requested
Provide a brief description of the feature or work requested. A link to conceptual documentation may be helpful too.
This feature is added for customers to specify Custom routes (list of Ip addresses) on Virtual network gateway to have access to.
Minimum API Version Required
What is the minimum API version of your service required to implement your feature?
2019-02-01
Swagger Link
Provide a link to the location of your feature(s) in the REST API specs repo. This should be on the master branch
of the REST API specs repo.
https://github.com/Azure/azure-rest-api-specs/blob/master/specification/network/resource-manager/Microsoft.Network/stable/2019-02-01/virtualNetworkGateway.json
Target Date
If you have a target date for release of this feature/work, please provide it. While we can't guarantee these dates,
it will help us prioritize your request against other requests.
This feature is already released.

Bumping to Sprint 67 due to higher priority direction from NRP.

@Nilambari Hello. Could you please provide me with the corresponding PR? I cannot figure out which part is related with custom routes feature.

@Nilambari ping

@Nilambari Thanks. I will begin the implementation soon.


Searching mode sometimes triggers when not inside HoH

This is extremely rare. I think it's only happened about twice in 10k hoards.
I was also not watching it when this happened so I do not know the exact steps that occurred but when outside HoH, the pathfind triggered for the (previous?) step in the ruby sea, thus causing you to go to the middle of the ocean and being stuck there.

so i just had this happen. he found the hoard and died to trap explosions and monsters on his way there.
On the scoreboard he tried leaving a bazillion times - then instead of queuing again he tried to run through the entire beach area until i stopped him manually.
Maybe add a Zone ID check resetting the plugin to "i need to queue" when zoneID is wrong in between refreshing navmesh coords where to walk to should fix that?


District buildings are not are not aligned correct

District buildings are aligned too far to the right. Once you add a building to the production queue the alignment is correct

I have the same bug described above as well.

This is caused by the same bug as #224, please see my comment there for help with this issue until I get a fix pushed out


Game saved!

Good eye. I never use the confirmation exit, so that bug has probably been
around for a while now. It's fixed in dev and will go out with my next
batch of changes.
On Thu, Aug 20, 2015 at 1:01 PM messerman<EMAIL_ADDRESS>wrote:

/-+-+-+ +-+-+-+-+-+-+-
|G|E|M| |W|A|R|R|I|O|R|
-+-+-+ +-+-+-+-+-+-+-/
  GW v0.10.8

=======================
(N)ew Game
(R)esume Game
(A)bout
(H)elp
(O)ptions
(L)og of Attempts
(C)heck for Updates
(E)xit

Resuming game...
[>>> SKY TOWER (MASSIVE DOOR) <<<]
Before you lies a massive collection of cumulus clouds that form into
a seemingly impenetrable door, beyond which may well be your doom.

Game saved!
—
Reply to this email directly or view it on GitHub
https://github.com/michaelchadwick/gemwarrior/issues/51.

yup, I got this error too:
 GW> q
You sure you want to quit? (y/n) n
undefined local variable or method `answer' for #<Gemwarrior::Evaluator:0x007fc42304f2b0>

The new version, 0.11.0, should have fixed this (as well as added MANY things).


Rome places files within frameworks individually rather than replacing entire framework on download

Currently, when you download a framework that has less files than what's on disk, Rome will leave the old files in place within the framework's directory structure.
For example, in CocoaLumberjack 3.2.0, the DDOSLogger.h file was added. If you have CocoaLumberjack 3.2.0 on disk, and perform a rome download CocoaLumberjack, the DDOSLogger.h will remain on disk. However, when you perform a build, you will get a failure with the following error:
<module-includes>:1:1: Umbrella header for module 'CocoaLumberjack' does not include header 'DDOSLogger.h'

Once you remove the DDOSLogger.h file from disk, the build continues within errors.

OS Version macOS 10.12.4 (16E195)

For example, rsync's handles this via its --delete parameter:
--delete                delete extraneous files from dest dirs

However, I can't think of a reason why you wouldn't want this behavior with rome.

Got it. The solution is to simply delete the current framework folder before unpacking. I don't believe there is a reason to a an explicit flag for this. It should be the only behaviour acceptable.

@erichoracek  please try pre-release v<IP_ADDRESS> at https://github.com/blender/Rome/releases/tag/v<IP_ADDRESS>

@erichoracek  Any feedback?

Tried it out, looks good to me!

all right, off we go with a release then!


Making the Haskell track more gradual

Making the Haskell track more interesting for beginners #192
Making the Haskell track more gradual
Anyone would like to take the humongous task of solving at least part of this?

Check what knowledge is needed to solve each of the exercises.
Reorder the exercises creating the most gradual progression possible.
Change and move some exercises to make it even more gradual.

If we did this at least for the first 20 exercises it would be nice. If we did this for the entire track it would be fantastic.

Comment from a user about robot-name:

This exercise was brutal! :)
I found the jump in difficulty from the last exercise to this one to be quite severe!

I went through and tried to write down a few notes for each exercise. Each line has the exercise name, a space, then a list of notes. I could not be exhaustive, and for some exercise I was too lazy to figure out what to write so I only wrote "?"
Stars mean I think the exercise is quite involved.
I don't know how useful this list will be. It is likely it will be need to be improved and completed. I would say big things to pay attention to are the problem that use the IO monad, and stuff I marked with stars.
accumulate reimplement library, recursion, test enforces non-strict
allergies bitwise
all-your-base Maybe, math
anagram filter, String manipulate
atbash-cipher String manipulate
bank-account IO monad
beer-song repetitive String generation
binary we should deprecate soon, math
binary-search-tree make a data structure, recursion
bob String manipulate
clock math
connect searching, **
crypto-square String manipulate
custom-set make a data structure
difference-of-squares math
etl combine library functions
food-chain repetitive String generation
forth parser, **
gigasecond math, time
go-counting partition grid, **
grade-school make a data structure (kinda)
grains math, Maybe
hamming simultaneous iteration, Maybe
hexadecimal we should deprecate soon, math
house repetitive String generation
kindergarten-garden ?
largest-series-product ?
leap math
lens-person lens, if you just use the library maybe it's easy, maybe interesting learning about the types if you implement yourself, *
linked-list make a data structure, IO monad
list-ops make a data structure
luhn ?
matrix ?
meetup date manipulation
minesweeper count grid, *
nth-prime math, filter
nucleotide-count Either
ocr-numbers ?
octal we should deprecate soon, math
palindrome-products ?
parallel-letter-frequency parallel
pascals-triangle ?
phone-number Maybe
pig-latin String manipulate
pov searching, *
prime-factors math
pythagorean-triplet math
queen-attack ?
raindrops math
rna-transcription Maybe
robot-name IO monad, random
robot-simulator ?
roman-numerals ?
saddle-points ?
say ?
scrabble-score ?
secret-handshake typeclass to make it work with both Int and String seems tricky
series
sgf-parsing parser
sieve ?
simple-cipher String manipulate
simple-linked-list make a data structure
space-age math
strain reimplement library, recursion, test enforces non-strict
sublist reimplement library
sum-of-multiples math, filter
triangle math
trinary we should deprecate soon, math
word-count ?
wordy parser
zipper make a data structure, *

Thank you very much, @petertseng! :+1:
I'll be forced to take another at each of the problems to rewrite test suites to fail-fast with rspec. It will be a good opportunity to complement your work. :smile:

Also check out the blog post by @IanWhitney
http://designisrefactoring.com/2016/07/09/exercism-shouldnt-make-you-cry/

Great post! Thanks!

With the new config.yaml format (#274), there is no need to discuss categorization of the exercises here anymore. After that, reordering the exercises will not be so hard.
Considering that this issue is dead for more almost two months, I will close it so e can focus on what needs to be done now! #274
I anyone opposes, I'll immediately reopen it.


Error: Remote end closed connection without response

When running the following command:
python3 -m mediascraper.twitter TwitterUser
I get the following error:
Starting PhantomJS web driver...
./webdriver/phantomjsdriver_2.1.1_linux64/phantomjs
/home/User/.local/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
Traceback (most recent call last):
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.6/http/client.py", line 1331, in getresponse
response.begin()
File "/usr/lib/python3.6/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.6/http/client.py", line 266, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"main", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/User/Desktop/git/media-scraper/mediascraper/twitter.py", line 18, in
tasks = scraper.scrape(username)
File "/home/User/Desktop/git/media-scraper/mediascrapers.py", line 379, in scrape
self._connect('{}/{}/media'.format(self.base_url, username))
File "/home/User/Desktop/git/media-scraper/mediascrapers.py", line 51, in _connect
self._driver.get(url)
File "/home/User/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
self.execute(Command.GET, {'url': url})
File "/home/User/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "/home/User/.local/lib/python3.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 374, in execute
return self._request(command_info[0], url, body=data)
File "/home/User/.local/lib/python3.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 402, in _request
resp = http.request(method, url, body=body, headers=headers)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/request.py", line 72, in request
**urlopen_kw)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/request.py", line 150, in request_encode_body
return self.urlopen(method, url, **extra_kw)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/poolmanager.py", line 324, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/home/User/.local/lib/python3.6/site-packages/urllib3/util/retry.py", line 368, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/packages/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "/home/User/.local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.6/http/client.py", line 1331, in getresponse
response.begin()
File "/usr/lib/python3.6/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.6/http/client.py", line 266, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))

Hi, I cannot reproduce your error. I ran python3 -m mediascraper.twitter TwitterUser and got the following results
Starting PhantomJS web driver...
./webdriver/phantomjsdriver_2.1.1_linux64/phantomjs
/home/elvis/.local/lib/python3.5/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
Either username or password is empty. Abort login.
Crawling...
10 media are found.
Downloading...
 50%|███████████████████████████                           | 5/10 [00:04<00:04,  1.17it/s]The file download/twitter/TwitterUser/BYRkNbhCQAAaPzj.jpg exists. Skip it.
The file download/twitter/TwitterUser/BYRjjYyCIAE15FC.jpg exists. Skip it.
The file download/twitter/TwitterUser/BYRjCCECEAAuOhr.jpg exists. Skip it.
The file download/twitter/TwitterUser/BYRik0ICIAAHb57.jpg exists. Skip it.
The file download/twitter/TwitterUser/BYFE7p9CQAAqVaA.jpg exists. Skip it.
100%|█████████████████████████████████████████████████████| 10/10 [00:04<00:00,  2.36it/s]

And I have 5 pictures under ls download/twitter/TwitterUser/: BYFE7p9CQAAqVaA.jpg, BYRjCCECEAAuOhr.jpg, BYRkNbhCQAAaPzj.jpg, BYRik0ICIAAHb57.jpg, BYRjjYyCIAE15FC.jpg.

Sorry, should have included the twitter user. I obtained this specific error when running it against NerdCity's twitter. So the command i ran was:
python3 -m mediascraper.twitter nerdcity