<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rémi</title>
    <description>The latest articles on DEV Community by Rémi (@uwutrinket).</description>
    <link>https://dev.to/uwutrinket</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F131048%2F2710919d-8fdb-435f-b1d2-47ba576fa3f5.jpeg</url>
      <title>DEV Community: Rémi</title>
      <link>https://dev.to/uwutrinket</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uwutrinket"/>
    <language>en</language>
    <item>
      <title>#codevember — 7 — Shape</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Tue, 12 Nov 2019 08:26:55 +0000</pubDate>
      <link>https://dev.to/uwutrinket/codevember-7-shape-3kho</link>
      <guid>https://dev.to/uwutrinket/codevember-7-shape-3kho</guid>
      <description>&lt;h1&gt;codevember 2019 day 7 Shape&lt;/h1&gt;

&lt;p&gt;Shape as line, in colour and in negative space
SDF circle code from &lt;a href="http://www.iquilezles.org/"&gt;http://www.iquilezles.org/&lt;/a&gt;
Random from &lt;a href="https://thebookofshaders.com/10/"&gt;https://thebookofshaders.com/10/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/ZEEjxwq?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>#codevember — 6 — Music 🎹</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Tue, 12 Nov 2019 08:26:16 +0000</pubDate>
      <link>https://dev.to/uwutrinket/codevember-6-music-3f5l</link>
      <guid>https://dev.to/uwutrinket/codevember-6-music-3f5l</guid>
      <description>&lt;h1&gt;codevember 2019 day 6 Music&lt;/h1&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/WNNKQxj?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>#codevember — 5 — Light 💡🔦</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Fri, 08 Nov 2019 10:52:00 +0000</pubDate>
      <link>https://dev.to/uwutrinket/codevember-5-light-2927</link>
      <guid>https://dev.to/uwutrinket/codevember-5-light-2927</guid>
      <description>&lt;h1&gt;codevember 2019 day 5 Light from &lt;a href="https://www.youtube.com/watch?v=JQ-jNMUxMas"&gt;https://www.youtube.com/watch?v=JQ-jNMUxMas&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/vYYjPoJ?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>#codevember — 4 — Big 🏙️🎥</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Thu, 07 Nov 2019 09:39:45 +0000</pubDate>
      <link>https://dev.to/uwutrinket/codevember-4-big-b83</link>
      <guid>https://dev.to/uwutrinket/codevember-4-big-b83</guid>
      <description>&lt;p&gt;codevember 2019 day 4&lt;br&gt;
Big buildings with dolly zoom&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/jOOZZge?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>#codevember — 3 — Deep</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Mon, 04 Nov 2019 18:09:25 +0000</pubDate>
      <link>https://dev.to/uwutrinket/codevember-3-deep-5fj7</link>
      <guid>https://dev.to/uwutrinket/codevember-3-deep-5fj7</guid>
      <description>&lt;h1&gt;codevember 2019 day 3&lt;/h1&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/eYYyodE?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>codevember</category>
    </item>
    <item>
      <title>#codevember — 1 — Contrast</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Fri, 01 Nov 2019 22:23:02 +0000</pubDate>
      <link>https://dev.to/uwutrinket/codevember-1-contrast-5cch</link>
      <guid>https://dev.to/uwutrinket/codevember-1-contrast-5cch</guid>
      <description>&lt;h1&gt;codevember 2019 day 1&lt;/h1&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/RwwxGZb?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>codevember</category>
    </item>
    <item>
      <title>Chrome - Unlimited frame rate</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Fri, 11 Oct 2019 08:43:47 +0000</pubDate>
      <link>https://dev.to/uwutrinket/chrome-unlimited-frame-rate-gl2</link>
      <guid>https://dev.to/uwutrinket/chrome-unlimited-frame-rate-gl2</guid>
      <description>&lt;p&gt;It hasn't been working on Chrome in 2018 but it's working again in September 2019.&lt;/p&gt;

&lt;p&gt;It can be hard to track how small changes affect the performance of a WebGL project if you’re well within the limits of your GPU and browser.&lt;/p&gt;

&lt;p&gt;You can check in details frame rate variations on modifications such has adding a Shader Pass or merging geometries, disabling frustum culling, etc..&lt;/p&gt;

&lt;h2&gt;
  
  
  How to
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1. Run Chrome through
```bash
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;open -a "Google Chrome" --args --disable-gpu-vsync&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
or depends on your settings

```bash


open -a "Google Chrome" --args --disable-gpu-vsync --disable-frame-rate-limit


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;2. Open console Rendering tab (in more tools)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4bj3ocl9q0xb14c4whv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4bj3ocl9q0xb14c4whv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3. Check &lt;code&gt;FPS meter&lt;/code&gt; (on a page that triggers frame rate: &lt;a href="https://www.shadertoy.com/view/tdG3Rd" rel="noopener noreferrer"&gt;example my #shadertoy below&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xmkis8gailgeqsmhgq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xmkis8gailgeqsmhgq7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Tested on iMac end 2013 Mojave&lt;/code&gt;&lt;br&gt;
&lt;a href="https://medium.com/@hellomondaycom/how-we-built-the-google-cloud-infrastructure-webgl-experience-dec3ce7cd209" rel="noopener noreferrer"&gt;Source on medium&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Update 14/09/2020
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fecq3yr5pepxl49x5t714.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fecq3yr5pepxl49x5t714.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
The fps meter has been updated, it doesn't seem possible anymore to disable frame rate limit.&lt;br&gt;
Can't find any article about the new fps meter at the moment, if any on has any lead, please reach out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update 28/11/2020
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Unfortunately, it appears that &lt;a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1124189" rel="noopener noreferrer"&gt;the fps meter won't be available anymore in chromium&lt;/a&gt;.&lt;br&gt;
It has been renamed Frame rendering stats.&lt;br&gt;
You can find information about release &lt;a href="https://groups.google.com/a/chromium.org/g/blink-dev/c/iHULoSyUxOQ?pli=1" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/addyosmani/status/1281483292026400768" rel="noopener noreferrer"&gt;Frame rendering stats release tweet&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is to my knowledge only one way to use the Unlimited frame rate FPS meter (Only tested on Mac).&lt;br&gt;
You have to get an old build of Chromium (&lt;code&gt;Version 65.0.3312.0 (Developer Build) (64-bit)&lt;/code&gt; in my case) and launch it with the command line, but the rendering might differs for various reasons.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;p&gt;open &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="s2"&gt;"Chromium"&lt;/span&gt; &lt;span class="nt"&gt;--args&lt;/span&gt; &lt;span class="nt"&gt;--disable-gpu-vsync&lt;/span&gt; &lt;span class="nt"&gt;--disable-frame-rate-limit&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Update 23/07/2024&lt;br&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;FPS meter&lt;/code&gt; is back under the name &lt;code&gt;Frame rendering Stats&lt;/code&gt; but you can't uncap the frame rate anymore, but you can have a good insight to debug since the cap is 120fps.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>chrome</category>
      <category>framerate</category>
    </item>
    <item>
      <title>Star atlas - three.js</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Sun, 12 May 2019 21:24:51 +0000</pubDate>
      <link>https://dev.to/uwutrinket/star-atlas-2k49</link>
      <guid>https://dev.to/uwutrinket/star-atlas-2k49</guid>
      <description>&lt;p&gt;Trying codepen new &lt;a href="https://blog.codepen.io/2019/05/08/220-social-sharing/"&gt;dev.to share button&lt;/a&gt;. So here's a little pen I made for this week #CodePenChallenge.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Created for the &lt;a href="https://codepen.io/challenges/2019/May"&gt;May 2019 CodePen Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/trinketmage/embed/LoGgRv?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Using&lt;br&gt;
&lt;a href="https://github.com/mrdoob/three.js/"&gt;three.js&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/d3/d3-scale-chromatic/"&gt;d3-scale-chromatic&lt;/a&gt;&lt;br&gt;
&lt;a href="https://greensock.com/tweenmax"&gt;TweenMax&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>threejs</category>
      <category>codepenchallenge</category>
    </item>
    <item>
      <title>WordPress - Hacked site redirections</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Wed, 10 Apr 2019 17:40:34 +0000</pubDate>
      <link>https://dev.to/uwutrinket/wordpress-hacked-site-redirections-4i8d</link>
      <guid>https://dev.to/uwutrinket/wordpress-hacked-site-redirections-4i8d</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;I have encountered a project where the WP (WordPress) website was redirecting to some "ad" websites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identifying the problem
&lt;/h2&gt;

&lt;p&gt;By debugging, from Google Chrome &lt;code&gt;Sources&lt;/code&gt; panel with &lt;code&gt;pause script execution&lt;/code&gt;, we identify the redirection occurring from a third party script injected in &lt;code&gt;.php&lt;/code&gt; files inside the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Root cause
&lt;/h2&gt;

&lt;p&gt;A plugin update &lt;a href="https://wordpress.org/plugins/yuzo-related-post/"&gt;Related Posts Plugin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The WP admin updated the plugin after an update notice without knowing the plugin actually became a "malware" that highjacked websites.&lt;/p&gt;

&lt;p&gt;Of course, the source code is not available from the plugin website so it is hard to check the integrity of code beforehand. And after checking the WP page of the plugin the status is &lt;code&gt;This plugin was closed on March 30, 2019 and is no longer available for download.&lt;/code&gt;, but the plugin owner has pushed an update on April 10, 2019 at around 7PM (Paris time) (Covering up the tracks?).&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixing the problem
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Plugin removal
&lt;/h3&gt;

&lt;p&gt;Plugin removal might fix the problem only if it didn't affect external files to the plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Cleaning by hand (unsafe)
&lt;/h3&gt;

&lt;p&gt;In my case, the "malware" succeed to change files at &lt;code&gt;${ROOT}/wp-includes/&lt;/code&gt;. So I had to clean all the &lt;code&gt;javascript&lt;/code&gt; injections "by hand".&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Backup
&lt;/h3&gt;

&lt;p&gt;If you have a &lt;code&gt;backup&lt;/code&gt; of the database before the infection, I advise to delete the project and reinstall the project and feed &lt;code&gt;backup&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid plugin malware
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Never update plugins on production environment&lt;/li&gt;
&lt;li&gt;Do backup&lt;/li&gt;
&lt;li&gt;Check plugin source code before installing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sources:&lt;br&gt;
&lt;a href="https://hellofromhony.org/counter"&gt;Redirection malware third party link&lt;/a&gt;&lt;br&gt;
&lt;a href="https://gist.github.com/stefan2904/a31a676b6fc202d2c6428acd728ad791"&gt;Gist of similar malware&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/55610548/vulnerability-in-closed-plugin-yuzo-related-posts"&gt;Plugin incriminating StackOverflow post&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/50693160/wordpress-hacked-script-is-injected-into-wp-emoji-release-min-js-jquery-js"&gt;Related hacked problem&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>hacked</category>
      <category>redirection</category>
      <category>malware</category>
    </item>
    <item>
      <title>Fix unexpected scroll jump - Vue Router</title>
      <dc:creator>Rémi</dc:creator>
      <pubDate>Fri, 01 Feb 2019 15:53:59 +0000</pubDate>
      <link>https://dev.to/uwutrinket/fix-scroll-jump---vue-router-45ja</link>
      <guid>https://dev.to/uwutrinket/fix-scroll-jump---vue-router-45ja</guid>
      <description>&lt;p&gt;You may have noticed a breaking change in scroll behavior in modern browsers called &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/History"&gt;scrollRestoration&lt;/a&gt; while using &lt;a href="https://router.vuejs.org/"&gt;Vue Router&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is an awesome feature that allows the browser to jump back to the previously saved scroll location with a JS script based routing.&lt;/p&gt;

&lt;p&gt;Unfortunately, it conflicts with the Vue Router implemented methods &lt;a href="https://router.vuejs.org/guide/advanced/scroll-behavior.html#scroll-behavior"&gt;scrollBehavior&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have no &lt;code&gt;&amp;lt;transition/&amp;gt;&lt;/code&gt; on your &lt;code&gt;&amp;lt;router-view/&amp;gt;&lt;/code&gt; you might not see any difference with the old behavior.&lt;br&gt;
But if you are using it, especially leave transition, the page scroll jumps back to top at the start of the transition when you navigate to a new page.&lt;/p&gt;

&lt;p&gt;The solution is to set &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/History"&gt;scrollRestoration&lt;/a&gt; to &lt;code&gt;manual&lt;/code&gt;, so the browser doesn't try to handle the behavior in your place.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'scrollRestoration'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scrollRestoration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'manual'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Source: &lt;a href="https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration"&gt;History API: Scroll Restoration&lt;/a&gt; by Paul Lewis&lt;/p&gt;

</description>
      <category>vuerouter</category>
      <category>scrolljump</category>
      <category>scrollbehavior</category>
      <category>vue</category>
    </item>
  </channel>
</rss>
