<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Astuce &#8211; Kodono</title>
	<atom:link href="https://blog.kodono.info/wordpress/category/astuce/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kodono.info/wordpress</link>
	<description>Pour tous les technophiles</description>
	<lastBuildDate>Sun, 23 Feb 2025 08:35:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>
	<item>
		<title>Recevoir des alertes lors de la diffusion d&#8217;un programme</title>
		<link>https://blog.kodono.info/wordpress/2025/02/23/recevoir-des-alertes-lors-de-la-diffusion-dun-programme/</link>
					<comments>https://blog.kodono.info/wordpress/2025/02/23/recevoir-des-alertes-lors-de-la-diffusion-dun-programme/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sun, 23 Feb 2025 08:35:11 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[Français]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2370</guid>

					<description><![CDATA[Trop souvent je loupe des émissions TV que j&#8217;aime bien (comme &#8220;Qui veut être mon associé ?&#8221;, &#8220;Rendez-vous en terre inconnue&#8221;, …). J&#8217;ai cherché un service sur le Net qui me permettrait de recevoir un email lorsque mon émission préférée était diffusée, mais je n&#8217;ai rien trouvé. J&#8217;ai donc créé https://alerte-tv.kodono.info/ qui permet d&#8217;être tenu [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Trop souvent je loupe des émissions TV que j&#8217;aime bien (comme &#8220;Qui veut être mon associé ?&#8221;, &#8220;Rendez-vous en terre inconnue&#8221;, …). J&#8217;ai cherché un service sur le Net qui me permettrait de recevoir un email lorsque mon émission préférée était diffusée, mais je n&#8217;ai rien trouvé.</p>
<p>J&#8217;ai donc créé <a href="https://alerte-tv.kodono.info/">https://alerte-tv.kodono.info/</a> qui permet d&#8217;être tenu au courant lorsqu&#8217;un programme est diffusé à la télévision française.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2025/02/23/recevoir-des-alertes-lors-de-la-diffusion-dun-programme/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Utiliser un VPN sur l&#8217;iPad via un serveur Debian</title>
		<link>https://blog.kodono.info/wordpress/2025/02/08/utiliser-un-vpn-sur-lipad-via-un-serveur-debian/</link>
					<comments>https://blog.kodono.info/wordpress/2025/02/08/utiliser-un-vpn-sur-lipad-via-un-serveur-debian/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sat, 08 Feb 2025 17:42:21 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2352</guid>

					<description><![CDATA[Je vais expliquer ici comment installer un serveur VPN WireGuard sur Debian et l&#8217;utiliser depuis un iPad. 1. Serveur Debian Sur le serveur, on installe WireGuard avec apt install wireguard -y. 2. Générer la clé privée et publique du serveur Pour cela, on va faire : sudo wg genkey &#124; sudo tee /etc/wireguard/server_private.key sudo cat [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Je vais expliquer ici comment installer un serveur VPN WireGuard sur Debian et l&#8217;utiliser depuis un iPad.</p>
<p><strong>1. Serveur Debian</strong></p>
<p>Sur le serveur, on installe WireGuard avec <code>apt install wireguard -y</code>.</p>
<p><strong>2. Générer la clé privée et publique du serveur</strong></p>
<p>Pour cela, on va faire : </p>
<pre class="brush:bash">
sudo wg genkey | sudo tee /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_private.key | sudo wg pubkey | sudo tee /etc/wireguard/server_public.key
</pre>
<p>On retrouvera nos clés dans les fichiers <code>/etc/wireguard/server_private.key</code> et <code>/etc/wireguard/server_public.key</code></p>
<p><strong>3. Générer la clé privée et publique du client</strong></p>
<p>Sur le serveur Debian, on va générer des clés pour le client :</p>
<pre class="brush:bash">
wg genkey | tee client_private.key
cat client_private.key | wg pubkey | tee client_public.key
</pre>
<p>On retrouvera nos clés dans les fichiers <code>./client_private.key</code> et <code>./client_public.key</code></p>
<p><strong>4. Configuration du serveur</strong></p>
<p>On va entrer la configuration suivante dans le fichier <code>/etc/wireguard/wg0.conf</code> :</p>
<pre>
[Interface]
Address = 10.0.0.1/24
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = PRIVATE_KEY_DU_SERVEUR

[Peer]
PublicKey = PUBLIC_KEY_DU_CLIENT
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25
</pre>
<p><strong>5. Activer le transfert IP sur le serveur</strong></p>
<p>Éditer le fichier <code>/etc/sysctl.conf</code> afin d&#8217;avoir :</p>
<pre>
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
</pre>
<p>Et on applique les changements avec la commande <code>sudo sysctl -p</code></p>
<p><strong>6. Démarrage de WireGuard</strong></p>
<p>Pour démarrer le serveur VPN on tape <code>sudo systemctl start wg-quick@wg0</code></p>
<p>On peut voir le statut avec la commande <code>sudo systemctl status wg-quick@wg0</code></p>
<p><strong>7. Configuration du client</strong></p>
<p>Sur notre client (ici un iPad), on installe l&#8217;application WireGuard depuis le App Store.</p>
<p>Ensuite, sur notre serveur, on va créer le fichier de configuration <code>client.conf</code> qui sera utilisé par le client, avec le contenu suivant :</p>
<pre>
[Interface]
PrivateKey = PRIVATE_KEY_DU_CLIENT
Address = 10.0.0.2/32
DNS = 8.8.8.8, 8.8.4.4 # on utilise les DNS de Google

[Peer]
PublicKey = PUBLIC_KEY_DU_SERVEUR
Endpoint = mon_serveur.debian.home:51820 # on indique l'IP/hostname de notre serveur VPN
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
</pre>
<p>Afin de transmettre cette configuration à l&#8217;iPad, on peut générer un QR code. Pour cela on installe ce qu&#8217;il faut : <code>sudo apt install qrencode</code>, puis on génère avec <code>qrencode -t ansiutf8 < client.conf</code></p>
<p>Sur l'iPad, on ouvre l'application WireGuard puis on ajoute un client en utilisant le QR Code généré.</p>
<p><strong>8. Vérification</strong></p>
<p>En activant le VPN sur l'iPad, on peut tester si tout fonctionne comme prévu en vérifiant l'adresse IP de l'iPad.<br />
Sur le serveur, on peut utiliser la commande <code>wg show</code> pour voir un peu ce qu'il se passe.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2025/02/08/utiliser-un-vpn-sur-lipad-via-un-serveur-debian/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Remove lazy loading for a custom SPFx webpart</title>
		<link>https://blog.kodono.info/wordpress/2024/12/15/remove-lazy-loading-for-a-custom-spfx-webpart/</link>
					<comments>https://blog.kodono.info/wordpress/2024/12/15/remove-lazy-loading-for-a-custom-spfx-webpart/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sun, 15 Dec 2024 22:09:45 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2344</guid>

					<description><![CDATA[SharePoint Online is doing lazy loading when we hit a page with webparts. If you created a SPFx webpart, and if it&#8217;s not visible right after the page load, then it will only be loaded once the user scrolls to it&#8230; To remove this behavior, and load the webpart as soon as possible, you must [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>SharePoint Online is doing lazy loading when we hit a page with webparts. If you created a SPFx webpart, and if it&#8217;s not visible right after the page load, then it will only be loaded once the user scrolls to it&#8230;</p>
<p>To remove this behavior, and load the webpart as soon as possible, <a href="https://github.com/SharePoint/sp-dev-docs/discussions/7918">you must declare your webpart as a dynamic data source</a>.</p>
<p>Here is the minimal code example (in pure JS, not in TS):</p>
<pre class="brush:javascript">
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
import { DisplayMode } from '@microsoft/sp-core-library';

export default class HtmlViewerWebPart extends BaseClientSideWebPart {
  constructor() {
    super();
    // the below is used by the dynamic data source to avoid lazy loading
    this._sourceId = 'my_webpart';
  }

  onInit() {
    // to avoid lazy loading of the webpart, we register it as a dynamic data source
    // we only need to do it during the Edit of the page
    if (this.isPageInEditMode() &#038;& this.context.dynamicDataSourceManager) {
      this.context.dynamicDataSourceManager.initializeSource(this);
      console.log('Dynamic Data Source initialized to avoid lazy loading.');
    }
    
    return Promise.resolve();
  }

  isPageInEditMode() {
    return this.displayMode === DisplayMode.Edit;
  }

  // we need to declare this method because it's used by the data source to avoid lazy loading
  getPropertyDefinitions() {
    return []
  }

  // we need to declare this method because it's used by the data source to avoid lazy loading
  getPropertyValue(propertyId) {
    return propertyId;
  }
}
</pre>
<p>Then, edit the page, which will trigger the dynamic data source registration, and publish it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/12/15/remove-lazy-loading-for-a-custom-spfx-webpart/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Determine an element `height` and `width` in CSS only and reuse it within another CSS rule</title>
		<link>https://blog.kodono.info/wordpress/2024/12/13/determine-an-element-height-and-width-in-css-only-and-reuse-it-within-another-css-rule/</link>
					<comments>https://blog.kodono.info/wordpress/2024/12/13/determine-an-element-height-and-width-in-css-only-and-reuse-it-within-another-css-rule/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 13 Dec 2024 15:44:36 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2333</guid>

					<description><![CDATA[I found this technic on https://frontendmasters.com/blog/how-to-get-the-width-height-of-any-element-in-only-css/ – it only works on modern browsers (mainly Chrome and Edge) Let&#8217;s define the properties: @property --_x { syntax: "&#60;number>"; inherits: true; initial-value: 0; } @property --_y { syntax: "&#60;number>"; inherits: true; initial-value: 0; } @property --w { syntax: "&#60;integer>"; inherits: true; initial-value: 0; } @property --h { syntax: [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I found this technic on <a href="https://frontendmasters.com/blog/how-to-get-the-width-height-of-any-element-in-only-css/">https://frontendmasters.com/blog/how-to-get-the-width-height-of-any-element-in-only-css/</a> – <strong>it only works on modern browsers (mainly Chrome and Edge)</strong></p>
<p>Let&#8217;s define the properties:</p>
<pre class="brush:css">
@property --_x {
  syntax: "&lt;number>";
  inherits: true;
  initial-value: 0; 
}
@property --_y {
  syntax: "&lt;number>";
  inherits: true;
  initial-value: 0; 
}
@property --w {
  syntax: "&lt;integer>";
  inherits: true;
  initial-value: 0; 
}
@property --h {
  syntax: "&lt;integer>";
  inherits: true;
  initial-value: 0; 
}
</pre>
<p>Then, let&#8217;s find an element that is a common parent for both the element where we&#8217;ll calculate the height/width, and the element that will use this height/width, and we apply some CSS:</p>
<pre class="brush:css">
.parent {
  timeline-scope: --cx,--cy;
  --w:calc(1/(1 - var(--_x)));
  --h:calc(1/(1 - var(--_y)));
  animation: x linear,y linear;
  animation-timeline: --cx,--cy !important;
  animation-range: entry 100% exit 100%;
}
</pre>
<p>We finish up with some additional CSS:</p>
<pre class="brush:css">
.get-dimension {
  overflow: hidden;
  position: relative;
}
.get-dimension:before {
  content:"";
  position: absolute;
  left: 0;
  top: 0;
  width: 1px;
  aspect-ratio: 1;
  view-timeline: --cx inline,--cy block;
}
@keyframes x {to{--_x:1}}
@keyframes y {to{--_y:1}}
</pre>
<p>And finally, we can use <code>--w</code> and <code>--h</code> in the other element:</p>
<pre class="brush:css">
.apply-dimension {
  height: calc(var(--h)*1px);
  width: calc(var(--w)*1px);
}
</pre>
<p>Here is a demo:<br />
<p class='codepen'  data-height='500' data-theme-id='1' data-slug-hash='vEByKod' data-default-tab='result' data-animations='run' data-editable='' data-embed-version='2'>

</p>
</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/12/13/determine-an-element-height-and-width-in-css-only-and-reuse-it-within-another-css-rule/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to remove an account / leave an organization in MS Teams?</title>
		<link>https://blog.kodono.info/wordpress/2024/10/11/how-to-remove-an-account-leave-an-organization-in-ms-teams/</link>
					<comments>https://blog.kodono.info/wordpress/2024/10/11/how-to-remove-an-account-leave-an-organization-in-ms-teams/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 11 Oct 2024 15:44:15 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2330</guid>

					<description><![CDATA[If in the top right corner of MS Teams, when you click on your profile picture, you see other organizations/accounts and you want to delete them: Go to the MS Teams Settings by clicking on the three dots next to your profile picture Go to Accounts and orgs Turn off or leave the org/account that [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If in the top right corner of MS Teams, when you click on your profile picture, you see other organizations/accounts and you want to delete them:</p>
<ol>
<li>Go to the MS Teams Settings by clicking on the three dots next to your profile picture</li>
<li>Go to <strong>Accounts and orgs</strong></li>
<li>Turn off or leave the org/account that is problematic</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/10/11/how-to-remove-an-account-leave-an-organization-in-ms-teams/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Faire des enregistrements récurrents avec OQEE</title>
		<link>https://blog.kodono.info/wordpress/2024/09/18/faire-des-enregistrements-recurrents-avec-oqee/</link>
					<comments>https://blog.kodono.info/wordpress/2024/09/18/faire-des-enregistrements-recurrents-avec-oqee/#comments</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 18 Sep 2024 07:36:37 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2322</guid>

					<description><![CDATA[J&#8217;ai créé un service en ligne qui permet de simplifier les enregistrements avec OQEE : https://eeqo.kodono.info Il vous faudra être connecté au réseau de votre Freebox afin d&#8217;être reconnu. Ensuite, l&#8217;interface est simple à utiliser et vous permet d&#8217;enregistrement plusieurs programmes à la suite d&#8217;un coup, et créer un enregistrement récurrent sur au moins les [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2024/09/logo.png" alt="" width="449" height="199" class="aligncenter size-full wp-image-2325" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2024/09/logo.png 449w, https://blog.kodono.info/wordpress/wp-content/uploads/2024/09/logo-300x133.png 300w" sizes="(max-width: 449px) 100vw, 449px" /></p>
<p>J&#8217;ai créé un service en ligne qui permet de simplifier les enregistrements avec OQEE : <a href="https://eeqo.kodono.info">https://eeqo.kodono.info</a></p>
<p>Il vous faudra être connecté au réseau de votre Freebox afin d&#8217;être reconnu. Ensuite, l&#8217;interface est simple à utiliser et vous permet d&#8217;enregistrement plusieurs programmes à la suite d&#8217;un coup, et créer un enregistrement récurrent sur au moins les prochains 10 jours. Vous pouvez recevoir un email à la fin de la période pour réactiver l&#8217;enregistrement.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/09/18/faire-des-enregistrements-recurrents-avec-oqee/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Manual Installation of ExplorerPatcher</title>
		<link>https://blog.kodono.info/wordpress/2024/03/21/manual-installation-of-explorerpatcher/</link>
					<comments>https://blog.kodono.info/wordpress/2024/03/21/manual-installation-of-explorerpatcher/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 08:59:15 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2288</guid>

					<description><![CDATA[ExplorerPatcher permits to change the behavior of the Windows taskbar. If for some reasons the automatic install doesn&#8217;t work, you can proceed manually: Install it on a computer where the automatic install works On the target computer, download ep_setup.exe from the official website Open a Terminal and extract the files from the setup using the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://github.com/valinet/ExplorerPatcher">ExplorerPatcher</a> permits to change the behavior of the Windows taskbar. If for some reasons the automatic install doesn&#8217;t work, you can proceed manually:</p>
<ol>
<li>Install it on a computer where the automatic install works</li>
<li>On the target computer, download <code>ep_setup.exe</code> from the official website</li>
<li>Open a Terminal and extract the files from the setup using the command <code>ep_setup.exe /extract</code></li>
<li>Several files have been extracted from the setup</li>
<li>Move all the files to <code>C:\Program Files\ExplorerPatcher</code></li>
<li>Kill Windows Explorer from the Task Manager</li>
<li>From the computer in step 1, copy the file <code>C:\Windows\dxgi.dll</code> and paste it to the target computer at the same location</li>
<li>Restart Windows Explorer from a Terminal by typing <code>explorer.exe</code></li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/03/21/manual-installation-of-explorerpatcher/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Automate returns an error about &#8220;InvokerConnectionOverrideFailed&#8221; and &#8220;header.X-MS-APIM-Tokens&#8221;</title>
		<link>https://blog.kodono.info/wordpress/2024/01/16/power-automate-returns-an-error-about-invokerconnectionoverridefailed-and-header-x-ms-apim-tokens/</link>
					<comments>https://blog.kodono.info/wordpress/2024/01/16/power-automate-returns-an-error-about-invokerconnectionoverridefailed-and-header-x-ms-apim-tokens/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 16 Jan 2024 14:42:28 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2278</guid>

					<description><![CDATA[While calling a &#8220;Run a Child Flow&#8221; from a Power Automate Flow, you could get an error about &#8220;InvokerConnectionOverrideFailed&#8221; and &#8220;header.X-MS-APIM-Tokens&#8221;. After investigating, to resolve this issue you need to open the &#8220;details&#8221; view of your child flow, and click on the &#8220;Edit&#8221; button from the &#8220;Run only users&#8221; card: Then in the Connections Used [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>While calling a &#8220;Run a Child Flow&#8221; from a Power Automate Flow, you could get an error about &#8220;InvokerConnectionOverrideFailed&#8221; and &#8220;header.X-MS-APIM-Tokens&#8221;.</p>
<p>After investigating, to resolve this issue you need to open the &#8220;details&#8221; view of your child flow, and click on the &#8220;Edit&#8221; button from the <strong>&#8220;Run only users&#8221; card</strong>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users.png"><img decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users.png" alt="" width="501" height="423" class="aligncenter size-full wp-image-2279" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users.png 501w, https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users-300x253.png 300w" sizes="(max-width: 501px) 100vw, 501px" /></a></p>
<p>Then in the <strong>Connections Used</strong> section, make sure to select <strong>&#8220;Use this connection (your_username@domain.com)&#8221;</strong> instead of the default &#8220;Provided by run-only user&#8221;. It will permit to run this child flow with your rights.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/01/16/power-automate-returns-an-error-about-invokerconnectionoverridefailed-and-header-x-ms-apim-tokens/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Supprimer la commande Ctrl+Alt+Supp pour ouvrir Windows 11</title>
		<link>https://blog.kodono.info/wordpress/2024/01/02/supprimer-la-commande-ctrlaltsupp-pour-ouvrir-windows-11/</link>
					<comments>https://blog.kodono.info/wordpress/2024/01/02/supprimer-la-commande-ctrlaltsupp-pour-ouvrir-windows-11/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 02 Jan 2024 08:01:34 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[France]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2275</guid>

					<description><![CDATA[Il suffit de modifier le registre de Windows (regedit), en passant à 1 la variable DisableCad dans ces deux emplacements : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]]></description>
										<content:encoded><![CDATA[<p>Il suffit de modifier le registre de Windows (<code>regedit</code>), en passant à <b>1</b> la variable <b>DisableCad</b> dans ces deux emplacements :</p>
<ul>
<li>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System</li>
<li>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/01/02/supprimer-la-commande-ctrlaltsupp-pour-ouvrir-windows-11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Search and restore an item from a SharePoint Online Recycle Bin</title>
		<link>https://blog.kodono.info/wordpress/2023/11/07/search-and-restore-an-item-from-a-sharepoint-online-recycle-bin/</link>
					<comments>https://blog.kodono.info/wordpress/2023/11/07/search-and-restore-an-item-from-a-sharepoint-online-recycle-bin/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 07 Nov 2023 11:09:37 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2267</guid>

					<description><![CDATA[It might be difficult to search for an item in a SharePoint recycle bin. I was using the end point _api/site/RecycleBin as a Site Collection Administrator, but in some cases it returns an error &#8220;The attempted operation is prohibited because it exceeds the list view threshold.&#8221;. The solution is to use another end point _api/site/getrecyclebinitems [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It might be difficult to search for an item in a SharePoint recycle bin. I was using the end point <code>_api/site/RecycleBin</code> as a <b>Site Collection Administrator</b>, but in some cases it returns an error &#8220;The attempted operation is prohibited because it exceeds the list view threshold.&#8221;.</p>
<p>The solution is to use another end point <code>_api/site/getrecyclebinitems</code> (<a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.client.site.getrecyclebinitems?view=sharepoint-csom">see the documentation</a> for the various parameters):</p>
<pre class="brush:javascript">
fetch("https://tenant.sharepoint.com/sites/YourSite/_api/site/getrecyclebinitems?rowLimit=%2770000%27&#038;itemState=0&#038;orderby=3&#038;isAscending=false", {
  "headers": {
    "accept": "application/json",
    "content-type": "application/json",
    "x-requestdigest": document.querySelector("#__REQUESTDIGEST").value
  },
  "method": "GET",
})
.then(res => res.json())
.then(json => {
  console.log(json.value);
  // it will show an array with an object that contains several interesting properties:
  // AuthorEmail, AuthorName, DeletedByEmail, DeletedDate, DirName, Id, LeafName, Title, …
})
</pre>
<p>You can then filter the result to get what you need, for example if you&#8217;re looking for an item from the list “Projects” that has the ID 1981:</p>
<pre class="brush:javascript">
json.value.filter(item => item.DirName.includes("Lists/Projects") &#038;& item.LeafName === "1981_.000");
</pre>
<p>Then, to restore an item, we need the <code>Id</code> from the previous result. The famous endpoint to restore an item is <code>_api/site/RecycleBin('Id')/restore</code>, however it could also return the error &#8220;The attempted operation is prohibited because it exceeds the list view threshold&#8221;. In that case, we can use this other endpoint <code>_api/site/RecycleBin/RestoreByIds</code>:</p>
<pre class="brush:javascript">
fetch("https://tenant.sharepoint.com/sites/YourSite/_api/site/RecycleBin/RestoreByIds", {
  "headers": {
    "accept": "application/json",
    "content-type": "application/json",
    "x-requestdigest": document.querySelector("#__REQUESTDIGEST").value
  },
  "method": "POST",
  "body":JSON.stringify({
    "ids": [
      "4f855ee7-472b-414a-a482-4317a114c1a2" // Id to restore
    ],
    "bRenameExistingItems": true
  })
})
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2023/11/07/search-and-restore-an-item-from-a-sharepoint-online-recycle-bin/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Calculating HMAC SHA-1 in the Browser</title>
		<link>https://blog.kodono.info/wordpress/2023/04/16/calculating-hmac-sha-1-in-the-browser/</link>
					<comments>https://blog.kodono.info/wordpress/2023/04/16/calculating-hmac-sha-1-in-the-browser/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sun, 16 Apr 2023 17:23:55 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2258</guid>

					<description><![CDATA[If you&#8217;re looking for the equivalent of hash_hmac('sha1', 'string', 'secret'); in JavaScript, then here you go: async function hmac_sha1 (str, secret) { // see https://stackoverflow.com/a/47332317/1134119 let enc = new TextEncoder("utf-8"); let key = await window.crypto.subtle.importKey( "raw", // raw format of the key - should be Uint8Array enc.encode(secret), { // algorithm details name: "HMAC", hash: {name: [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If you&#8217;re looking for the equivalent of <code>hash_hmac('sha1', 'string', 'secret');</code> in JavaScript, then here you go:</p>
<pre class="brush:js">
async function hmac_sha1 (str, secret) {
  // see https://stackoverflow.com/a/47332317/1134119
  let enc = new TextEncoder("utf-8");
  let key = await window.crypto.subtle.importKey(
    "raw", // raw format of the key - should be Uint8Array
    enc.encode(secret),
    { // algorithm details
      name: "HMAC",
      hash: {name: "SHA-1"}
    },
    false, // export = false
    ["sign", "verify"] // what this key can do
  );
  let signature = await window.crypto.subtle.sign(
    "HMAC",
    key,
    enc.encode(str)
  );
  let b = new Uint8Array(signature);
  return Array.prototype.map.call(b, x => x.toString(16).padStart(2, '0')).join("");
}
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2023/04/16/calculating-hmac-sha-1-in-the-browser/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Add a domain to a Let&#8217;s Encrypt certificate</title>
		<link>https://blog.kodono.info/wordpress/2022/07/07/add-a-domain-to-a-lets-encrypt-certificate/</link>
					<comments>https://blog.kodono.info/wordpress/2022/07/07/add-a-domain-to-a-lets-encrypt-certificate/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 07 Jul 2022 08:03:32 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2153</guid>

					<description><![CDATA[For Apache, in the folder sites-available, you need to create your the-new-one.your-domain.com.conf file. Then enable the new site with a2ensite the-new-one.your-domain.com. You can list all domains associated with a certificate: certbot certificates Now we add the SSL using certbot. You need to list all the existing domains and add the new one: certbot --apache --cert-name [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>For Apache, in the folder <code>sites-available</code>, you need to create your <code>the-new-one.your-domain.com.conf</code> file. Then enable the new site with <code>a2ensite the-new-one.your-domain.com</code>.</p>
<p>You can list all domains associated with a certificate:</p>
<pre class="brush:bash">certbot certificates</pre>
<p>Now we add the SSL using <code>certbot</code>. You need to list all the existing domains and add the new one:</p>
<pre class="brush:bash">certbot --apache --cert-name your-domain.com -d first.your-domain.com,second.your-domain.com,third.your-domain.com,the-new-one.your-domain.com</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/07/07/add-a-domain-to-a-lets-encrypt-certificate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Get email address from a Azure DevOps &#8220;by&#8221; field in Power Apps Flow</title>
		<link>https://blog.kodono.info/wordpress/2022/05/13/get-email-address-from-a-azure-devops-by-field-in-power-apps-flow/</link>
					<comments>https://blog.kodono.info/wordpress/2022/05/13/get-email-address-from-a-azure-devops-by-field-in-power-apps-flow/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 13 May 2022 07:59:24 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2146</guid>

					<description><![CDATA[If you need to get an email from an Azure DevOps work item (e.g. from the &#8220;Changed By&#8221; field), it might be tricky in Power Apps Flow because it will return &#8220;John Doe &#60;john@doe.com>&#8221;. To only extract the email from this string, you&#8217;ll have to use the below: first(split(last(split([YOUR_FIELD],''))]]></description>
										<content:encoded><![CDATA[<p>If you need to get an email from an Azure DevOps work item (e.g. from the &#8220;Changed By&#8221; field), it might be tricky in Power Apps Flow because it will return &#8220;John Doe &lt;john@doe.com>&#8221;.</p>
<p>To only extract the email from this string, you&#8217;ll have to use the below:</p>
<pre class="js">first(split(last(split([YOUR_FIELD],'<')),'>'))</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/05/13/get-email-address-from-a-azure-devops-by-field-in-power-apps-flow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Use CTRL and TAB to switch between two tabs in Chrome</title>
		<link>https://blog.kodono.info/wordpress/2022/03/18/use-ctrl-and-tab-to-switch-between-two-tabs-in-chrome/</link>
					<comments>https://blog.kodono.info/wordpress/2022/03/18/use-ctrl-and-tab-to-switch-between-two-tabs-in-chrome/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 18 Mar 2022 10:38:48 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2142</guid>

					<description><![CDATA[It&#8217;s super handy to be able to switch between two tabs in the web browser… But it&#8217;s tricky to set it up in Chrome! Install AutoControl: Keyboard shortcut, Mouse gesture Install the native component as the extension asks for Add a new action The trigger is LEFT CTRL and TAB The action is Switch to [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It&#8217;s super handy to be able to switch between two tabs in the web browser… But it&#8217;s tricky to set it up in Chrome!</p>
<ol>
<li>Install <a href="https://chrome.google.com/webstore/detail/autocontrol-keyboard-shor/lkaihdpfpifdlgoapbfocpmekbokmcfd">AutoControl: Keyboard shortcut, Mouse gesture</a></li>
<li>Install the native component as the extension asks for</li>
<li>Add a new action</li>
<li>The trigger is <code>LEFT CTRL</code> and <code>TAB</code></li>
<li>The action is <b>Switch to previous tab</b></li>
</ol>
<p>It should now work to switch between tabs using <code>LEFT CTRL</code> + <code>TAB</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/03/18/use-ctrl-and-tab-to-switch-between-two-tabs-in-chrome/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Portable version of NodeJS on Windows</title>
		<link>https://blog.kodono.info/wordpress/2022/01/01/portable-version-of-nodejs-on-windows/</link>
					<comments>https://blog.kodono.info/wordpress/2022/01/01/portable-version-of-nodejs-on-windows/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sat, 01 Jan 2022 20:19:11 +0000</pubDate>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2130</guid>

					<description><![CDATA[(This is a corrected version of this blog post) Install Cmder in your desired location. Download nvm-noinstall.zip from the latest release. Extract the contents of nvm-noinstall.zip (i.e.: nvm.exe …) into the bin folder inside of the portable Cmder folder. Navigate to the bin. Create a new file called install_fix.cmd that contains this code. Open a [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>(This is a corrected version of this <a href="https://dev.to/yougotwill/portable-nodejs-without-administrator-access-1elk">blog post</a>)</p>
<ol>
<li>Install <a href="https://cmder.net/">Cmder</a> in your desired location.</li>
<li>Download <code>nvm-noinstall.zip</code> from the <a href="https://github.com/coreybutler/nvm-windows/releases/latest">latest release</a>.</li>
<li>Extract the contents of <code>nvm-noinstall.zip</code> (i.e.: <code>nvm.exe</code> …) into the <code>bin</code> folder inside of the portable Cmder folder.</li>
<li>Navigate to the <code>bin</code>.</li>
<li>Create a new file called <code>install_fix.cmd</code> that contains <a href="https://gist.github.com/Aymkdn/c02b50e7ed98e19add3ce5af0a40ee78">this code</a>.</li>
<li>Open a terminal in the <code>bin</code> folder and type <code>.\install_fix.cmd</code></li>
<li>When asked to enter the path use the full path to your Cmder <code>bin</code> folder.</li>
<li>If it worked, a file called <code>settings.txt</code> has been created in the your Cmder <code>bin</code> folder.</li>
<li>Close the terminal, and reopen it in the <code>bin</code> folder.</li>
<li>Install the version of Node you want, e.g. <code>nvm install latest</code>.</li>
<li>Wait until the installation is completed, then, inside the <code>bin</code> folder, there should be a new folder containing the latest Node version (e.g. <code>v17.3.0</code>).</li>
</ol>
<p>From there, you can use the full path to your Cmder <code>bin</code> + the Node version folder + <code>node.exe</code> to execute something with this version of Node using Powershell, CMD or other terminal.</p>
<p>For example:</p>
<pre class="brush: powershell">
PS D:\experiments\my-stuff\> D:\experiments\nodejs-portable\cmder_mini\bin\v17.3.0\node.exe index.js
</pre>
<p>You could use Cmder with the Node path in the Startup Settings of the app; e.g. <code>set "PATH=D:\experiments\nodejs-portable\cmder_mini\bin\v17.3.0;%PATH%"</code>. This way, in Cmder, when typing <code>node.exe</code> it&#8217;s the portable version that will be used.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/01/01/portable-version-of-nodejs-on-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Redirect non-www to www on a PHPBB Forum</title>
		<link>https://blog.kodono.info/wordpress/2021/12/29/redirect-non-www-to-www-on-a-phpbb-forum/</link>
					<comments>https://blog.kodono.info/wordpress/2021/12/29/redirect-non-www-to-www-on-a-phpbb-forum/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 29 Dec 2021 08:44:46 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2128</guid>

					<description><![CDATA[In the PHPBB directory, edit the file .htaccess and after RewriteRule ^(.*)$ app.php [QSA,L] you can enter: RewriteCond %{HTTPS} off # First rewrite to HTTPS: # Don't put www. here. If it is already there it will be included, if not # the subsequent rule will catch it. RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Now, rewrite [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In the PHPBB directory, edit the file <code>.htaccess</code> and after <code>RewriteRule ^(.*)$ app.php [QSA,L]</code> you can enter:</p>
<pre>
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/12/29/redirect-non-www-to-www-on-a-phpbb-forum/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Capacitor Plugin for HTTP requests with self-signed SSL certificates</title>
		<link>https://blog.kodono.info/wordpress/2021/10/30/capacitor-plugin-for-http-requests-with-self-signed-ssl-certificates/</link>
					<comments>https://blog.kodono.info/wordpress/2021/10/30/capacitor-plugin-for-http-requests-with-self-signed-ssl-certificates/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sat, 30 Oct 2021 13:26:01 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2094</guid>

					<description><![CDATA[I&#8217;m using CapacitorJS for easy development with Android. I needed a way to do an HTTPS request to a box that uses self-signed SSL certificate. To accomplish it, I created my own capacitor plugin. See this wiki page for details: https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Capacitor-Plugin-for-HTTP-requests-with-self-signed-SSL-certificates]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m using CapacitorJS for easy development with Android. I needed a way to do an HTTPS request to a box that uses self-signed SSL certificate. To accomplish it, I created my own capacitor plugin.</p>
<p>See this wiki page for details: <a href="https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Capacitor-Plugin-for-HTTP-requests-with-self-signed-SSL-certificates">https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Capacitor-Plugin-for-HTTP-requests-with-self-signed-SSL-certificates</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/10/30/capacitor-plugin-for-http-requests-with-self-signed-ssl-certificates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Enable CORS with IIS</title>
		<link>https://blog.kodono.info/wordpress/2021/10/13/enable-cors-with-iis/</link>
					<comments>https://blog.kodono.info/wordpress/2021/10/13/enable-cors-with-iis/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 13 Oct 2021 12:28:53 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2090</guid>

					<description><![CDATA[It&#8217;s as easy as editing the web.config file with the below: &#60;?xml version="1.0" encoding="UTF-8"?> &#60;configuration> &#60;system.webServer> &#60;httpProtocol> &#60;customHeaders> &#60;add name="Access-Control-Allow-Origin" value="https://my.site.com" /> &#60;add name="Access-Control-Allow-Headers" value="Authorization,Accept,Content-Type,X-Requested-With" /> &#60;add name="Access-Control-Allow-Credentials" value="true" /> &#60;/customHeaders> &#60;/httpProtocol> &#60;/system.webServer> &#60;/configuration>]]></description>
										<content:encoded><![CDATA[<p>It&#8217;s as easy as editing the <code>web.config</code> file with the below:</p>
<pre class="brush:xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;configuration>
  &lt;system.webServer>
    &lt;httpProtocol>
      &lt;customHeaders>
        &lt;add name="Access-Control-Allow-Origin" value="https://my.site.com" />
        &lt;add name="Access-Control-Allow-Headers" value="Authorization,Accept,Content-Type,X-Requested-With" />
        &lt;add name="Access-Control-Allow-Credentials" value="true" />
      &lt;/customHeaders>
    &lt;/httpProtocol>
  &lt;/system.webServer>
&lt;/configuration>
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/10/13/enable-cors-with-iis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>L&#8217;application Android &#8220;Huawei Health&#8221; (ou &#8220;Santé&#8221; en français) retourne l&#8217;erreur : &#8220;les notifications sont indisponibles&#8221;</title>
		<link>https://blog.kodono.info/wordpress/2021/07/26/lapplication-android-huawei-health-ou-sante-en-francais-retourne-lerreur-les-notifications-sont-indisponibles/</link>
					<comments>https://blog.kodono.info/wordpress/2021/07/26/lapplication-android-huawei-health-ou-sante-en-francais-retourne-lerreur-les-notifications-sont-indisponibles/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Mon, 26 Jul 2021 16:22:00 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2087</guid>

					<description><![CDATA[&#8220;Erreur du système, les notifications sont indisponibles. Veuillez redémarrer votre téléphone. Si le problème persiste, contactez le fabricant de votre appareil.&#8221; J&#8217;ai eu cette erreur sur mon Samsung S20 FE. J&#8217;ai réussi à m&#8217;en sortir ou désinstallant tout puis en réinstallant… Mais je pense que la solution pouvait être autre : dans les Paramètres du [&#8230;]]]></description>
										<content:encoded><![CDATA[<blockquote><p>&#8220;Erreur du système, les notifications sont indisponibles. Veuillez redémarrer votre téléphone. Si le problème persiste, contactez le fabricant de votre appareil.&#8221;</p></blockquote>
<p>J&#8217;ai eu cette erreur sur mon Samsung S20 FE. J&#8217;ai réussi à m&#8217;en sortir ou désinstallant tout puis en réinstallant… Mais je pense que la solution pouvait être autre : dans les <strong>Paramètres</strong> du téléphone, chercher <strong>Accès aux notifications</strong>, puis vérifier que l&#8217;application &#8220;Santé&#8221; est bien cochée !</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/07/26/lapplication-android-huawei-health-ou-sante-en-francais-retourne-lerreur-les-notifications-sont-indisponibles/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Problème d&#8217;accès avec C:\Program Files\WindowsApps</title>
		<link>https://blog.kodono.info/wordpress/2021/07/26/probleme-dacces-avec-cprogram-fileswindowsapps/</link>
					<comments>https://blog.kodono.info/wordpress/2021/07/26/probleme-dacces-avec-cprogram-fileswindowsapps/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Mon, 26 Jul 2021 07:40:03 +0000</pubDate>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2084</guid>

					<description><![CDATA[J&#8217;utilise d&#8217;habitude le raccourci wt.exe dans la barre de Windows Explorer, mais j&#8217;ai reçu une erreur aujourd&#8217;hui me disant que le fichier n&#8217;existe pas… Après quelques recherches, j&#8217;ai découvert que je n&#8217;ai aucun accès au répertoire C:\Program Files\WindowsApps là où se trouve Windows Terminal. J&#8217;ai réussi à le refaire marcher en lançant un terminal en [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>J&#8217;utilise d&#8217;habitude le raccourci <code>wt.exe</code> dans la barre de Windows Explorer, mais j&#8217;ai reçu une erreur aujourd&#8217;hui me disant que le fichier n&#8217;existe pas…</p>
<p>Après quelques recherches, j&#8217;ai découvert que je n&#8217;ai aucun accès au répertoire <code>C:\Program Files\WindowsApps</code> là où se trouve Windows Terminal.</p>
<p>J&#8217;ai réussi à le refaire marcher en lançant un terminal en mode administrateur puis en exécutant la commande <code>icacls "C:\Program Files\WindowsApps" /reset /t /c /q</code></p>
<p>J&#8217;ai reçu beaucoup de <em>échec de traitement</em>, mais ce fut quand même suffisant !</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/07/26/probleme-dacces-avec-cprogram-fileswindowsapps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Access to Sharepoint Online with Windows Explorer</title>
		<link>https://blog.kodono.info/wordpress/2021/05/06/access-to-sharepoint-online-with-windows-explorer/</link>
					<comments>https://blog.kodono.info/wordpress/2021/05/06/access-to-sharepoint-online-with-windows-explorer/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 06 May 2021 07:21:03 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2071</guid>

					<description><![CDATA[If you want to access your Sharepoint online (https://[tenant].sharepoint.com), you first need to make sure the site is in the Trusted Website in Internet Explorer. Open Internet Explorer, navigate to the website, then open the Internet Options: Add your website to the Trusted Website zone: Next open Windows Explorer and right-click on &#8220;Your PC &#8220;, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If you want to access your Sharepoint online (https://[tenant].sharepoint.com), you first need to make sure the site is in the Trusted Website in Internet Explorer.<br />
<strong>Open Internet Explorer</strong>, navigate to the website, then open the <strong>Internet Options</strong>:<br />
<img decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options1.png" alt="" width="421" height="354" class="aligncenter size-full wp-image-2072" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options1.png 421w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options1-300x252.png 300w" sizes="(max-width: 421px) 100vw, 421px" /></p>
<p>Add your website to the <strong>Trusted Website zone</strong>:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options2.png" alt="" width="482" height="272" class="aligncenter size-large wp-image-2073" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options2.png 482w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options2-300x169.png 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></p>
<p>Next open Windows Explorer and <strong>right-click on &#8220;Your PC &#8220;, then select &#8220;Map network drive…&#8221;</strong>:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network1.png" alt="" width="413" height="330" class="aligncenter size-full wp-image-2074" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network1.png 413w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network1-300x240.png 300w" sizes="auto, (max-width: 413px) 100vw, 413px" /></p>
<p>You need to use a special path to your website. Let&#8217;s say your website is located at <a href="https://tenant.sharepoint.com/sites/Marketing">https://tenant.sharepoint.com/sites/Marketing</a> then the path to use is:<br />
<b>\\tenant.sharepoint.com@ssl\DavWWWRoot\sites\Marketing\</b></p>
<p>Note the <code>@ssl</code> and <code>DavWWWRoot</code> that are required.</p>
<p>Assign this path to a drive letter:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network2.png" alt="" width="614" height="455" class="aligncenter size-full wp-image-2077" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network2.png 614w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network2-300x222.png 300w" sizes="auto, (max-width: 614px) 100vw, 614px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/05/06/access-to-sharepoint-online-with-windows-explorer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windows Movie Maker pour Windows 7, Windows 8.1 et Windows 10</title>
		<link>https://blog.kodono.info/wordpress/2020/10/28/windows-movie-maker-pour-windows-7-windows-8-1-et-windows-10/</link>
					<comments>https://blog.kodono.info/wordpress/2020/10/28/windows-movie-maker-pour-windows-7-windows-8-1-et-windows-10/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 28 Oct 2020 19:16:11 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2045</guid>

					<description><![CDATA[Voici un lien avec une version qui s&#8217;installe encore sur ces versions de Windows : https://blog.kodono.info/wordpress/wp-content/uploads/wlsetup-all.exe]]></description>
										<content:encoded><![CDATA[<p>Voici un lien avec une version qui s&#8217;installe encore sur ces versions de Windows : <a href="https://blog.kodono.info/wordpress/wp-content/uploads/wlsetup-all.exe">https://blog.kodono.info/wordpress/wp-content/uploads/wlsetup-all.exe</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2020/10/28/windows-movie-maker-pour-windows-7-windows-8-1-et-windows-10/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Let&#8217;s Encrypt Certificate: how to remove a domain from a certname that contains several domains</title>
		<link>https://blog.kodono.info/wordpress/2020/07/17/lets-encrypt-certificate-how-to-remove-a-domain-from-a-certname-that-contains-several-domains/</link>
					<comments>https://blog.kodono.info/wordpress/2020/07/17/lets-encrypt-certificate-how-to-remove-a-domain-from-a-certname-that-contains-several-domains/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 17 Jul 2020 07:18:13 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[ssl]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2019</guid>

					<description><![CDATA[My server manages several websites with different domains using Apache. The first time I used Let&#8217;s Encrypt I followed the default command which has created one certname for ALL my domains. Now I want to remove just one domain from this certificate, and it becomes complicated to understand how to do it. The best solution [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>My server manages several websites with different domains using Apache. The first time I used Let&#8217;s Encrypt I followed the default command which has created one certname for ALL my domains.</p>
<p>Now I want to remove just one domain from this certificate, and it becomes complicated to understand how to do it. The best solution is to create a new certificate for each of my domains, and then to delete the original certname.</p>
<p>Let&#8217;s say my certname is called <code>www.example.com</code> and it contains the below domains:</p>
<ul>
<li>www.example.com</li>
<li>example.com</li>
<li>blog.example.com</li>
<li>other-example.com</li>
<li>www.other-example.com</li>
<li>my-other-domain.com</li>
<li>www.my-other-domain.com</li>
<li>api.test.com</li>
</ul>
<p>The one I don&#8217;t need anymore is <code>*.my-other-domain.com</code>.</p>
<p>First, we create a certificate individually for each domain that we want to keep:</p>
<pre class="brush:python">
certbot --apache --cert-name example.com -d example.com,www.example.com,blog.example.com
certbot --apache --cert-name other-example.com -d other-example.com,www.other-example.com
certbot --apache --cert-name test.com -d api.test.com
</pre>
<p><code>--cert-name</code> permits to give our own name to the certificate, and <code>-d</code> indicates which domains should be added to this certificate.</p>
<p>Then we can list all our certificates:</p>
<pre class="brush:bash">
certbot certificates
</pre>
<p>Using the above command you can find the <code>Certificate Path</code> and now we can delete our original certificate:</p>
<pre class="brush:bash">
certbot revoke --cert-path /etc/letsencrypt/live/www.example.com/fullchain.pem
</pre>
<p>You&#8217;re all set! All your domains should still have a correct certificate, and you revoked the ones you don&#8217;t need anymore.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2020/07/17/lets-encrypt-certificate-how-to-remove-a-domain-from-a-certname-that-contains-several-domains/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sharepoint error message &#8220;Invalid URL argument&#8221; with WebPartPages</title>
		<link>https://blog.kodono.info/wordpress/2019/11/29/sharepoint-error-message-invalid-url-argument-with-webpartpages/</link>
					<comments>https://blog.kodono.info/wordpress/2019/11/29/sharepoint-error-message-invalid-url-argument-with-webpartpages/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 29 Nov 2019 17:10:07 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2005</guid>

					<description><![CDATA[For me the issue was this part of the XML request: &#60;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages/'&#62; (with a / at the end of the url) instead of &#60;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages'&#62;.]]></description>
										<content:encoded><![CDATA[<p>For me the issue was this part of the XML request: <code>&lt;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages/'&gt;</code> (with a <code>/</code> at the end of the url) instead of <code>&lt;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages'&gt;</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/11/29/sharepoint-error-message-invalid-url-argument-with-webpartpages/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>chrome-search://local-ntp/local-ntp.html makes Chrome unresponsive</title>
		<link>https://blog.kodono.info/wordpress/2019/11/21/chrome-search-local-ntp-local-ntp-html-makes-chrome-unresponsive/</link>
					<comments>https://blog.kodono.info/wordpress/2019/11/21/chrome-search-local-ntp-local-ntp-html-makes-chrome-unresponsive/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 21 Nov 2019 14:55:43 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2001</guid>

					<description><![CDATA[Sometimes, when I open a new tab in Chrome, it first tries to get chrome-search://local-ntp/local-ntp.html and while it&#8217;s doing it, I cannot enter any URL. Eventually it will popup a message asking me if I want to wait or exit the page&#8230; The way I found to fix it is to go to the page [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Sometimes, when I open a new tab in Chrome, it first tries to get <code>chrome-search://local-ntp/local-ntp.html</code> and while it&#8217;s doing it, I cannot enter any URL. Eventually it will popup a message asking me if I want to wait or exit the page&#8230;</p>
<p>The way I found to fix it is to go to the page <a href="chrome://flags/#use-google-local-ntp">chrome://flags/#use-google-local-ntp</a>, then I disabled <b>&#8220;Enable using the Google local NTP&#8221;</b></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/11/21/chrome-search-local-ntp-local-ntp-html-makes-chrome-unresponsive/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Our system has detected an unusual rate of unsolicited mail originating from your IP address</title>
		<link>https://blog.kodono.info/wordpress/2019/10/30/our-system-has-detected-an-unusual-rate-of-unsolicited-mail-originating-from-your-ip-address/</link>
					<comments>https://blog.kodono.info/wordpress/2019/10/30/our-system-has-detected-an-unusual-rate-of-unsolicited-mail-originating-from-your-ip-address/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 30 Oct 2019 08:53:26 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1998</guid>

					<description><![CDATA[Gmail could report back this error message: &#8220;Our system has detected an unusual rate of unsolicited mail originating from your IP address&#8221; If your DKIM, SPF and DMARC are all set and your emails are correctly identified, then you may want to check the both links: Good links to get help on what to do: [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Gmail could report back this error message: &#8220;Our system has detected an unusual rate of unsolicited mail originating from your IP address&#8221;</p>
<p>If your DKIM, SPF and DMARC are all set and your emails are correctly identified, then you may want to check the both links:</p>
<ul>
<li>Good links to get help on what to do: <a href="https://support.google.com/mail/thread/9191597?hl=en">https://support.google.com/mail/thread/9191597?hl=en</a></li>
<li>The form to be removed from GMail blacklist: <a href="https://support.google.com/mail/contact/bulk_send_new">https://support.google.com/mail/contact/bulk_send_new</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/10/30/our-system-has-detected-an-unusual-rate-of-unsolicited-mail-originating-from-your-ip-address/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sharepoint REST API to index a column or delete a column and more&#8230;</title>
		<link>https://blog.kodono.info/wordpress/2019/08/19/sharepoint-rest-api-to-index-a-column-or-delete-a-column-and-more/</link>
					<comments>https://blog.kodono.info/wordpress/2019/08/19/sharepoint-rest-api-to-index-a-column-or-delete-a-column-and-more/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Mon, 19 Aug 2019 09:16:50 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1979</guid>

					<description><![CDATA[Due to the 5,000 items threshold limitation it can become very frustrating to administrate Sharepoint. For example, if your list has more than 5,000 items, you cannot add an index, delete a lookup/people column, delete the list or the website, and more ! Hopefully some of the operations can be done with REST API, and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Due to the 5,000 items threshold limitation it can become very frustrating to administrate Sharepoint. For example, if your list has more than 5,000 items, you cannot add an index, delete a lookup/people column, delete the list or the website, and more !</p>
<p>Hopefully some of the operations can be done with REST API, and in my organization the threshold limitation is removed during the night (1am to 4am). By combining a schedule service (like <a href="https://github.com/node-schedule/node-schedule">node-schedule</a>) with my library <a href="https://aymkdn.github.io/SharepointPlus/">SharepointPlus</a> I can run this admin tasks during the night while my virtual computer is running.</p>
<h2>To delete a column</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('My List')/fields/getbytitle('Column To Delete')",
  method: "POST",
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "DELETE"
  }
});
</pre>
<h2>To index a column</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('My List')/fields/getbytitle('Column to Index')",
  method: "POST",
  body:JSON.stringify({
    "__metadata":{ type: "SP.Field" },
    "Indexed":true
  }),
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "MERGE"
  }
})
</pre>
<h2>To delete a list</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('List To Delete')",
  method: "POST",
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "DELETE"
  }
})
</pre>
<h2>To delete a list</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('List To Delete')",
  method: "POST",
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "DELETE"
  }
})
</pre>
<h2>To delete a site</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/website_to_delete/_api/web/",
  method: "POST",
  headers: {
    "X-HTTP-Method": "DELETE"
  }
})
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/08/19/sharepoint-rest-api-to-index-a-column-or-delete-a-column-and-more/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>mysqladmin with MariaDB returns &#8220;Access denied for user &#8216;root&#8217;@&#8217;localhost&#8217; (using password: NO)&#8221;</title>
		<link>https://blog.kodono.info/wordpress/2019/05/30/mysqladmin-with-mariadb-returns-access-denied-for-user-rootlocalhost-using-password-no/</link>
					<comments>https://blog.kodono.info/wordpress/2019/05/30/mysqladmin-with-mariadb-returns-access-denied-for-user-rootlocalhost-using-password-no/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 30 May 2019 17:47:14 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1952</guid>

					<description><![CDATA[When I want to reload my MariaDB server, I receive the below error: /usr/bin/mysqladmin: connect to server at &#8216;localhost&#8217; failed error: &#8216;Access denied for user &#8216;root&#8217;@&#8217;localhost&#8217; (using password: NO)&#8217; The solution is to provide the root&#8217;s password in the file `/etc/mysql/debian.cnf` and then the error is gone!]]></description>
										<content:encoded><![CDATA[<p>When I want to reload my MariaDB server, I receive the below error:</p>
<blockquote><p>
/usr/bin/mysqladmin: connect to server at &#8216;localhost&#8217; failed<br />
error: &#8216;Access denied for user &#8216;root&#8217;@&#8217;localhost&#8217; (using password: NO)&#8217;
</p></blockquote>
<p>The solution is to provide the root&#8217;s password in the file `/etc/mysql/debian.cnf` and then the error is gone!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/05/30/mysqladmin-with-mariadb-returns-access-denied-for-user-rootlocalhost-using-password-no/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Invisible character with IE when using Intl.DateTimeFormat</title>
		<link>https://blog.kodono.info/wordpress/2019/02/07/invisible-character-with-ie-when-using-intl-datetimeformat/</link>
					<comments>https://blog.kodono.info/wordpress/2019/02/07/invisible-character-with-ie-when-using-intl-datetimeformat/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 07 Feb 2019 09:22:26 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[internet explorer]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1935</guid>

					<description><![CDATA[As explained in some threads, Internet Explorer adds some invisible extra characters when returning a date from the JavaScript function new Intl.DateTimeformat. var day = "Thursday"; var intlDay = new Intl.DateTimeFormat('en-US', {weekday:"long"}).format(new Date(2019,1,7)); console.log(day === intlDay); // return FALSE with IE intlDay = intlDay.replace(/\u200E/g, ''); // replace \u200E console.log(day === intlDay); // return TRUE with [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>As explained in some <a href="https://stackoverflow.com/questions/33510440/tolocaledatestring-in-ie-returns-a-14-character-string-is-it-a-bug">threads</a>, Internet Explorer adds some invisible extra characters when returning a date from the JavaScript function <code>new Intl.DateTimeformat</code>.</p>
<pre class="brush:javascript">
var day = "Thursday";
var intlDay = new Intl.DateTimeFormat('en-US', {weekday:"long"}).format(new Date(2019,1,7));
console.log(day === intlDay); // return FALSE with IE
intlDay = intlDay.replace(/\u200E/g, ''); // replace \u200E
console.log(day === intlDay); // return TRUE with IE
</pre>
<p>The trick is to replace <code>\u200E</code> in the returned string.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/02/07/invisible-character-with-ie-when-using-intl-datetimeformat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Envoie d&#8217;email et spam (via OVH)</title>
		<link>https://blog.kodono.info/wordpress/2019/01/20/envoie-demail-et-spam-via-ovh/</link>
					<comments>https://blog.kodono.info/wordpress/2019/01/20/envoie-demail-et-spam-via-ovh/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sun, 20 Jan 2019 15:52:22 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[email]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1926</guid>

					<description><![CDATA[Si on envoie des emails depuis notre propre serveur, avec notre propre domaine, certaines mailbox (comme Gmail) pourraient vous détecter comme du spam ! Pour éviter cela, il faut prendre quelques précautions. Type &#8220;SPF&#8221; Tout d&#8217;abord, il faut ajouter une entrée SPF via le gestionnaire de domaine d&#8217;OVH. Le wizard va aider à composer la [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Si on envoie des emails depuis notre propre serveur, avec notre propre domaine, certaines mailbox (comme Gmail) pourraient vous détecter comme du spam !</p>
<p>Pour éviter cela, il faut prendre quelques précautions.</p>
<h2>Type &#8220;SPF&#8221;</h2>
<p>Tout d&#8217;abord, il faut ajouter une entrée SPF via le gestionnaire de domaine d&#8217;OVH. Le <em>wizard</em> va aider à composer la chaine qui sera enregistrée pour le domaine.</p>
<p>Il faudra fournir : </p>
<ul>
<li>L&#8217;IPv4 du serveur qui envoie les emails</li>
<li>L&#8217;IPv6 du serveur qui envoie les emails</li>
<li>Inclure le MX d&#8217;OVH (<code>include:mx.ovh.com</code>)</li>
</ul>
<p>Au final, le champ SPF devrait ressembler à ça :<br />
<code>300 IN TXT "v=spf1 a mx ip4:1.2.3.4 ip6:2001:41d0:a:abcd::1/128 include:mx.ovh.com -all"</code></p>
<h2>Type &#8220;DKIM&#8221;</h2>
<p>Cette fois on va ajouter une entrée de type &#8220;DKIM&#8221;.</p>
<p>Il faudra utiliser  <a href="https://dkimcore.org/tools/">https://dkimcore.org/tools/</a> et :</p>
<ul>
<li>Le sous domaine est fourni par l&#8217;outil (exemple : <code>1547992053.kodono._domainkey</code>)</li>
<li>Choisir la version &#8220;DKIM 1&#8221;</li>
<li>Type de clé : RSA</li>
<li>La clé publique générée par l&#8217;outil dkimcore</li>
</ul>
<p>Au final, le champ DKIM devrait ressembler à ça :<br />
<code>1547992053.kodono._domainkey.kodono.info. 	0 	DKIM 	v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQE...anzmm2RIpt0tV3gwTGwuLQIDAQAB;t=s;</code></p>
<p>On pourra ensuite utiliser <a href="https://github.com/louisameline/php-mail-signature">https://github.com/louisameline/php-mail-signature</a> qui est une librairie PHP et qui aide à signer les emails qu&#8217;on envoie en PHP.</p>
<h2>Type &#8220;DMARC&#8221;</h2>
<p>Enfin, on ajoute une entrée de type &#8220;DMARC&#8221;.</p>
<p>Il faudra utiliser :</p>
<ol>
<li>Le sous-domaine doit être <code>_dmarc</code></li>
<li>Règle pour le domaine : none</li>
</ol>
<p>Au final, le champ DMARC devrait ressemble à ça :<br />
<code>_dmarc.kodono.info.	0 	DMARC 	v=DMARC1; p=none;</code></p>
<h2>Ajout d&#8217;un reverse</h2>
<p>Il va falloir ajouter un reverse (PTR) pour l&#8217;IPv4 et l&#8217;IPv6 du serveur. Cela se fait via la console de votre serveur (par exemple via le site Kimsufi si votre serveur est là bas).</p>
<h2>Tester</h2>
<p>Une fois vos emails créés, vous pouvez les tester grâce aux sites <a href="https://www.mail-tester.com/">https://www.mail-tester.com/</a> et <a href="https://dkimvalidator.com/">https://dkimvalidator.com/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/01/20/envoie-demail-et-spam-via-ovh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
