{"id":271,"date":"2025-02-05T11:54:48","date_gmt":"2025-02-05T10:54:48","guid":{"rendered":"https:\/\/alexandrecoulet.fr\/?page_id=271"},"modified":"2025-09-22T16:10:55","modified_gmt":"2025-09-22T14:10:55","slug":"a-propos","status":"publish","type":"page","link":"https:\/\/alexandrecoulet.fr\/index.php\/a-propos\/","title":{"rendered":"\u00c0 propos"},"content":{"rendered":"\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div style=\"height:76px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-8dd13e6d wp-block-group-is-layout-constrained\" style=\"padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)\">\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-b5cd8a94 wp-block-group-is-layout-flex\" style=\"min-height:0px\">\n<p class=\"has-text-align-left is-style-default\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.196), 1rem);\">Ayant r\u00e9cemment termin\u00e9 mes \u00e9tudes artistiques, je suis actuellement \u00e0 la recherche d\u2019une premi\u00e8re exp\u00e9rience professionnelle. <\/p>\n\n\n\n<p class=\"has-text-align-left is-style-default\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.196), 1rem);\">Rigoureux, autonome et investi dans mon travail, je serai ravi de contribuer \u00e0 vos projets.<\/p>\n\n\n\n<p class=\"has-text-align-left is-style-default\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.196), 1rem);\">Si vous avez une requ\u00eate ou des questions, n&rsquo;h\u00e9sitez pas \u00e0 me contacter par mail.<\/p>\n<\/div>\n\n\n\n<div style=\"height:2px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list has-medium-font-size\">\n<li class=\"has-base-color has-text-color has-link-color wp-elements-93f8b2e19211271a0636ae2f6633a7b5\"><a href=\"https:\/\/www.linkedin.com\/feed\/update\/urn:li:activity:7375116080807198720\/\" data-type=\"link\" data-id=\"https:\/\/www.instagram.com\/lumiblob__\/\">Portfolio\/CV<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div style=\"height:7px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-23441af8 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"297\" height=\"374\" src=\"https:\/\/alexandrecoulet.fr\/wp-content\/uploads\/2025\/03\/otter_thing_1.png\" alt=\"\" class=\"wp-image-778\" style=\"width:177px\" srcset=\"https:\/\/alexandrecoulet.fr\/wp-content\/uploads\/2025\/03\/otter_thing_1.png 297w, https:\/\/alexandrecoulet.fr\/wp-content\/uploads\/2025\/03\/otter_thing_1-238x300.png 238w\" sizes=\"auto, (max-width: 297px) 100vw, 297px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<style>\n.speen {\n   animation: rotating 1s linear infinite;\n }\n\n@keyframes rotating {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n<style>\n\n\n\n<footer class=\"wp-block-group alignfull flexbox-bottom has-global-padding is-layout-constrained wp-container-core-group-is-layout-19c400f2 wp-block-group-is-layout-constrained\" style=\"min-height:500px;margin-top:0;margin-bottom:0\">\n<div class=\"struct\">\n<canvas class=\"canvas_1\">Your browser does not seem to support HTML canvas.<\/canvas>\n<\/div>\n\n<style>\n  .canvas_1 {\n    width: 100%;\n    height: 100%;\n  }\n\n.struct {\n  all: revert; \n  background-color:blue; \n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  display: none;\n}\n<\/style>\n<script>\n\"use strict\";\n\nvar canvas = document.querySelector(\".canvas_1\");\nvar gl = canvas.getContext(\"webgl2\");\n\n\/\/************** Shader sources **************\nvar vertexSource = `\n#version 300 es\nin vec2 position;\nvoid main() {\n  gl_Position = vec4(position, 0.0, 1.0);\n}\n`;\n\nvar fragmentSource = `\n#version 300 es\nprecision mediump float;\n\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform vec2 u_mouse;\nout vec4 color;\n\nvoid main() {\n\tvec2 st = gl_FragCoord.xy \/ u_resolution;\n  vec2 stmouse = u_mouse.xy \/ u_resolution;\n\tcolor = vec4(stmouse.x, st.y, cos(u_time*0.001), 1.0);\n  color = vec4(st.x, st.y, cos(u_time*0.001), 1.0);\n}\n`;\nvar fragmentSource2 = `\n#version 300 es\nprecision mediump float;\n\n\n\/\/ Copyright (c) Patricio Gonzalez Vivo, 2015 - http:\/\/patriciogonzalezvivo.com\/\n\/\/ I am the sole copyright owner of this Work.\n\/\/\n\/\/ You cannot host, display, distribute or share this Work in any form,\n\/\/ including physical and digital. You cannot use this Work in any\n\/\/ commercial or non-commercial product, website or project. You cannot\n\/\/ sell this Work and you cannot mint an NFTs of it.\n\/\/ I share this Work for educational purposes, and you can link to it,\n\/\/ through an URL, proper attribution and unmodified screenshot, as part\n\/\/ of your educational material. If these conditions are too restrictive\n\/\/ please contact me and we'll definitely work it out.\n\n#define PI 3.14159265358979323846\n#define TWO_PI 6.28318530717958647693\n\nuniform vec2 u_resolution;\nuniform float u_time;\nout vec4 color;\n\nvec2 rotate2D (vec2 _st, float _angle) {\n  _st -= 0.5;\n  _st =  mat2(cos(_angle),-sin(_angle),\n              sin(_angle),cos(_angle)) * _st;\n  _st += 0.5;\n  return _st;\n}\n\nvec2 tile (vec2 _st, float _zoom) {\n  _st *= _zoom;\n  return fract(_st);\n}\n\nvec2 rotateTile(vec2 _st){\n    _st *= 2.0;\n\n    float index = 0.0;\n    if (fract(_st.x * 0.5) > 0.5){\n        index += 1.0;\n    }\n    if (fract(_st.y * 0.5) > 0.5){\n        index += 2.0;\n    }\n\n    _st = fract(_st);\n\n    if(index == 1.0){\n        _st = rotate2D(_st,PI*0.5);\n    } else if(index == 2.0){\n        _st = rotate2D(_st,PI*-0.5);\n    } else if(index == 3.0){\n        _st = rotate2D(_st,PI);\n    }\n\n    return _st;\n}\n\n\/\/ Based on https:\/\/www.shadertoy.com\/view\/4sSSzG\nfloat triangle (vec2 _st,\n                vec2 _p0, vec2 _p1, vec2 _p2,\n                float _smoothness) {\n  vec3 e0, e1, e2;\n\n  e0.xy = normalize(_p1 - _p0).yx * vec2(+1.0, -1.0);\n  e1.xy = normalize(_p2 - _p1).yx * vec2(+1.0, -1.0);\n  e2.xy = normalize(_p0 - _p2).yx * vec2(+1.0, -1.0);\n\n  e0.z = dot(e0.xy, _p0) - _smoothness;\n  e1.z = dot(e1.xy, _p1) - _smoothness;\n  e2.z = dot(e2.xy, _p2) - _smoothness;\n\n  float a = max(0.0, dot(e0.xy, _st) - e0.z);\n  float b = max(0.0, dot(e1.xy, _st) - e1.z);\n  float c = max(0.0, dot(e2.xy, _st) - e2.z);\n\n  return smoothstep(_smoothness * 2.0,\n                    1e-7,\n                    length(vec3(a, b, c)));\n}\n\nvoid main (void) {\n    vec2 st = gl_FragCoord.xy\/u_resolution.xy;\n\n    st = tile(st,5.0);\n    st = rotateTile(st);\n\n    float pattern = 0.0;\n\n    st = rotate2D(st,-PI*u_time*0.0005);\n    pattern =   triangle(st,\n                         vec2(0.30,-0.5),\n                         vec2(0.70,0.-0.5),\n                         vec2(0.5,1.0),\n                         0.01);\n\n    vec3 Color = vec3(pattern);\n\n    color = vec4(Color,1.0);\n}\n\n`;\n\n\nfunction resize() {\n  if (canvas.width !== canvas.clientWidth || canvas.height !== canvas.clientHeight) {\n    canvas.width = canvas.clientWidth;\n    canvas.height = canvas.clientHeight;\n    gl.viewport(0, 0, canvas.width, canvas.height);\n    gl.uniform2f(resolutionHandle, canvas.width, canvas.height);\n\n  }\n}\n\n\/\/Compile shader and combine with source\nfunction compileShader(shaderSource, shaderType) {\n  var shader = gl.createShader(shaderType);\n  gl.shaderSource(shader, shaderSource);\n  gl.compileShader(shader);\n  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n    throw \"Shader compile failed with: \" + gl.getShaderInfoLog(shader);\n  }\n  return shader;\n}\n\n\/\/From https:\/\/codepen.io\/jlfwong\/pen\/GqmroZ\n\/\/Utility to complain loudly if we fail to find the attribute\/uniform\nfunction getAttribLocation(program, name) {\n  var attributeLocation = gl.getAttribLocation(program, name);\n  if (attributeLocation === -1) {\n    console.warn(\"Cannot find attribute\", name);\n  }\n  return attributeLocation;\n}\n\nfunction getUniformLocation(program, name) {\n  var uniformLocation = gl.getUniformLocation(program, name);\n  if (uniformLocation === -1) {\n    console.warn(\"Cannot find uniform\", name);\n  }\n  return uniformLocation;\n}\n\n\/\/************** Create shaders **************\n\n\/\/Create vertex and fragment shaders\nvar vertexShader = compileShader(vertexSource.trim(), gl.VERTEX_SHADER);\nvar fragmentShader = compileShader(fragmentSource.trim(), gl.FRAGMENT_SHADER);\n\n\/\/Create shader programs\nvar program = gl.createProgram();\ngl.attachShader(program, vertexShader);\ngl.attachShader(program, fragmentShader);\ngl.linkProgram(program);\nif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n  throw \"Program link failed with: \" + gl.getProgramInfoLog(program);\n}\n\ngl.useProgram(program);\n\n\/\/Set up rectangle covering entire canvas\nvar vertexData = new Float32Array([\n  -1.0,\n  1.0, \/\/ top left\n  -1.0,\n  -1.0, \/\/ bottom left\n  1.0,\n  1.0, \/\/ top right\n  1.0,\n  -1.0 \/\/ bottom right\n]);\n\n\/\/Create vertex buffer\nvar vertexDataBuffer = gl.createBuffer();\ngl.bindBuffer(gl.ARRAY_BUFFER, vertexDataBuffer);\ngl.bufferData(gl.ARRAY_BUFFER, vertexData, gl.STATIC_DRAW);\n\n\/\/ Layout of our data in the vertex buffer\nvar positionHandle = getAttribLocation(program, \"position\");\n\ngl.enableVertexAttribArray(positionHandle);\ngl.vertexAttribPointer(\n  positionHandle,\n  2, \/\/ position is a vec2 (2 values per component)\n  gl.FLOAT, \/\/ each component is a float\n  false, \/\/ don't normalize values\n  2 * 4, \/\/ two 4 byte float components per vertex (32 bit float is 4 bytes)\n  0 \/\/ how many bytes inside the buffer to start from\n);\n\n\/\/Set uniform handle\nvar timeHandle = getUniformLocation(program, \"u_time\");\nvar resolutionHandle = getUniformLocation(program, \"u_resolution\");\nvar mouseHandle = getUniformLocation(program, \"u_mouse\");\n\ngl.uniform2f(resolutionHandle, window.innerWidth, window.innerHeight);\n\nfunction draw(time) {\n  resize();\n  \/\/ for mouse\n  onmousemove = function(e){ gl.uniform2f(mouseHandle, e.clientX, e.clientY); }\n  \/\/Send uniforms to program\n  gl.uniform1f(timeHandle, time);\n  \/\/Draw a triangle strip connecting vertices 0-4\n  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n  requestAnimationFrame(draw);\n}\n\nrequestAnimationFrame(draw);\n<\/script>\n<\/footer>\n","protected":false},"excerpt":{"rendered":"<p>Ayant r\u00e9cemment termin\u00e9 mes \u00e9tudes artistiques, je suis actuellement \u00e0 la recherche d\u2019une premi\u00e8re exp\u00e9rience professionnelle. Rigoureux, autonome et investi dans mon travail, je serai ravi de contribuer \u00e0 vos projets. Si vous avez une requ\u00eate ou des questions, n&rsquo;h\u00e9sitez pas \u00e0 me contacter par mail.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_vp_format_video_url":"","_vp_image_focal_point":[],"footnotes":""},"class_list":["post-271","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/pages\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/comments?post=271"}],"version-history":[{"count":55,"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/pages\/271\/revisions"}],"predecessor-version":[{"id":987,"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/pages\/271\/revisions\/987"}],"wp:attachment":[{"href":"https:\/\/alexandrecoulet.fr\/index.php\/wp-json\/wp\/v2\/media?parent=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}