---
layout: false
---
{% raw %}
<!DOCTYPE HTML>
<html lang="zh-CN">

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
	<title>TRHX'S BLOG | ABOUT</title>
	<meta name="keywords" content="TRHX,关于">
	<meta name="description" content="关于TRHX">
	<meta name="author" content="TRHX,admin@itrhx.com">
	<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/images/favicon.ico"
		type="image/x-icon">
	<script src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/sakura.js"></script>
	<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/about.css">
	<link href="https://cdn.bootcss.com/font-awesome/5.10.0-12/css/all.css" rel="stylesheet">
</head>
<body ondragstart="window.event.returnValue=false" oncontextmenu="window.event.returnValue=false"
	onselectstart="event.returnValue=false">
	<script>
		document.onkeydown = function () {
			if (window.event && window.event.keyCode == 123) {
				event.keyCode = 0;
				event.returnValue = false;
				return false;
			}
		};
	</script>
	<audio autoplay loop>
		<source src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/music/sillyboy.mp3" type="audio/mpeg">
		您的浏览器不支持audio标签，无法播放音乐！
	</audio>
	<div class="mdui-container">
		<div class="showarea-1">
			<a href="https://www.itrhx.com/" target="_blank">
				<img id="mainicon" src='https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/images/trhx2.png'></img>
			</a>
			<table>
				<tr>
					<td><i class="fa fa-user-tie fa-fw"></i> 江湖名称：TRHX</td>
					<td><i class="fa fa-map-marker-alt fa-fw"></i> 常驻之地：中国 | 湖北 | 武汉</td>
				</tr>
				<tr>
					<td><i class="fa fa-birthday-cake fa-fw"></i> 初度之辰：1999</td>
					<td><i class="fas fa-biking fa-fw"></i> 兴趣爱好：骑游 | 编程 | 剪辑</td>
				</tr>
			</table>
		</div>
	</div>
	<div class="mdui-container">
		<div class="showarea-2">
			<h3>技能 | Skill</h3>
			<div>
				<section class="skill">
					<div class="item">
						<div class="describe">
							HTML/CSS/JS
						</div>
						<div class="progress">
							<span class="green" style="width: 65%;"><span>65%</span></span>
						</div>
					</div>
					<div class="item">
						<div class="describe">
							C/C++
						</div>
						<div class="progress">
							<span class="orange" style="width: 20%;"><span>20%</span></span>
						</div>
					</div>
					<div class="item">
						<div class="describe">
							JAVA
						</div>
						<div class="progress">
							<span class="red" style="width: 30%;"><span>30%</span></span>
						</div>
					</div>
					<div class="item">
						<div class="describe">
							PYTHON
						</div>
						<div class="progress">
							<span class="blue" style="width: 75%;"><span>75%</span></span>
						</div>
					</div>
					<div class="item">
						<div class="describe">
							HEXO/GIT
						</div>
						<div class="progress">
							<span class="darkblue" style="width: 90%;"><span>90%</span></span>
						</div>
					</div>
					<div class="item">
						<div class="describe">
							PS/PR/AE
						</div>
						<div class="progress">
							<span class="orange" style="width: 65%;"><span>65%</span></span>
						</div>
					</div>
				</section>
			</div>
		</div>
		<div class="showarea-3">
			<h3>简介 | Introduction</h3>
			<p>● 学历：在校本科软件工程大三学生；</p>
			<p>● 现况：自学Python中，网络爬虫方向；</p>
			<p>● 目标：优秀前端 or 网络爬虫工程师；</p>
			<p>● 博客：好记性不如烂笔头，记录学习过程；</p>
			<p>● 兴趣：公路党，四轮承载的是肉体，两轮承载的是灵魂！</p>
			<p>● 其他：虽然很菜，但是在努力学习中！</p>
		</div>
	</div>
	<div class="mdui-container">
		<div class="showarea-4">
			<h3>联系我 | Contact me</h3>
			<a href="https://www.itrhx.com/" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/hexo.png" class="icon" title="个人博客"></a>
			<a href="https://github.com/TRHX" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/github.png" class="icon"
					title="GitHub"></a>
			<a href="https://itrhx.blog.csdn.net/" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/csdn.png" class="icon"
					title="CSDN"></a>
			<a href="https://www.cnblogs.com/TRHX/" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/cnblogs.png" class="icon" title="博客园"></a>
			<a href="https://www.zhihu.com/people/tan-70-56/activities" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/zhihu.png"
					class="icon" title="知乎"></a>
			<a href="https://music.163.com/#/user/home?id=1379654769" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/netease.png"
					class="icon" title="网易云音乐"></a>
			<a href="https://space.bilibili.com/314463806" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/bilibili.png" class="icon"
					title="哔哩哔哩"></a>
			<a href="http://wpa.qq.com/msgrd?v=3&uin=2273902448&site=qq&menu=yes" target="_blank"><img
					src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/qq.png" class="icon" title="QQ"></a>
			<a href="mailto:admin@itrhx.com" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/mail.png" class="icon" title="邮件"></a>
			<a href="https://t.me/TRHX" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/telegram.png" class="icon"
					title="Telegram"></a>
			<a href="https://twitter.com/TRHX6" target="_blank"><img src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/twitter.png" class="icon"
					title="Twitter"></a>
			<!--<a href="https://www.facebook.com/profile.php?id=100039716302318" target="_blank"><img
					src="https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.4/about/icon/facebook.png" class="icon" title="Facebook"></a>-->
		</div>
	</div>
	<footer id="footer">
		Copyright © 2018-2019 <a href="https://www.itrhx.com/" target="_blank">TRHX'S BLOG</a>. All rights reserved.
	</footer>
	<canvas id="sakura"></canvas>
	<script>
		if ('addEventListener' in window) {
			window.addEventListener('load', function () { document.body.className = document.body.className.replace(/\bis-loading\b/, ''); });
			document.body.className += (navigator.userAgent.match(/(MSIE|rv:11\.0)/) ? ' is-ie' : '');
		}
	</script>
	<script id="sakura_point_vsh" type="x-shader/x_vertex">
		uniform mat4 uProjection;
		uniform mat4 uModelview;
		uniform vec3 uResolution;
		uniform vec3 uOffset;
		uniform vec3 uDOF;  //x:focus distance, y:focus radius, z:max radius
		uniform vec3 uFade; //x:start distance, y:half distance, z:near fade start

		attribute vec3 aPosition;
		attribute vec3 aEuler;
		attribute vec2 aMisc; //x:size, y:fade

		varying vec3 pposition;
		varying float psize;
		varying float palpha;
		varying float pdist;

		//varying mat3 rotMat;
		varying vec3 normX;
		varying vec3 normY;
		varying vec3 normZ;
		varying vec3 normal;

		varying float diffuse;
		varying float specular;
		varying float rstop;
		varying float distancefade;

		void main(void) {
		// Projection is based on vertical angle
		vec4 pos = uModelview * vec4(aPosition + uOffset, 1.0);
		gl_Position = uProjection * pos;
		gl_PointSize = aMisc.x * uProjection[1][1] / -pos.z * uResolution.y * 0.5;

		pposition = pos.xyz;
		psize = aMisc.x;
		pdist = length(pos.xyz);
		palpha = smoothstep(0.0, 1.0, (pdist - 0.1) / uFade.z);

		vec3 elrsn = sin(aEuler);
		vec3 elrcs = cos(aEuler);
		mat3 rotx = mat3(
		1.0, 0.0, 0.0,
		0.0, elrcs.x, elrsn.x,
		0.0, -elrsn.x, elrcs.x
		);
		mat3 roty = mat3(
		elrcs.y, 0.0, -elrsn.y,
		0.0, 1.0, 0.0,
		elrsn.y, 0.0, elrcs.y
		);
		mat3 rotz = mat3(
		elrcs.z, elrsn.z, 0.0, 
		-elrsn.z, elrcs.z, 0.0,
		0.0, 0.0, 1.0
		);
		mat3 rotmat = rotx * roty * rotz;
		normal = rotmat[2];

		mat3 trrotm = mat3(
		rotmat[0][0], rotmat[1][0], rotmat[2][0],
		rotmat[0][1], rotmat[1][1], rotmat[2][1],
		rotmat[0][2], rotmat[1][2], rotmat[2][2]
		);
		normX = trrotm[0];
		normY = trrotm[1];
		normZ = trrotm[2];

		const vec3 lit = vec3(0.6917144638660746, 0.6917144638660746, -0.20751433915982237);

		float tmpdfs = dot(lit, normal);
		if(tmpdfs < 0.0) {
		normal = -normal;
		tmpdfs = dot(lit, normal);
		}
		diffuse = 0.4 + tmpdfs;

		vec3 eyev = normalize(-pos.xyz);
		if(dot(eyev, normal) > 0.0) {
		vec3 hv = normalize(eyev + lit);
		specular = pow(max(dot(hv, normal), 0.0), 20.0);
		}
		else {
		specular = 0.0;
		}

		rstop = clamp((abs(pdist - uDOF.x) - uDOF.y) / uDOF.z, 0.0, 1.0);
		rstop = pow(rstop, 0.5);
		//-0.69315 = ln(0.5)
		distancefade = min(1.0, exp((uFade.x - pdist) * 0.69315 / uFade.y));
		}
	</script>
	<script id="sakura_point_fsh" type="x-shader/x_fragment">
		#ifdef GL_ES
		//precision mediump float;
		precision highp float;
		#endif

		uniform vec3 uDOF;  //x:focus distance, y:focus radius, z:max radius
		uniform vec3 uFade; //x:start distance, y:half distance, z:near fade start

		const vec3 fadeCol = vec3(0.08, 0.03, 0.06);

		varying vec3 pposition;
		varying float psize;
		varying float palpha;
		varying float pdist;

		//varying mat3 rotMat;
		varying vec3 normX;
		varying vec3 normY;
		varying vec3 normZ;
		varying vec3 normal;

		varying float diffuse;
		varying float specular;
		varying float rstop;
		varying float distancefade;

		float ellipse(vec2 p, vec2 o, vec2 r) {
		vec2 lp = (p - o) / r;
		return length(lp) - 1.0;
		}

		void main(void) {
		vec3 p = vec3(gl_PointCoord - vec2(0.5, 0.5), 0.0) * 2.0;
		vec3 d = vec3(0.0, 0.0, -1.0);
		float nd = normZ.z; //dot(-normZ, d);
		if(abs(nd) < 0.0001) discard;

		float np = dot(normZ, p);
		vec3 tp = p + d * np / nd;
		vec2 coord = vec2(dot(normX, tp), dot(normY, tp));

		//angle = 15 degree
		const float flwrsn = 0.258819045102521;
		const float flwrcs = 0.965925826289068;
		mat2 flwrm = mat2(flwrcs, -flwrsn, flwrsn, flwrcs);
		vec2 flwrp = vec2(abs(coord.x), coord.y) * flwrm;

		float r;
		if(flwrp.x < 0.0) {
		r = ellipse(flwrp, vec2(0.065, 0.024) * 0.5, vec2(0.36, 0.96) * 0.5);
		}
		else {
		r = ellipse(flwrp, vec2(0.065, 0.024) * 0.5, vec2(0.58, 0.96) * 0.5);
		}

		if(r > rstop) discard;

		vec3 col = mix(vec3(1.0, 0.8, 0.75), vec3(1.0, 0.9, 0.87), r);
		float grady = mix(0.0, 1.0, pow(coord.y * 0.5 + 0.5, 0.35));
		col *= vec3(1.0, grady, grady);
		col *= mix(0.8, 1.0, pow(abs(coord.x), 0.3));
		col = col * diffuse + specular;

		col = mix(fadeCol, col, distancefade);

		float alpha = (rstop > 0.001)? (0.5 - r / (rstop * 2.0)) : 1.0;
		alpha = smoothstep(0.0, 1.0, alpha) * palpha;

		gl_FragColor = vec4(col * 0.5, alpha);
		}
	</script>
	<!-- effects -->
	<script id="fx_common_vsh" type="x-shader/x_vertex">
		uniform vec3 uResolution;
		attribute vec2 aPosition;

		varying vec2 texCoord;
		varying vec2 screenCoord;

		void main(void) {
		gl_Position = vec4(aPosition, 0.0, 1.0);
		texCoord = aPosition.xy * 0.5 + vec2(0.5, 0.5);
		screenCoord = aPosition.xy * vec2(uResolution.z, 1.0);
		}
	</script>
	<script id="bg_fsh" type="x-shader/x_fragment">
		#ifdef GL_ES
		//precision mediump float;
		precision highp float;
		#endif

		uniform vec2 uTimes;

		varying vec2 texCoord;
		varying vec2 screenCoord;

		void main(void) {
		vec3 col;
		float c;
		vec2 tmpv = texCoord * vec2(0.8, 1.0) - vec2(0.95, 1.0);
		c = exp(-pow(length(tmpv) * 1.8, 2.0));
		col = mix(vec3(0.02, 0.0, 0.03), vec3(0.96, 0.98, 1.0) * 1.5, c);
		gl_FragColor = vec4(col * 0.5, 1.0);
		}
	</script>
	<script id="fx_brightbuf_fsh" type="x-shader/x_fragment">
		#ifdef GL_ES
		//precision mediump float;
		precision highp float;
		#endif
		uniform sampler2D uSrc;
		uniform vec2 uDelta;

		varying vec2 texCoord;
		varying vec2 screenCoord;

		void main(void) {
		vec4 col = texture2D(uSrc, texCoord);
		gl_FragColor = vec4(col.rgb * 2.0 - vec3(0.5), 1.0);
		}
	</script>
	<script id="fx_dirblur_r4_fsh" type="x-shader/x_fragment">
		#ifdef GL_ES
		//precision mediump float;
		precision highp float;
		#endif
		uniform sampler2D uSrc;
		uniform vec2 uDelta;
		uniform vec4 uBlurDir; //dir(x, y), stride(z, w)

		varying vec2 texCoord;
		varying vec2 screenCoord;

		void main(void) {
		vec4 col = texture2D(uSrc, texCoord);
		col = col + texture2D(uSrc, texCoord + uBlurDir.xy * uDelta);
		col = col + texture2D(uSrc, texCoord - uBlurDir.xy * uDelta);
		col = col + texture2D(uSrc, texCoord + (uBlurDir.xy + uBlurDir.zw) * uDelta);
		col = col + texture2D(uSrc, texCoord - (uBlurDir.xy + uBlurDir.zw) * uDelta);
		gl_FragColor = col / 5.0;
		}
	</script>
	<!-- effect fragment shader template -->
	<script id="fx_common_fsh" type="x-shader/x_fragment">
		#ifdef GL_ES
		//precision mediump float;
		precision highp float;
		#endif
		uniform sampler2D uSrc;
		uniform vec2 uDelta;

		varying vec2 texCoord;
		varying vec2 screenCoord;

		void main(void) {
		gl_FragColor = texture2D(uSrc, texCoord);
		}
	</script>
	<!-- post processing -->
	<script id="pp_final_vsh" type="x-shader/x_vertex">
		uniform vec3 uResolution;
		attribute vec2 aPosition;
		varying vec2 texCoord;
		varying vec2 screenCoord;
		void main(void) {
		gl_Position = vec4(aPosition, 0.0, 1.0);
		texCoord = aPosition.xy * 0.5 + vec2(0.5, 0.5);
		screenCoord = aPosition.xy * vec2(uResolution.z, 1.0);
		}
	</script>
	<script id="pp_final_fsh" type="x-shader/x_fragment">
		#ifdef GL_ES
		//precision mediump float;
		precision highp float;
		#endif
		uniform sampler2D uSrc;
		uniform sampler2D uBloom;
		uniform vec2 uDelta;
		varying vec2 texCoord;
		varying vec2 screenCoord;
		void main(void) {
		vec4 srccol = texture2D(uSrc, texCoord) * 2.0;
		vec4 bloomcol = texture2D(uBloom, texCoord);
		vec4 col;
		col = srccol + bloomcol * (vec4(1.0) + srccol);
		col *= smoothstep(1.0, 0.0, pow(length((texCoord - vec2(0.5)) * 2.0), 1.2) * 0.5);
		col = pow(col, vec4(0.45454545454545)); //(1.0 / 2.2)

		gl_FragColor = vec4(col.rgb, 1.0);
		gl_FragColor.a = 1.0;
		}
	</script>
</body>

</html>
{% endraw %}