编译QT4 x64

打开vs2015 x64命令控制台

cd d:\qt\4.8.7

configure -platform win32-msvc2015 -opensource -fast -qt-style-windowsxp -qt-style-windowsvista -no-qt3support -qt-sql-odbc -no-phonon -no-phonon-backend -no-script -no-scripttools -no-multimedia -no-audio-backend -no-openssl -no-dbus

path=%path%;”C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64″
否则中间rc.exe会找不到

namke

如果中间有错误,可以看看Qt\4.8.7\src\corelib\global\qconfig.h最后几行,我手动加了#define QT_NO_ANIMATION

javascript二进制文件处理方案

https://www.cnblogs.com/litao229/archive/2012/09/10/2679105.html

众所周知,javascript是不支持二进制文件和数据的。传统的做法,是把二进制文件转成字符,然后在浏览器里,通过某些技巧把对应字符串换成数字,然后做其它处理(传统方法会在后面讲到)。这种处理方式不标准,需要某些“技巧”,甚至通过“欺骗”浏览器才能实现。

随着浏览器的进化,出现了新的方案。XMLHttpRequest Level 2增加了对二进制数据的上传和下载支持,它可以和File System APIWeb Audio API等配合使用。我们的新方案就利用它这个功能。

先睹为快,这里是个demo.

XHR2方案

XMLHttpRequest Level 2引入responseType和response两个属性,它们通知浏览器把请求到的数据按照某种格式进行处理。

xhr.responseType
在发送请求之前,根据需求把xhr.responseType设置为’text’、’arraybuffer’、’blob’或者’document’。它的默认值是’text’ 。
xhr.response
获得了数据之后,根据之前responseType的值,xhr的response属性就是DOMString、ArrayBuffer、Blob或者Document格式的数据

利用上面两个属性,我们可以把二进制数据格式化为ArrayBuffer,而不是字符串。然后使用BlobBuilder api把数据转化为blob处理:

BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;


var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/image.png', true);
xhr.responseType = 'arraybuffer';


xhr.onload = function(e) {
  if (this.status == 200) {
    var bb = new BlobBuilder();
    bb.append(this.response); // Note: not xhr.responseText


    var blob = bb.getBlob('image/png');
    ...
  }
};


xhr.send();

 

这样处理就方便多了。通过使用ArrayBufferView,我们可以更方便的处理数据。它对arraybuffer进行数据封装,使我们可以像处理数组一样处理请求到的二进制数据。view有好几种格式,Float32Array、Float64Array、Int16Array、Int32Array、Int8Array、Uint16Array、Uint32Array、Uint8Array。个人觉得,处理二进制数据Uint8Array应该是最方便的了。下面是代码例子:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/image.png', true);
xhr.responseType = 'arraybuffer';


xhr.onload = function(e) {
  var uInt8Array = new Uint8Array(this.response); // this.response == uInt8Array.buffer
  var byte3 = uInt8Array[4]; // byte at offset 4
  if(byte3 == 0xA9){
      alert('the first data is 0xA9');
  }
};


xhr.send();

 

它对浏览器的要求是firefox6+、chrome9+,那其它低版本的浏览器怎么办呢?降级使用传统方案呗

传统处理方案

传统方案的思路:请求数据时把mime type重写成自定义的格式的charset。然后处理请求数据中的每一个byte,与0xff进行与,获得8位的数据。例子如下:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/image.png', true);


// Hack to pass bytes through unprocessed.
xhr.overrideMimeType('text/plain; charset=x-user-defined');


xhr.onreadystatechange = function(e) {
  if (this.readyState == 4 && this.status == 200) {
    var binStr = this.responseText;
    for (var i = 0, len = binStr.length; i < len; ++i) {
      var c = binStr.charCodeAt(i);
      //String.fromCharCode(c & 0xff);
      var byte = c & 0xff;  // byte at offset i
    }
  }
};


xhr.send();

通过设置mimetype技巧,我们获取了代表二进制数据的字符串,然后处理字符串,得到我们想到的数据。此方法不被推荐,因为这种方法每次都要把字符强制转换成我们需要的格式,而且需要通过小技巧“骗”一下浏览器。

ie方案

ie9-不支持overrideMimeType方法,怎么办呢?前几天ququ的文章《图片自动旋转的前端实现方案》中提到使用vb做数据处理,试验了一下,还真行。vb里有很多字节处理的函数,这里只介绍用到的三个:

MidB
返回字符串( String)的一部分。用法result = MidB( 源字符串, 起点, [长度] ),MidB 将源字符串当作一组字节,而不是一组字符来处理。MidB 应被用在源字符串代表二进制数据的情况下。
AscB
AscB 返回首字节。它与MidB一起使用,可以获得数据中指定位置的字节。
LenB
获得字符串中的字节总数。LenB 函数将字符串当作一组字节而不是一组字符。当字符串代表二进制数据时应当使用此函数。

通这个三个函数,我们可以获取ajax请求到的字符串对应的字节数据了。下面是一段摘抄的代码例子:

document.write(
    "<script type='text/vbscript'>\r\n"
    + "Function IEBinary_getByteAt(strBinary, iOffset)\r\n"
    + " IEBinary_getByteAt = AscB(MidB(strBinary, iOffset + 1, 1))\r\n"
    + "End Function\r\n"
    + "Function IEBinary_getBytesAt(strBinary, iOffset, iLength)\r\n"
    + "  Dim aBytes()\r\n"
    + "  ReDim aBytes(iLength - 1)\r\n"
    + "  For i = 0 To iLength - 1\r\n"
    + "   aBytes(i) = IEBinary_getByteAt(strBinary, iOffset + i)\r\n"
    + "  Next\r\n"
    + "  IEBinary_getBytesAt = aBytes\r\n"
    + "End Function\r\n"
    + "Function IEBinary_getLength(strBinary)\r\n"
    + " IEBinary_getLength = LenB(strBinary)\r\n"
    + "End Function\r\n"
    + "</script>\r\n";
);

这段代码都过document.write的方式,在页面中插入了两个三个vb函数,IEBinary_getByteAt返回指定位置的字节,IEBinary_getBytesAt返回从指定位置开始的指定长度的字节数组,IEBinary_getLength返回字符串中字节个数。我们把ajax的responseBody中的字符串通过这三个函数处理,就可以获得对应的二进制数据。

注意:在ie低版本中,js处理能力不强,所以如果要处理的数据太大的话,很容易使导致cpu 100%,甚至浏览器崩溃。

代码例子:

var xhr = new ActiveXObject("Microsoft.XMLHTTP");
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        if (xhr.status == "200" || xhr.status == "206" || xhr.status == "0") {
            var blen = IEBinary_getLength(xhr.responseBody),
                byteArray =  new VBArray(IEBinary_getBytesAt(xhr.responseBody, 0, blen)).toArray();


            rpg.drawNpc(byteArray);
        }
        xhr = null;
    }
};
xhr.open('GET', url, true);
xhr.send(null);

参考文章:

New Tricks in XMLHttpRequest2

JavaScript typed arrays

图片自动旋转的前端实现方案

Read EXIF data with Javascript

调整ubuntu19颜色

参考http://blog.chinaunix.net/uid-26449305-id-3181856.html

1) 顶上的topbar,改为灰底,黑字

#sudo vi /usr/share/gnome-shell/theme/gdm3.css
查找#panel,把background-color: black;改为background-color: #ccc;
查找#panel .panel-button,加上color:#000

2)左边的Dock
#dashtodockContainer.shrink.left #dash,
#dashtodockContainer.dashtodock.left #dash,
#dashtodockContainer.shrink.right #dash,
#dashtodockContainer.dashtodock.right #dash,
#dashtodockContainer.shrink.bottom #dash,
#dashtodockContainer.dashtodock.bottom #dash
{
background-color: rgba(150,150,150,0.6);
padding-top: 2px;
padding-bottom: 2px;
}
注意,如果要把Dock调整到底部的话,需要加上粗体的两句,默认是没有的!作者就不想你放到底部 :(

按alt+f2,输入r 回车,你就会看到效果

 

3)改背景色为纯色
gsettings set org.gnome.desktop.background picture-uri none
gsettings set org.gnome.desktop.background primary-color ‘#0063b1’
即时生效

修改ubuntu源为国内镜像

国内找到几家镜像:

1.浙江大学
http://mirrors.zju.edu.cn
2.阿里云开源镜像站
http://mirrors.aliyun.com
3.兰州大学开源镜像站
http://mirror.lzu.edu.cn
4.北京理工大学开源
http://mirror.bit.edu.cn
5.中科大源
http://mirrors.ustc.edu.cn

比如选择浙江大学的镜像,使用以下命令进行替换
sudo sed -i ‘s/archive.ubuntu.com/mirrors.zju.edu.cn/g’ /etc/apt/sources.list
sudo sed -i ‘s/security.ubuntu.com/mirrors.zju.edu.cn/g’ /etc/apt/sources.list

IE/Edge访问https网站,Post变get?

最近测试,发现有个https网站,在IE下POST过去的,在network全部只留下一条GET,并且是从缓存中拿,没有返回。

1)其他网站是好的
2)http是好的,所以不是代码的问题
3)该网站上其他页面,也有这个问题,所以可能是网站配置的问题?

仔细检查后,发现IE的Internet选项-高级-安全中,去掉这两个钩之一都是可以的

1)将提交的POST重定向到不允许发送的区域时发出警告
2)检查服务器证书是否已吊销*

原来是服务器证书的问题,证书有问题了,然后就POST不过去了。
而该证书的问题是:CRL分发点的那个URL坏了!这藏得够深的

证书CRL例子:
[1]CRL Distribution Point
Distribution Point Name:
Full Name:
URL=https://xxx.xxx.com/root.crl

就这个root.crl 404了,所以这个证书就坏了。修正好这个url,证书就能正确地认为是合法的,然后就能POST啦~

LCUI: C的图形界面开发库

https://gitee.com/lc-soft/LCUI
https://lcui.org/#get-started

安装:

# 安装 lcui-cli
npm install -g @lcui/cli

# 创建一个名为 myapp 的 LCUI 项目
lcui create myapp

# 进入项目目录
cd myapp

# 运行这个项目
npm run start

 

需要先安装
1) nodejs
http://nodejs.cn/download/
version: 12.18.0

2)
npm 6.14.5
git

3) vcpkg
https://gitee.com/mirrors/vcpkg

如何开始:

> git clone https://github.com/Microsoft/vcpkg.git
> cd vcpkgLinux:~/$ ./bootstrap-vcpkg.sh

然后,集成至本机环境中,执行 (注意: 首次启动需要管理员权限)

Linux:~/$ ./vcpkg integrate install

使用以下命令安装任意包

Linux:~/$ ./vcpkg install sdl2 curl

 

4) xmake
https://gitee.com/tboox/xmake

安装

使用curl

bash <(curl -fsSL https://xmake.io/shget.text)

使用wget

bash <(wget https://xmake.io/shget.text -O)

 

5) cmake
sudo apt-get install cmake

6) lcpkg

安装

npm install -g lcpkg

设置 vcpkg 的根目录路径:

lcpkg config vcpkg.root /path/to/vcpkg

 

相关项目

想要了解 LCUI 具体能做什么?你可以查看以下项目:

  • LCUI CLI – 用于开发 LCUI 应用程序的命令行工具。
  • LCUI Router – LCUI 的路由管理器,它提供类似于 Vue Router 的开发体验,能让你基于 LCUI 构建多视图的应用程序变得更简单。
  • LC Design — 专为 LCUI 开发的组件库,包含了一些通用组件和 CSS 样式。
  • LC Finder — 图片管理器,LCUI 的旗舰级应用程序,你可以将它作为参考对象,以此评估 LCUI 的性能、界面效果和开发复杂度是否符合你的需求。
  • Trad — 一个基于 JavaScript 语法且可编译为 C 的语言,预置 LCUI 绑定,提供类似于 React 的开发体验,能让你轻松基于 LCUI 创建响应式用户界面。
  • LCUI Quick Start – LCUI 应用程序模板。
  • LCUI Router App – LCUI Router 的应用程序模板,实现了和浏览器一样的图形界面、多标签页、路由导航等功能。
  • LC Design App – LC Design 组件库的应用程序模板,展示了 LC Design 的一些组件的简单用法和效果。