Skip to content

Instantly share code, notes, and snippets.

@yelhouti
yelhouti / faces-config.xml
Created April 17, 2016 20:57
cutomize Primefaces mobile renderer
<application>
<navigation-handler>
org.primefaces.mobile.application.MobileNavigationHandler
</navigation-handler>
<default-render-kit-id>PRIMEFACES_MOBILE</default-render-kit-id>
</application>
<render-kit>
<render-kit-id>PRIMEFACES_MOBILE</render-kit-id>
<renderer>
@yelhouti
yelhouti / telepresence.log
Created June 3, 2019 19:48
telepresence run docker fails
0.0 TEL | Telepresence 0.99 launched at Mon Jun 3 21:21:08 2019
0.0 TEL | /usr/bin/telepresence --docker-run --rm dbmigration:latest
0.0 TEL | Platform: linux
0.0 TEL | Python 3.6.8 (default, Jan 31 2019, 09:38:34)
0.0 TEL | [GCC 8.2.1 20181215 (Red Hat 8.2.1-6)]
0.0 TEL | [1] Running: uname -a
0.0 1 | Linux yelhouti-p52 4.20.14-100.fc28.x86_64 #1 SMP Tue Mar 5 19:45:42 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
0.0 TEL | [1] ran in 0.00 secs.
0.0 TEL | BEGIN SPAN main.py:40(main)
0.0 TEL | BEGIN SPAN startup.py:74(__init__)
@yelhouti
yelhouti / generator-jhipster.md
Last active May 1, 2026 07:25
jhipster generation upgrades

Code Generation

There two main approches of handling upgrades when using a code generator:

  1. The generated code is never touched (only extended...), and regeneration only updates these files
  2. Generated code is stored in a separate branch where generation is done no changes are done manually, the generated branch is merged with master at each upgrade

I find the first approach hard to work with for two reasons:

  1. some files can't be extended like package.json ...
  2. Extending all the files makes for bigger code base and adding simple changes can add a lot of work
@yelhouti
yelhouti / gist:f4359bad1c65686c2cd1426ae7e24734
Last active August 31, 2026 18:34
LinkedIn scans your browser for 4,934 Chrome extensions. Here is how to see it yourself.
# LinkedIn scans your browser for 4,934 Chrome extensions. Here is how to see it yourself.
I was debugging an unrelated console error on linkedin.com last week and noticed something odd: hundreds of failed requests to `chrome-extension://invalid/`.
Here is what is going on.
Any web page can test whether you have a specific Chrome extension installed by requesting a file from it. If the extension is there, the file loads. If it is not, Chrome rewrites the URL to `chrome-extension://invalid/` and the request fails silently. No permission needed, nothing visible to the user.
LinkedIn's page bundle walks a hardcoded list of extension IDs and probes each one in turn. I logged the list. It contains 4,934 entries, in alphabetical order, each paired with a real file path inside that specific extension: `icon16.png`, `content.css`, `assets/index-DgZXh0UX.js`. Nobody writes those by hand. Someone crawled the Chrome Web Store, downloaded the extensions, parsed their manifests and built a detection list.
@yelhouti
yelhouti / 1-linkedin-fingerprinting.MD
Last active August 31, 2026 18:42
LinkedIn scans your browser for 4,934 Chrome extensions. Here is how to see it yourself.

LinkedIn scans your browser for 4,934 Chrome extensions. Here is how to see it yourself.

I was debugging an unrelated console error on linkedin.com last week and noticed something odd: hundreds of failed requests to chrome-extension://invalid/.

Here is what is going on.

Any web page can test whether you have a specific Chrome extension installed by requesting a file from it. If the extension is there, the file loads. If it is not, Chrome rewrites the URL to chrome-extension://invalid/ and the request fails silently. No permission needed, nothing visible to the user.

LinkedIn's page bundle walks a hardcoded list of extension IDs and probes each one in turn. I logged the list. It contains 4,934 entries, in alphabetical order, each paired with a real file path inside that specific extension: icon16.png, content.css, assets/index-DgZXh0UX.js. Nobody writes those by hand. Someone crawled the Chrome Web Store, downloaded the extensions, parsed their manifests and built a detection list.