mac Sierra下torch安装hdf5

在mac下一直加载不了hdf5,库已经安装,经过一番搜索查资料,原来是新版mac os sierra下出来的bug.

需要修改两个文件

1) 修改config.lua,路径/Users/your_name/torch/install/share/lua/5.1/hdf5.
原来的路径是空的,需要填写hdf5的真实路径,还不能是软链接的路径,

HDF5_INCLUDE_PATH =“/usr/local/Cellar/hdf5/版本/include

2) Error: ffi.lua:56: ‘)’ expected near ‘_close’

需要修改第45行成下面这样子

local process = io.popen(“gcc -D ‘_Nullable=’ -E ” .. headerPath)

测试一下

th -e “require ‘hdf5′”

如果正常就成功了。

centos源安装升级php版本

通常yum源的版本都比较低,在需要高版本php的时候,一般的yum源就不适合了。这里记录一下安装高版本的yum源

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sed -i '/enabled/s/=0/=1/g' /etc/yum.repos.d/remi.repo 
yum clean all
yum makecache
yum update php*

remi源有比较新的php版本,直接update后就是新版本的php了。

Centos6.5升级gcc版本

资料http://people.centos.org/tru/devtools-2/readme

步骤

wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++

软件会被安装在/opt/rh目录下

然后配置用户环境

export CC=/opt/rh/devtoolset-2/root/usr/bin/gcc  
export CPP=/opt/rh/devtoolset-2/root/usr/bin/cpp
export CXX=/opt/rh/devtoolset-2/root/usr/bin/c++

ln -sv /opt/rh/devtoolset-2/root/usr/bin/* /usr/local/bin

切换gcc

update_alternatives –install /usr/bin/gcc gcc /usr/local/bin/gcc 100

另外可以直接编译安装新版的gcc

安卓webview与js交互问题处理

通过addJavascriptInterface添加的接口,由于代码不是运行在主线程上,页面调用接口时候会出现找不到对象的情况,这时候需要给接口添加handle处理

 final class jsApi {
        Handler mHandler = new Handler();
        @JavascriptInterface
        public void hello(String hstr) {
            final String str = hstr;
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    testTxt.setText(str);
                }
            });
        }
        @JavascriptInterface
        public void trun(String hstr) {
            final String str = hstr;
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    testTxt.setText(str);
                }
            });
        }
    }

 

安卓webview与js交互demo

demo代码如下

package wang.qiaoce.webtest;

import android.content.Context;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class WebTest extends AppCompatActivity {
    private WebView webview;
    private TextView testTxt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_test);
        testTxt = (TextView)findViewById(R.id.testTxt);
        webview = (WebView)findViewById(R.id.webView);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        if (Build.VERSION.SDK_INT >= 19) {
            webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        }
        webview.addJavascriptInterface(new jsApi(),"test");
        webview.loadUrl("file:///android_asset/index.html");
    }
    class jsApi {
        @JavascriptInterface
        public void hello(String htmlContent) {
            testTxt.setText(htmlContent);
        }
    }
}

权限添加

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

centos6.5安装最新gcc

yum安装的gcc版本比较低,编译opencv编译出错,需要安装最新的gcc。一开始根据网上步骤安装各种依赖包不行。后来发现gcc源码里面有自动下载依赖包的。

./contrib/download_prerequisites

至关重要的一步。。。。执行这个下载依赖包的脚本后,直接configure然后make然后make install就好了。。。根本不需要像网上那样各种手动安装依赖包。。。。

阿里云Linux安装软件yum镜像源

阿里云是最近新出的一个镜像源。得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源。
阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/

CentOS系统更换软件安装源
第一步:备份你的原镜像文件,以免出错后可以恢复。

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步:下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 5

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
第三步:运行yum makecache生成缓存

yum clean all

yum makecache

模板引擎更新

function myTpl(id,data) {
        var str = document.getElementById(id).innerHTML;
        str = str.replace(/\"/g,'\\"');
        var inLp=false;
        var t={
                'for':function(s){
                        s = s.replace('/  /g',' ').replace('/  /g',' ');
                        var sa = s.split(' ');
                        return '");'+'var lpdata = data["'+sa[1]+'"];for(var i=0;i<lpdata.length;i++){'+';p.push("';
                },
                'if':function(s){
                        s = s.replace('/  /g',' ').replace('/  /g',' ');
                        var sa = s.split(' ');
                        if(inLp) {
                                return '");'+'if(lpdata[i]["'+sa[1]+'"]'+sa[2]+''+sa[3]+'){'+';p.push("';
                        } else {
                                return '");'+'if(data["'+sa[1]+'"]'+sa[2]+''+sa[3]+'){'+';p.push("';
                        }
                },
                'else':function(){
                        return '");}else{;p.push("';
				},
				'set':function(s){
					s = s.replace('/  /g',' ').replace('/  /g',' ');
					var sa = s.split(' ');
					return '");'+'var '+sa[1]+' = data["'+sa[1]+'"];p.push("';
				},
                'fn':function(s){
                        s = s.replace('/  /g',' ').replace('/  /g',' ');
                        var sa = s.split(' ');
                        if(sa[1]) {
                                if(inLp) {
                                        return '"+'+sa[1]+'(lpdata[i]["'+sa[2]+'"])+"';
                                } else {
                                        return '"+'+sa[1]+'(data[i]["'+sa[2]+'"])+"';
                                }
                        } else {
                                return '';
                        }
                }
        };
        var s = 'var p=[];p.push("'+str.replace(/[\r\n\t]/g,'').replace(/\[.*?\]/g,function(d){
                var ms = d.match(/\[(.*?)\]/);
                ms = ms[1];
                var r='',m;
                if(ms) {
                        var pre = d.substr(0,2);
                        if(pre=='[/') {
                                r =  '");};p.push("';
                                inLp=false;
                        } else if(pre=='[=') {
                                m = d.match(/=(.*?)\]/);
                                if(m[1]) {
                                        if(inLp) {
                                                r = '"+lpdata[i]["'+m[1]+'"]+"';
                                        } else {
                                                r = '"+data["'+m[1]+'"]+"';
                                        }
                                } else {
                                        r = d;
                                }
                        } else {
                                m = ms.split(' ');
                                if(m[0]) {
                                        if(m[0]=='for') {
                                                inLp=true;
                                        }
                                        r = t[m[0]](ms);
                                } else {
                                        r = d;
                                }
                        }
                } else {
                        r = d;
                }
                return r;
        })+'");return p.join("");';
        var fn = new Function('data',s);
        return fn(data);
}

添加了set标签,设置变量使用。

模板引擎更新版

对模板引擎功能更新完善

function myTpl(id,data) {
        var str = document.getElementById(id).innerHTML;
        str = str.replace(/\"/g,'\\"');
        var inLp=false;
        var t={
                'for':function(s){
                        s = s.replace('/  /g',' ').replace('/  /g',' ');
                        var sa = s.split(' ');
                        return '");'+'var lpdata = data["'+sa[1]+'"];for(var i=0;i<lpdata.length;i++){'+';p.push("';
                },
                'if':function(s){
                        s = s.replace('/  /g',' ').replace('/  /g',' ');
                        var sa = s.split(' ');
                        if(inLp) {
                                return '");'+'if(lpdata[i]["'+sa[1]+'"]'+sa[2]+''+sa[3]+'){'+';p.push("';
                        } else {
                                return '");'+'if(data["'+sa[1]+'"]'+sa[2]+''+sa[3]+'){'+';p.push("';
                        }
                },
                'else':function(){
                        return '");}else{;p.push("';
                },
                'fn':function(s){
                        s = s.replace('/  /g',' ').replace('/  /g',' ');
                        var sa = s.split(' ');
                        if(sa[1]) {
                                if(inLp) {
                                        return '"+'+sa[1]+'(lpdata[i]["'+sa[2]+'"])+"';
                                } else {
                                        return '"+'+sa[1]+'(data[i]["'+sa[2]+'"])+"';
                                }
                        } else {
                                return '';
                        }
                }
        };
        var s = 'var p=[];p.push("'+str.replace(/[\r\n\t]/g,'').replace(/\[.*?\]/g,function(d){
                var ms = d.match(/\[(.*?)\]/);
                ms = ms[1];
                var r='',m;
                if(ms) {
                        var pre = d.substr(0,2);
                        if(pre=='[/') {
                                r =  '");};p.push("';
                                inLp=false;
                        } else if(pre=='[=') {
                                m = d.match(/=(.*?)\]/);
                                if(m[1]) {
                                        if(inLp) {
                                                r = '"+lpdata[i]["'+m[1]+'"]+"';
                                        } else {
                                                r = '"+data["'+m[1]+'"]+"';
                                        }
                                } else {
                                        r = d;
                                }
                        } else {
                                m = ms.split(' ');
                                if(m[0]) {
                                        if(m[0]=='for') {
                                                inLp=true;
                                        }
                                        r = t[m[0]](ms);
                                } else {
                                        r = d;
                                }
                        }
                } else {
                        r = d;
                }
                return r;
        })+'");return p.join("");';
        var fn = new Function('data',s);
        return fn(data);
}