Server Code (Client)
1 |
|
Server Code(Erlang)
Sample Code:Erlang Socket Server
1 |
|
1 |
|
Sample Code:Erlang Socket Server
1 |
|
利用Python实现在Blender中自动导出所有相机角度下的Action。
1 | import bpy |
1 | -module (conn_ets). |
1 | -module(ws_h). |
1 | -module(chess_app_app). |
解决办法:
1 | pkg bootstrap -f |
系统更新:
*原文地址:help-the-world-by-healing-your-nginx-configuration*
换国内源
1 | vi /etc/freebsd-update.conf # change .org to .cn |
1 | createdb -h localhost -U postgres -p 5432 mydb |
1 | psql -h localhost -U postgres -p 5432 mydb |
1 | sudo su - postgres 1234567890 |
1 | psql sqlname |
1 | CREATE ROLE name PASSWORD 'string' |
1 | DROP TABLE tablename |
1 | delete from users |
1 | psql -h localhost -U postgres |
1 | createdb -h localhost -U postgres -p 5432 tempDB |
1 | pg_dump -h localhost -U sunshuai tempdb > dumpfile |
1 | psql -h localhost -U postgres |
原文地址:How to save and load game in Godot Engine
Save the file into res://autoload/user_data_manager.gd
Use the same process to create another script res://autoload/game_manager.gd
Browse our two scripts and set their names as shown below.
set scripts as autoload
To save and load game in Godot engine, we need to create some scripts. We will create this once and can be used in all of our game. So let us jump into scripting.
The user_data_manager.gd script looks like:
1 | extends Node2D |
To understand the above script we have to look into the game_manager.gd script:
1 | extends Node2D |
Singleton in Godot is auto instantiated and available to every script by the name we set in the project settings. We have two Singleton objects now – UserDataManager and GameManager. Both can be accessed from any other script we are going to write for our game.
We have a default user data variable. This is a dictionary object. If there is no save data present when the game starts, this default data is used. In fact, it goes deeper, even if the loaded data has no records for a specified key then the value from this default data is used. This is possible when we update our game and has additional values to be saved.
When our game boots up, UserDataManager’s load_data method is called with the default data and a version string. This version string can be in any format but it should represent our game version somehow. The UserDataManager will load the save data from the disk. If there is no save data present, it creates a new one with the specified version. If our current game version is different than the one in the saved file, the version mismatch function is called. This is the place to write logic to convert the old user data format to the new one.
That’s it. We can initialize everything in the init() and UserDataManager will manage the saving and loading of our game.
This is how you save and load game in Godot Engine.
When we want to save any data we can call,
1 | UserDataManager.set_data("health",75) |
And to get something,
1 | var player_health = UserDataManager.get_data("health") |
Calling the above methods will work from any script and returns the value from our saved data. The above script will only work on 2.1.x versions of Godot engine. Godot 3.0 is just around the corner and scripting API is different for the Dictionary class. We will check it out when it is released.
If you really need an explanation for the user_data_manager.gd, let me know in the comments below. Thanks for reading.
原文地址:help-the-world-by-healing-your-nginx-configuration
海军上将威廉·麦克雷文2014年著名的演讲,在得克萨斯大学,他说,如果你想改变世界,通过使你的床开始。有时候,小事情可能会产生很大的影响-无论是早上铺床还是对网站的HTTP服务器配置进行少量更改。
这看起来像是夸大其词?2020年的头几个月,我们对世界上正常和合理事物的所有定义都花光了。由于COVID‑19大流行,地球上将近一半的人口被困在自己的家中,因此互联网已成为他们交流,娱乐,购买食物,工作和教育的唯一方式。互联网每周都比以往任何时候都拥有更高的网络流量和服务器负载。根据BroadbandNow在3月25日发布的报告,“在我们分析的200个城市中,有88个(44%)在过去一周内经历了一定程度的网络降级,而之前的10个星期是这样”。
诸如Netflix和YouTube之类的主要媒体平台都在限制其传输质量,以保护网络链接,使人们有更多带宽可用于工作,与家人交流或在学校上虚拟课。但这还不够,因为网络质量逐渐恶化,许多服务器变得超负荷。
如果您拥有网站并可以管理其HTTP服务器配置,则可以提供帮助。进行一些小的更改可以减少用户生成的网络带宽以及服务器的负载。这是双赢的局面:如果您的站点当前负载沉重,则可以减少它,从而为更多的用户提供服务,并可能降低成本。如果负载不是很高,则更快的负载可以改善用户的体验(有时会积极影响您在Google搜索结果中的排名)。
如果您的应用程序每个月有数百万用户,或者是一个包含烘焙食谱的小博客,那都没有关系–您消除的每千字节网络流量都释放了容量,供那些迫切需要在线检查医学检查结果或创建包裹标签的人使用给亲戚寄一些重要的东西
在此博客中,我们介绍了您可以对NGINX配置进行的一些简单但功能强大的更改。举一个真实的例子,我们使用我的朋友Rogalove的电子商务网站,该公司是我居住的波兰一家生态化妆品制造商。该网站是运行NGINX 1.15.9作为其Web服务器的相当标准的WooCommerce安装。为了进行计算,我们假设该网站每天获得100个唯一身份用户,其中30%的用户为固定访问者,并且每个用户在会话期间平均访问4个页面。
这些技巧是您可以立即采取的简单步骤,以提高性能并减少网络带宽。如果您要处理大量流量,则可能需要实施更复杂的更改以产生重大影响,例如,调整操作系统和NGINX,提供正确的硬件容量,以及(最重要的是)启用和调整缓存。查看这些博客文章以获取详细信息:
如您所知,用于在现代网站上构建页面的HTML,CSS和JavaScript文件可能非常庞大。在大多数情况下,Web服务器可以即时压缩这些和其他文本文件,以节省网络带宽。
如您在左下方所见,没有压缩:文本文件的大小为1.15 MB,并且传输了很多数据。
默认情况下,NGINX中禁用压缩,但是根据您的安装或Linux发行版,某些设置可能会在默认的nginx.conf文件中启用。在这里,我们在NGINX配置文件中启用gzip压缩:
1 | gzip on; |
如您在以下屏幕截图中所见,压缩后的数据传输量仅为260 KB ,减少了约80%!对于页面上的每个新用户,您可以节省大约917 KB的数据传输。对于我们的WooCommerce安装,每天62 MB,或每月1860 MB。
当浏览器检索网页的文件时,它会将副本保留在本地磁盘缓存中,这样,当您再次访问该页面时,它不必从服务器重新获取文件。每个浏览器都使用自己的逻辑来决定何时使用文件的本地副本以及何时在服务器上更改了文件时再次获取它。但是,作为网站所有者,您可以在发送的HTTP响应中设置缓存控制和过期标头,以提高浏览器的缓存行为的效率。从长远来看,您会收到很多不必要的HTTP请求。
首先,您可以为字体和图像设置较长的缓存过期时间,这些字体和图像可能不会经常更改(即使更改,它们通常也会获得新的文件名)。在以下示例中,我们指示客户端浏览器将字体和图像在本地缓存中保留一个月:
1 | location ~* \.(?:jpg|jpeg|gif|png|ico|woff2)$ { |
HTTP / 2是用于服务网页的下一代协议,旨在更好地利用网络和主机服务器。根据Google文档,它可以更快地加载页面: 生成的协议对网络更友好,因为与HTTP / 1.x相比,使用的TCP连接更少。这意味着与其他流量的竞争减少,连接寿命更长,从而可以更好地利用可用网络容量。 NGINX 1.9.5和更高版本(以及NGINX Plus R7和更高版本)支持HTTP / 2协议,您所需要做的就是启用它。为此,请在您的NGINX配置文件中http2的listen指令中包含参数:
1 | listen 443 ssl http2; |
请注意,在大多数情况下,您还需要启用TLS才能使用HTTP / 2。 您可以通过HTTP2.Pro服务验证您(或任何站点)是否支持HTTP/2:
让自己喝一杯自己喜欢的饮料,舒适地坐着,然后思考:您上次查看访问日志文件是什么时候?上周,上个月,从来没有?即使将其用于站点的日常监视,您也可能只关注错误(400和500状态代码等),而不关注成功的请求。
通过减少或消除不必要的日志记录,可以节省服务器上的磁盘存储,CPU和I / O操作。这不仅使您的服务器更快一点-如果将您部署在云环境中,则释放的I / O吞吐量和CPU周期可能为同一虚拟机上的其他虚拟机或应用程序节省生命。
有几种不同的方法可以减少和优化日志记录。在这里,我们重点介绍三个。
如果您不需要记录检索普通页面资源(例如图像,JavaScript文件和CSS文件)的请求,则这是一种快速简便的解决方案。您需要做的就是创建一个location与这些文件类型匹配的新块,并禁用其中的日志记录。(您也可以将此access_log指令添加到我们设置标头的上方的location块中。)Cache-Control
1 | location ~* \.(?:jpg|jpeg|gif|png|ico|woff2|js|css)$ { |
这是一种更强大的方法,因为它会丢弃带有或响应代码的查询,仅记录错误。它比方法1稍微复杂一点,因为它取决于如何配置NGINX日志记录。在我们的示例中,我们使用Ubuntu Server发行版中包含的标准nginx.conf,因此,无论虚拟主机如何,所有请求都记录到/var/log/nginx/access.log中。2xx3xx
使用官方NGINX文档中的示例,让我们打开条件日志记录。创建一个变量$loggable,并将其设置为,0以使用和代码进行请求,否则设置为 。然后在指令中将此变量作为条件引用。2xx3xx1access_log
这是/etc/nginx/nginx.conf中http上下文中的原始指令:
1 | access_log /var/log/nginx/access.log; |
添加一个map块并从access_log指令中引用它:
1 | map $status $loggable { |
请注意,尽管这combined是默认的日志格式,但是在包含if参数时,您需要明确指定它。
即使您要记录所有请求,也可以通过打开访问日志缓冲来最大程度地减少I / O操作。使用此指令,NGINX会等待将日志数据写入磁盘,直到填满512 KB缓冲区或自上次刷新以来经过1分钟(以先发生者为准)。
1 | access_log /var/log/nginx/access.log combined buffer=512k flush=1m; |
如果服务器提供较大的文件(或较小但非常受欢迎的文件,例如表单或报表),则设置客户端下载文件的最大速度可能很有用。如果您的站点已经承受了很高的网络负载,则限制下载速度会留下更多带宽,以使应用程序的关键部分保持响应速度。这是硬件制造商使用的非常流行的解决方案–您可能需要等待更长的时间才能为打印机下载3 GB的驱动程序,但是同时有成千上万的其他人下载您仍然可以下载。😉
使用limit_rate指令限制特定URL的带宽。在这里,我们将/ download 下每个文件的传输速率限制为每秒50 KB。
1 | location /download/ { |
您可能还希望仅对较大的文件进行速率限制,这可以使用limit_rate_after指令进行。在此示例中,每个文件(来自任何目录)的前500 KB都不受速度限制地进行传输,之后的所有内容均以50 KB / s为上限。这样可以加快网站关键部分的交付速度,同时降低其他部分的速度。
1 | location / { |
请注意,速率限制适用于浏览器和NGINX之间的单个HTTP连接,因此请不要阻止用户使用下载管理器来解决速率限制。 最后,您还可以限制到服务器的并发连接数或请求速率。有关详细信息,请参见我们的文档。
我们希望这五个技巧能帮助您优化网站的性能。速度和带宽增益因网站而异。即使调整您的NGINX配置似乎并没有显着释放带宽或提高速度,成千上万的网站单独调整其NGINX配置的整体影响还是会加在一起。我们的全球网络得到更有效的利用,这意味着最关键的服务将在需要时提供。 如果您在站点上遇到有关NGINX的任何问题,我们将为您提供帮助!在COVID‑19大流行期间,NGINX员工和社区正在监视Stack Overflow 1上的NGINX通道,并尽快答复问题和要求。 如果您在流行病最前沿的组织工作并有高级需求,则您可能有资格获得最多五个免费的NGINX Plus许可证以及更高级别的F5 DNS负载平衡器云服务。有关详细信息,请参见受COVID‑19影响的网站的免费资源。 还可以查看该博客,了解使用NGINX和F5的免费资源来提高网站性能的其他简便方法的摘要。
现在在github已经有现成的threejs的weapp-ddapter.js了。但我早前做得时候没有找到,只找到修改weapp-ddapter的方式。
1 | createElementNS: function createElementNS(nameSpace, tagName){ |
1 | { |
自此微信小游戏就可以支持threejs了,下面开始做个简单的小游戏。
这个游戏需要用到两个js库,用以辅助Threejs。
1: Detector.js
Detector用来检测threejs的兼容性。
2: OrbitControls.js
OrbitControls用来作为threejs的轨道控制器。
额外的,如果想监测threejs的性能帧数,可以用stats.js。这里的Demo比较简单,就不用它了。
初始化先检测webgl的兼容性
1 | if (g.Detector.webgl) { |
这里的小游戏场景,按钮,为了省事都以立方体cube代替。食物cube在场景随机产生,同时设置随机颜色。 在操作上,设定为在场景cube的6个面各有一个按钮cube,通过点击这6个按钮控制小蛇在空间的移动方向。为了方便观察,我们 设置食物cube,小蛇cube均有alpha = 0.4的透明度。
效果图如下:
需要改进:这里玩了几把,操作上需要不断的调整场景角度才能很好的操作小蛇,操作比较僵硬。暂时没有好的操作优化思路,暂时就到这吧,有空闲时间再研究。
这里用懒惰的办法,直接安装二进制包:
1 | pkg install node |
(PS:网络好的话还是ports源码安装比较好)
安装过程是没有任何问题的,但是我想 node -v看下版本测试是否真的安装成功的时候。
然后就出事了:
Undefined symbol “nghttp2_submit_origin” nodejs FreeBSD
好在FreeBSD的优势就是文档详细,在官方文档找到如下:
其实真正导致这个问题的是缺少 libnghttp2但是我看到我的系统自带python 版本是python27-2.7.13,为了不出其他的幺蛾子,索性把依赖的库都升级到requires的版本了。
把依赖的包依次安装或更新,问题瞬间解决。完美