unrealengine最新版源代码

获取ue4全部源代码

什么是github?

github是程序员乐园,用来托管开发项目的源代码,基于web。

如何访问github上的ue4源代码

简单的四步骤:
1、创建登录github.com账号
2、注册ue的账号,拼关联github的账号https://www.unrealengine.com/dashboard/settings
ue-github
3、访问UE的地址:http://github.com/EpicGames,看到UE的邀请点击它将会看到
EpicGames
4、用git工具下载开发中的版本,或者下载稳定版https://github.com/EpicGames/UnrealEngine/releases

你需要的源代码

大部分程序员只需安装版本,如果你直接修改UE引擎源代码,那么你是来对地方。
引用网址:https://www.unrealengine.com/ue4-on-github

pokemon go (精灵宝可梦go)

pokemon go是google earth前员工的公司和任天堂合作开发的基于GPS AR(增强现实)手游,支持ISO Android。目前中国区没开放。中文名:精灵宝可梦go

介绍

GPS技术进行定位,想象下走在路上,打开游戏进行精灵战斗。

链接地址

苹果版:https://itunes.apple.com/us/app/pokemon-go/id1094591345?mt=8
安卓版:https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo

gps signal not found

1、手机设置打开手机GPS
2、安装谷歌地图
3、安装google paly

pokemon go

批量编码转换utf-8

批量转换编码是很痛苦的事情,一种办法是自己去写代码来实现,你得解析判断文件编码的类型utf-8 utf-16 ansi ucs-2,然后判断,难保证都成功的转换。提供一种利用第三方工具批量转换成utf-8 ansi等。

安装nodepad++及插件

  1. 安装https://notepad-plus-plus.org/
  2. Plugins->Plugin Manager->Show Plugin Manager
  3. Python Script安装重启Notepad++
  4. Plugins->Python Script->New script
  5. 输入名字toUtf-8,然后复制下面python脚本
  6. 运行脚本Plugins->Python Script->scripts->toUtf-8

python脚本

转换utf-8、注意备份,是直接把文件编码转换,不支持中文路径

import os;
import sys;
from Npp import notepad #这里必须导入nodepad++ if i note this line, it says, "notepad is not defined"
filePathSrc="E:\\Beyond2\\"#"E:\\Songs2\\" # Path to the folder with files to convert
for root, dirs, files in os.walk(filePathSrc):
    for fn in files:
        if fn[-4:] == '.dtx': # Specify type of the files 判断指定的后缀名
            notepad.open(root + "\\" + fn)
            notepad.runMenuCommand("Encoding", "Convert to UTF-8")#想转成ANSI 替换UTF-8
            notepad.save()
            notepad.close()

 

制作u盘系统的小工具rufus

Rufus体积小,官方自述读写速度是UNetbootin,Universal USB Installer 或者 Windows 7 USB download tool 至少快2倍。
绿色、支持中文,支持win7 win10 ubuntu debian等ISO的U盘系统的刻录
rufus工具:http://rufus.akeo.ie/downloads/rufus-2.9.exe
GPL协议源代码:https://github.com/pbatard/rufus
中文介绍:http://rufus.akeo.ie/?locale=zh_CN
系统:Windows XP以上的系统

插入U盘,选择ISO文件(win10 win7 ubuntu 等系统的ISO)

rufus1

默认推荐

rufus2

确认写入

rufus3

fsx采用快捷键

fsx快捷键,不区分大小写,转载于网络,部分修改

控制油门:

F1        收油门为0%
F2        缓慢收油门   {F1后,长按反推}
F3        缓慢推油门   {起飞时可加大油门}
F4        推油门为100%
Shift+R 自动油门(先打开自动驾驶Z,自动油门后,无法控制油门)

控制襟翼:

F5        襟翼全收  {飞机起飞离地后应收起}
F6        襟翼收一档
F7        襟翼放一档
F8        襟翼全放  {飞机起飞和降落前应打开,一般飞机速度较慢(145~165左右,不同机型各不相同)时都应打开,}

控制视角:

F9        3D驾驶舱视角          {按住Shift键不放,再按数字键1~9(非数字区)可在几种视角切换』
F10      驾驶舱面板视角
F11      机外视角
F12      卫星视角
+          放大
–           缩小
A、S    循环切换视角
CTRL+空格  还原视角
小键盘8 2 4 6 F11后,不接摇杆分别,左右上下移动摄像机
按住Space空格移动鼠标 移动视角摄像机

飞机相关:

.               松开飞机刹车
CTRL+.    飞机手刹,是飞机在地面时停下
G             收放起落架       飞机起飞离地后应把起落架收起,同样,飞机准备降落前应放出起落架
/               收放减速板       飞机降落后可额】为飞机减速,一般在飞机飞行时较少会使用,多少在降落后使用
Shift+/    减速板预位开关(落地时自动开)
Z              开关自动驾驶
L              开灯
B              修正海压
CTRL+E   启动引擎

模拟器相关:

P                    暂停(一定要学会用这个)
;                      保存
~                    空管ATC面板      位于数字键(非数字区)1的左边
V                    截图,图片保存在我的文档/图片里。
SHIFT+P        呼叫推车进行后推。后推时按1或2控制推车的左右。
CTRL+J          接廊桥,只有在默认机场,有廊桥且停好的时候才能接。
Q                    静音
ALT+ENTER  切换全屏/窗口模式
ESC                退出

FSX 737-800 ILS降落

FSX-ILS

下一代图像接口-Vulkan教程

Vulkan发布有段时间,经过搜索,暂未发现有用的引导性文章,C++ 版demo教程、例子,我也找了很长的一段时间包括官方的教程,可惜官方的教程有短板。

系统要求

建议winX64 vs2015,作者自述支持Linux android,编译器必须支持c++11,笔者只在win系统做过试验,建议更新最新的显卡驱动。近两年的显卡支持上没问题。

源代码下载

github的下载地址,建议用git 检出,以后方便升级

https://github.com/SaschaWillems/Vulkan/archive/master.zip

游戏引擎支持

unity3d 、Unreal Engine 4、OGRE(图形引擎计划),Urho3D(以后支持)

编译

打开vulkanExamples.sln,设置项目triangle为启动项,按F5,经典三角形渲染

源代码简单解析

分辨率设置

    VulkanExample() : VulkanExampleBase(ENABLE_VALIDATION)
    {
        width = 1280;
        height = 720;
        zoom = -2.5f;
        title = "Vulkan Example - Basic indexed triangle";
        // Values not set here are initialized in the base class constructor
    }

矩阵变换,和GL一样,用了GLM的数学库, MVP(模型矩阵 视图矩阵 投影矩阵)

	void updateUniformBuffers()
	{
		// Update matrices
		uboVS.projectionMatrix = glm::perspective(glm::radians(60.0f), (float)width / (float)height, 0.1f, 256.0f);

		uboVS.viewMatrix = glm::translate(glm::mat4(), glm::vec3(0.0f, 0.0f, zoom));

		uboVS.modelMatrix = glm::mat4();
		uboVS.modelMatrix = glm::rotate(uboVS.modelMatrix, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f));
		uboVS.modelMatrix = glm::rotate(uboVS.modelMatrix, glm::radians(rotation.y), glm::vec3(0.0f, 1.0f, 0.0f));
		uboVS.modelMatrix = glm::rotate(uboVS.modelMatrix, glm::radians(rotation.z), glm::vec3(0.0f, 0.0f, 1.0f));

		// Map uniform buffer and update it
		uint8_t *pData;
		VK_CHECK_RESULT(vkMapMemory(device, uniformDataVS.memory, 0, sizeof(uboVS), 0, (void **)&pData));
		memcpy(pData, &uboVS, sizeof(uboVS));
		vkUnmapMemory(device, uniformDataVS.memory);
	}

渲染

	virtual void render()
	{
		if (!prepared)
			return;
		draw();
	}

triangle

免费的https证书letsencrypt

在前几天给网址换成https,在地址栏会看到一把绿色小锁,表示你访问的网站受到安全保护。letsencrypt是的免费的自动化的安全证书,我的博客是用的wordprss和lnmp搭建的。

我们需要https?

相信今年的315晚会,的一个小环节,演示手机app,在公共的wifi那里打开手机APP,相关的购物信息,家庭地址啥时间产生的交易时间,都会给抓取到。这其中的原因是用了公共场所的wifi,但更重要的是因为经过wifi联网的数据是没加密的。再有,在你们浏览器打开百度、京东等网站,右下角弹窗,或者手机浏览器打开在正中间,电信运营商在中间插入他们的代码。https比https多s,用了ssl传输加密协议433端口,保护内容安全完整性。淘宝 百度 谷歌 京东等都启用https,数据安全非常重要。https的站点,搜索引擎权重高点,目前百度联盟不支持https,无法显示广告,站点配置301跳转。通信过程下图

https

选择letsencrypt证书

首先它是免费的,有效期3个月,其次安装方便只需要几行linux命令就可以,证书自动更新。在我们国内也可以选择沃通,个人的免费证书有效期2年,具体的安装自己去搜索。当然你也可以使用你在生成的证书,缺点就是浏览器会提醒证书不信任,不建议继续访问。letsencrypt证书目前各大浏览器内置信任。作为个人站来说letsencrypt符合你的使用,如果你有钱去申请收费的也可以。

安装

请先备份数据库,利用worpdress导出xml,前提是服务器按照了lnmp,具体的安装请访问:lnmp.org

下载程序

安装git程序:Debian/Ubuntu:apt-get install git ,CentOS:yum install git-core
git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt

mkdir -p /home/wwwroot/域名/.well-known/acme-challenge 创建临时目录

证书生成

./letsencrypt-auto certonly --email 邮箱 -d 域名 --webroot -w /网站目录完整路径 --agree-tos

提示:Had a problem while installing Python packages
停止:/etc/init.d/mysql stop
内存512MB需要增加交换分区

dd if=/dev/zero of=/swapfile bs=1024 count=524288
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

启动:/etc/init.d/mysql start
安装完成后可执行

swapoff /swapfile

Nginx虚拟主机的设置

server
{
listen 443 ssl;
server_name www.freeyun.com freeyun.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.freeyun.com;
ssl_certificate /etc/letsencrypt/live/www.freeyun.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.freeyun.com/privkey.pem;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

include wordpress.conf;
#error_page 404 /404.html;
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 12h;
}

access_log off;
}


server
{
listen 80;
server_name www.freeyun.com freeyun.com;
location /.well-known/ {
add_header Content-Type 'text/plain;';
root /home/wwwroot/www.freeyun.com;
}
location / {
return 301 https://www.freeyun.com$request_uri;
}
}

证书续期

cat >/root/renew-ssl.sh<<EOF
#!/bin/bash
mkdir -p /网站目录完整路径/.well-known/acme-challenge
/root/letsencrypt/letsencrypt-auto --renew-by-default certonly --email 邮箱 -d 域名 --webroot -w /网站目录完整路径 --agree-tos
/etc/init.d/nginx reload
EOF
chmod +x /root/renew-ssl.sh

安装crontab :

yum install vixie-cron crontabs
chkconfig crond on
service crond start

添加执行crontab -e定时任务:

0 3 */60 * * /root/renew-ssl.sh

网站内容更新成https方式

强调备份数据
安装:Search & Replace插件执行
http://www.freeyun.com/wp-content/uploads/
替换为:https://www.freeyun.com/wp-content/uploads/

浏览器不出现绿色小锁,还有http的引用,右键查看网页源码查找引用http部分,如果是用站长统计请更新成https方式,部分主题也可能出现不支持https请换成https模式

引用资料

HTTPS的工作原理:
http://www.cnblogs.com/ttltry-air/archive/2012/08/20/2647898.html
免费SSL安全证书Let’s Encrypt安装使用教程:

http://www.vpser.net/build/letsencrypt-free-ssl.html

letsencrypt的限制:
https://community.letsencrypt.org/t/rate-limits-for-lets-encrypt/6769

boost asio广播

一篇boost asio UDP广播示例。

为什么要广播

通常我们需要在局域网来进行广播来查找主机,广播的意思就是向同网段的全部主机发送数据包。而在广域网是不允许的,可以想象广域网主机数量之多,广播造成网络堵塞。广播只能是udp,是由路由器向所有主机发送数据包,包括发送者本身。如果发送的是本身,可以留意下你收的IP:192.168.56.1。还有个组播的,这个在广域网和局域网都允许。

示例代码

服务器:

#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <thread>
void handle_send()
{

};
int main()
{
  namespace ip = boost::asio::ip;
  boost::asio::io_service io_service;

  // Server binds to any address and any port.
  ip::udp::socket socket(io_service,
                         ip::udp::endpoint(ip::udp::v4(), 0));
  socket.set_option(boost::asio::socket_base::broadcast(true));

  // Broadcast will go to port 8888.
  ip::udp::endpoint broadcast_endpoint(ip::address_v4::broadcast(), 8888);

  // Broadcast data.
  boost::array<char, 4> buffer;
 // socket.send_to(boost::asio::buffer(buffer), broadcast_endpoint);
  socket.async_send_to(boost::asio::buffer(buffer), broadcast_endpoint,
	  boost::bind(&handle_send));
  io_service.run();
  //std::thread run_thread([&]{ io_service.run(); });
  //run_thread.join();
}

客户端:

#include <iostream>

#include <boost/asio.hpp>
#include <boost/array.hpp>
int main()
{
  namespace ip = boost::asio::ip;
  boost::asio::io_service io_service;

  // Client binds to any address on port 8888 (the same port on which
  // broadcast data is sent from server).
  ip::udp::socket socket(io_service,
                         ip::udp::endpoint(ip::udp::v4(), 8888 ));

  ip::udp::endpoint sender_endpoint;

  // Receive data.
  boost::array<char, 4> buffer;
  std::size_t bytes_transferred =
    socket.receive_from(boost::asio::buffer(buffer), sender_endpoint);

  std::cout << "remote host ip : " << sender_endpoint.address().to_string() << std::endl;
 // std::cout << "got " << bytes_transferred << " bytes." << std::endl;
}

总结

上面的例子是阻塞模式的广播,有兴趣的可以把它修改成异步模式的,记得udp不是可靠的,上面的例子出处来自国外忘记,,。。。

ous 歌曲批量下载

本文描述osu音乐游戏,音乐批量下载。

韩国网站批量下载

  1. 打开血猫:http://bloodcat.com/osu,网站用的ajax技术,往下拉最下面异步加载更多
  2. 浏览器控制台输入:
    as = document.querySelectorAll("a"); r="";
    for( i=0;i<as.length;i++)
    {
    if(as[i].href.search("http://bloodcat.com/osu/s")!=-1){r+=(as[i].href+"n");}
    }
    console.log(r)
    console.log("end")
    
  3. 复制地址到迅雷,你懂得。

官方下载

  1. 打开官网:https://osu.ppy.sh/p/beatmaplist&s=4&r=0
  2. 谷歌浏览器控制台输入:
    as = document.querySelectorAll("a"); r="";
    for( i=0;i<as.length;i++)
    {
    if(as[i].href.search("https://osu.ppy.sh/d/")!=-1)//匹配字符
    if(as[i].href.search("n")==-1)//屏蔽最后字符n链接
    {r+=(as[i].href+"n");}
    }
    console.log(r)
    console.log("end")
  3. 复制地址到迅雷,这里需要注意,可能部分歌曲下载不到奥,可以跳过,看第四步
  4. 注册登录OSU账号,安装谷歌浏览器,安装下载插件(https://chrome.google.com/webstore/detail/chrono-download-manager/mciiogijehkdemklbdcbfkefimifhecn?hl=zh-CN),复制地址批量到里面,开始尽情下载。

总结

上面最大的难就是在控制台输入代码,里面是javascript代码,里面的正则表达式。代码思路是,把网页链接获取出来过滤。至于用谷歌浏览器,是因为它有批量插件。登录用户,才会自动获取到官方的真正下载地址。当然不是全部成功,我猜是官方的服务器处理不过来,如果你把下载失败地址,再重新打开,能下载到。

osu