Main函数

29
Jan

180129 随想

今天开始寒假正统学习!立……立文为证!
定几个小目标:

  • 斯坦福的机器学习做完
  • python的常用机器学习库全都用一遍
  • 写几个样例 比如验证码(北邮教务)识别啥的
  • 完善VitechSystem,写个移动端,各种端得做好热更新机制
  • 弄一个知乎专栏发点更新
  • 重新认真弄个公众号 权且当调试接口用

02
Jan

180102 随想

感觉自己像一个机器,不会再有感情

欠以前的太多,一昧的想去逃避

任何时候到了新的圈子也是畏手畏脚

虽然察觉到有来自各种角落的好意,但更多的是惶恐

其实自己知道根本没有什么

谁对我好我就对谁好

谁愿意接受我的一切,我也愿意接受她

如果有认识的人看到了这篇文章,尽管当我自作多情

21
Oct

CMake编译Opencv时遇到的bug解决方案 windres.exe: unknown option -- W ... ; 'sprintf_instead_use_StringCbPrintfA_ was not declared in this scope ..

执行mingw32-make后

28%左右遇到这种错误:
... windres.exe: unknown option -- W ...

解决方案:
在cmake中 取消勾选 ENABLE_PRECOMPILED_HEADERS


32%左右遇到这种错误 :
'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope ...

解决方案:
在..\opencv\sources\modules\videoio\src\cap_dshow.cpp
在#include "DShow.h"这一行前加上#define NO_DSHOW_STRSAFE

20
Sep

Matlab App Designer UIFigure中利用dojo/js/Container/缩放/改图标等技巧

本文部分内容翻译于:Undocumented Matlab

Matlab AppDesigner是R2016a之后推出的新界面设计工具,较GUIDE的GUI 界面更美化,组建更丰富,具有自动化编程等特性。

但是表面上看AppDesigner并没有暴露很多组件诸如Javaframe

GUIDE的figure(gcf)是基于Java的Jframe组件,而Appdesigner的app.UIFigure是基于html的webview,本质上运行了一个CEF(Chromium嵌入式框架 Chromium Embedded Framework version 3.2272 on Chromium 41 in R2016a)。使用的JS DOJO 套件,可以想象Matlab与js/webapp接轨的趋势了。。

因此,如果像GUIDE一样或者其他教学一样视图获取

get(app.UIFigure,'javaframe')

会得到一个空数组,而且是特意留下的,Matlab一直有抛弃javaframe的想法,还发布过调查,现在看来还是不敢完全抛弃。

不说更多,下面就揭示一些其他组件结构吧。

阅读全文»

18
Jul

polyfill,shim,shiv之间有什么区别

什么是polyfill和shim

搜索了一下:在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别?一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现;一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了。

理解

一个shim就是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现。
比如ES5-shim, github地址:http://github.com/es-shims/es5-shim/

这几天看了一下shiv,它的作用是使得不支持HTML5标签的浏览器诸如ie6-8, 支持html5标签。这也是我在看html语义化规范的时候看到的,觉得很有必要做一下。目前使用IE8的用户还是占据一部分比例的,所以为了兼容ie8,同时能使用像header、section、nav、footer这些语义化标签,我们可以采用shiv库来实现。
著名的HTML5兼容库html5shiv,Github地址:https://github.com/aFarkas/html5shiv

关于polyfill,据说来自于Polyfilla,Polyfilla是一个英国产品,在美国称之为Spackling Paste(译者注:刮墙的,在中国称为腻子),把旧的浏览器想象成为一面有了裂缝的墙,这些polyfill会帮助我们把这面墙的裂缝抹平。

其实一个polyfill的意思就是,比如开发者想要一个格式化时间的函数,然后现有的api都没有,于是作者自创一个stringDate的方法,那么这个方法就成为一个polyfill。

问题

注意在实现polyfill的时候,最好不要在一些原生对象的原型上添加方法,比如:

if (!Array.prototype.find) {
        Array.prototype.find = function (predicate) {
            if (this === null)
                throw new TypeError('Array.prototype.find called on null or undefined');
            if (typeof predicate !== 'function')
                throw new TypeError('predicate must be a function');
            var list = Object(this);
            var length = list.length >>> 0;
            var thisArg = arguments[1];
            var value;
            for (var i = 0; i < length; i++) {
                value = list[i];
                if (predicate.call(thisArg, value, i, list))
                    return value;
            }
        }
    }

在IE下面有个bug,就是在使用 for in 这种循环的时候,ie下会遍历输出原型链上的方法,比如:

var a = [1,2];
for(var i in a){
    console.log(i);
}
//output
1
2
find

这就会导致bug。
查了一下can1use:

As the specification includes many JavaScript features, un-numbered partial support varies widely and is shown in detail on the ECMAScript 5 compatibilty tables by Kangax.
Does not support parseInt() ignoring leading zeros.
Does not support Strict mode
IE8 has virtually no ES5 support, but does support Object.defineProperty, Object.getOwnPropertyDescriptor, JSON parsing & Property access on strings
也就是说,在IE8下面支持Object.defineProperty这个方法,这个方法是直接给一个对象添加一个属性, 关键是可以控制是否能在for…in循环中遍历出来或在Object.keys中列举出来。如下:

Object.defineProperty(obj, prop, descriptor)将属性添加到对象,或修改现有属性的特性。
参数:
obj:目标对象
prop:需要定义的属性或方法的名字。
descriptor:目标属性所拥有的特性。
可供定义的特性列表:
value:属性的值
writable:如果为false,属性的值就不能被重写。
get: 一旦目标属性被访问就会调回此方法,并将此方法的运算结果返回用户。
set:一旦目标属性被赋值,就会调回此方法。
configurable:如果为false,则任何尝试删除目标属性或修改属性以下特性(writable, configurable, enumerable)的行为将被无效化。
enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。

 try{
        var a = {};
        Object.defineProperty(a,"bloger",{get:function(){return "司徒正美",value:"这是不可改变的默认值" ,writable: false}});
        alert(a.bloger)
      }catch(e){
        alert("你的游览器不支持Object.defineProperty ")
      }

所以我们可以通过这个方式修改Array.prototype,简单的实现方式:

Object.defineProperty(Array.prototype,"findT",{value:function(){return 1;}});

参考es5-shim中有一个自定义的defineProperties方法,

var defineProperties = (function (has) {
  // Define configurable, writable, and non-enumerable props
  // if they don't exist.
  var defineProperty;
  if (supportsDescriptors) {
      defineProperty = function (object, name, method, forceAssign) {
          if (!forceAssign && (name in object)) { return; }
          $Object.defineProperty(object, name, {
              configurable: true,
              enumerable: false,
              writable: true,
              value: method
          });
      };
  } else {
      defineProperty = function (object, name, method, forceAssign) {
          if (!forceAssign && (name in object)) { return; }
          object[name] = method;
      };
  }
  return function defineProperties(object, map, forceAssign) {
      for (var name in map) {
          if (has.call(map, name)) {
            defineProperty(object, name, map[name], forceAssign);
          }
      }
  };
}(ObjectPrototype.hasOwnProperty));

其实Object也是有defineProperties函数的,只是ie8不支持。

Object.defineProperties 函数 (JavaScript)
将一个或多个属性添加到对象,并/或修改现有属性的特性。

Object.defineProperties(obj, {
    newDataProperty: {
        value: 101,
        writable: true,
        enumerable: true,
        configurable: true
    },
    newAccessorProperty: {
        set: function (x) {
            document.write("in property set accessor" + newLine);
            this.newaccpropvalue = x;
        },
        get: function () {
            document.write("in property get accessor" + newLine);
            return this.newaccpropvalue;
        },
        enumerable: true,
        configurable: true
    }
});

谢谢!

转自:http://www.haomou.net/2016/10/22/2016_polyfill_shim/

20
Jun

解决AfterEffect启动界面崩溃 并弹出dynamiclinkmanager.exe报错的问题

在adobe官网,google上看了很多方案,大致列举下

1、最简单的 卸了并重装AE,不过这个似乎不能解决问题
2、下载quicktime
3、c:/用户/用户名/appdata/roaming/adobe 目录设为可读写
4、从好友电脑上拷贝一个dynamiclinkmanager.exe到你电脑覆盖 (位置AE/support files/32)
5、启动AE启动界面时,按住ctrl+shift+alt 会弹出是否要清除预置 点清除

我就是做了5才好的

24
May

Git Config中receive.denyCurrentBranch做了什么?

官网的解答

receive.denyCurrentBranch If set to true or "refuse", git-receive-pack
will deny a ref update to the currently checked out branch of a
non-bare repository. Such a push is potentially dangerous because it
brings the HEAD out of sync with the index and working tree. If set to
"warn", print a warning of such a push to stderr, but allow the push
to proceed. If set to false or "ignore", allow such pushes with no
message. Defaults to "refuse".

Another option is "updateInstead" which will update the working tree
if pushing into the current branch. This option is intended for
synchronizing working directories when one side is not easily
accessible via interactive ssh (e.g. a live web site, hence the
requirement that the working directory be clean). This mode also comes
in handy when developing inside a VM to test and fix code on different
Operating Systems.

这个config是决定 当你Push到一个非bare的远程库的正处于切换状态下分支时的行为。

设置为true或refuse时,会拒绝你的push并且发出几行警告消息
设置为warn时,会接受你的push并且发出几行警告消息
设置为false或ignore时会接受你的push且不发出警告

后两种虽然接受了push,但并没有直接反映在工作目录(working tree)上,你需要输入

git reset --hard

或者切换到其他分支再切换回来,才能刷新文件

设置为updateInstead时,会接受push并直接更新工作目录
但如果工作目录相对HEAD指针有更新,则会拒绝push
注意只有git 版本2.5以后才添加updateInstead. 请升级后再使用

09
May

解决腾讯云Centos VPS 远程连接mysql数据库的一些问题

mysql默认只支持本地(local)连接,想要开启远程连接,也就是能从远程以mysql -h的方式连接,需要进行一些设定

1、修改mysql的远程端口限制。找到etc/my.cnf
找到如下行,并修改成这样

#skip-networking
bind-address=0.0.0.0

如果没有bind-address 就手动添加。
然后重启mysql

service mysql restart

2、输入

netstat -an|grep 3306 

确保3306端口处在监听状态,如果没有可能是mysql服务有问题,需要重装

3、在本地或其他服务器尝试

telnet *.*.*.*(vps的ip) 3306

如果能连接成功,跳到第6步

4、确保firewalld(centos自带防火墙)没有限制3306端口,或者说已关闭

5、确保iptables没有限制mysql远程连接端口 输入

iptables -L -n  --line-number

如果里面有一行是什么DROP tcp -- ... tcp dpt:mysql 记住行号,并输入命令

iptables -D INDEX 行号

来删除

6、在本地或其他服务器运行

mysql -h *.*.*.*(vps的ip) -u root(mysql用户名) -p

并输入密码 如果成功接入 远程连接的配置也就成功了!

03
Apr

Visualstudio 2017 安装时出现"由于发生一个或多个包故障,工作负荷/组件不完整"等问题

日志文件一般是这样
由于发生一个或多个包故障,产品未能安装列出的工作负荷和组件。

工作负荷不完整
xxxxx
组件不完整
xxxxx

18
Mar

【更新】最近玩的一些游戏的开发引擎统计

因为最近在构思游戏,但没有想好用哪个引擎,所以整理了一下最近我玩的游戏(大部分为独立游戏)用的引擎。仅供参考

炉石传说 - Unity
崩坏3rd - Unity
影之诗[Shadowverse] - Unity
Madness Project Nexus 2 - Unity
星球探险家[Planet Explorer] - Unity
奥日与黑暗森林 - Unity
Unturned - Unity

Terraria - Microsoft XNA
星露谷物语[Stardew Valley] - Microsoft XNA
Secrets of Grindea - Microsoft XNA

点击英雄[Clicker Heroes] - Adobe Flash(AIR)
RustyLake:Roots - Adobe Flash

Undertale - Game Maker Studio

饥荒 - C++核心引擎/Lua脚本(游戏主体内容)
以撒的结合:胎衣[The binding of issac:Afterbirth] - C++/Lua脚本
冒险岛2 - 目测是C++/Lua
Starbound - C++ (UI疑似Qt)
铁锤守卫[Hammerwatch] - C#/OpenGL
监狱建筑师 - C++/OpenGL

CSGO - Source
Garry's Mod - Source