这俩软件直接brew install安装的。 opam需要配置 opam init 初始化opam目录,~/.opam .bash_profile里添加. ~/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true 设置一些环境变量。 vim ~/.ocamlinit 添加 let () = try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") with Not_found -> () ;; 这些配置提示,在执行opam init 的时候会显示。 opam switch可以查看已经安装的版本编译器,并可以切换 $ opam switch 4.01.0 $ eval `opam config env` 安装utop opam install core utop 然后会装特么的一堆包。 再次配置.ocamlinit 就是初始导入,以后启动解析器的时候就不用导入了 #use "topfind";; #thread;; #camlp4o;; #require "core.top";; #require "core.syntax";; open Core.Std;; 可以用utop愉快的玩耍了

Continue

安装管网提示一步步安装的。还有个mono的东西,没用。 brew update brew install openssl 第二部下载安装包,点击安装。安装完目录添加到path。 创建一个hello world例子工程

mkdir hwapp
cd hwapp
dotnet new --lang f#
运行例子 dotnet restore dotnet run 就输出f#版的hello world了

Continue

那些开源的都不太靠谱,同事推荐这个druid解析sql。试了一下确实给力。 打包方法: git clone https://github.com/alibaba/druid.git mvn install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true 会安装到.m2目录,copy一个项目用 target/druid-1.0.27-SNAPSHOT-sources.jar 示例代码:

import java.util.*;

import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import py4j.GatewayServer;


public class SQLParser {
    public static List get_tables(String sql){

        MySqlStatementParser parser = new MySqlStatementParser(sql);
        List statementList = parser.parseStatementList();
        SQLStatement statemen = statementList.get(0);

        MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
        statemen.accept(visitor);
        Map result = visitor.getTables();
        System.out.println("Tables : " + result);

        List list = new ArrayList<>();
        for ( TableStat.Name name : result.keySet() ) {
            System.out.println( name );
            list.add(name.getName());
        }
        return list;

    }

    public static void main(String[] args){
        GatewayServer gatewayServer = new GatewayServer(new SQLParser());
        gatewayServer.start();
        System.out.println("Gateway Server Started");

    }
}
打包命令: javac -cp .:./py4j0.10.4.jar:./druid-1.0.27-SNAPSHOT.jar:$CLASSPATH SQLParser.java java -cp .:./py4j0.10.4.jar:./druid-1.0.27-SNAPSHOT.jar:$CLASSPATH SQLParser

Continue

上一篇使用antlr解析的,发现不行,官方提供的语法文件bug太多,多到不能用的程度,还是得用专门的开源库。这次选jsqlparser了。 从github下载一个源码,mvn package 打一个jar包。将jsqlparser-0.9.6.jar拷贝到工作目录。  

import java.util.*;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.util.TablesNamesFinder;


public class ParserTest {
    public static void main(String[] args){
        System.out.println("Hello World!");

        String sql = "select NVL( (SELECT 1 FROM DUAL), 1) AS A from TEST1,test";
        try{
            Select selectStatement = (Select) CCJSqlParserUtil.parse(sql);
            TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
            List tableList = tablesNamesFinder.getTableList(selectStatement);
            for(String s : tableList) {
                System.out.println(s);
            }
        }catch(Exception e){
            String sql1 = " TEST1";
            //e.printStacktrace();
        }

    }
}
这是调用解析table name的代码。 编译运行 javac -cp ./jsqlparser-0.9.6.jar ParserTest.java java -cp .:./jsqlparser-0.9.6.jar:$CLASSPATH ParserTest 还挺好用。

Continue

做个项目要解析mysql sql语句,使用开源的库发现问题很多,不太适合。推荐的几个项目都是项目里边集成的,语言也不符合,太麻烦。只能自己搞了,选择antlr的原因是官方提供mysql解析的语法,做起来比较简单。   安装: curl -O http://www.antlr.org/download/antlr-4.5.3-complete.jar 然后写一个shell脚本antlr,用来执行命令 #!/bin/bash java -cp .:./antlr-4.5.3-complete.jar:$CLASSPATH org.antlr.v4.Tool $* 从https://github.com/antlr/grammars-v4.git clone一些已经写好的sql语法文件。   生成Python版的解析代码。 ./antlr  -Dlanguage=Python2  MySQLLexer.g4 ./antlr  -Dlanguage=Python2 -visitor  MySQLParser.g4 第二个加参数是为了生成MySQLGrammarVisitor。   然后参照例子写了个函数包起来就能用。这工具做的好,原因就是不用研究太深就能用。

Continue

freenas也支持nfs共享,配置完后,在ubuntu上不知道怎么挂载,得安装软件支持。 sudo mount -t nfs 192.168.0.88:/mnt/MyNAS /tmp/aaa 会不成功 mount: wrong fs type, bad option, bad superblock on 192.168.0.88:/mnt/MyNAS, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount. helper program) 看了一下sbin目录确实没有nfs支持的文件。网上查,找到个showmount命令,执行发现没这个命令sudo apt-get install nfs-common安装。 安装完那个文件也有了。 showmount -e 192.168.0.88 Export list for 192.168.0.88: /mnt/MyNAS 192.168.0.0 然后就没问题了。 sudo mount -t nfs 192.168.0.88:/mnt/MyNAS /tmp/aaa 就成功了

Continue

之前搜索过,以前在mac上搞过gdk还是啥的对x11阴影很大,这次想着只管搞一下,开虚拟机太费劲了。 mikecoder.cn/?post=116 安装这篇文章搞定了,备份一下。 brew install sdl ./configure --enable-ne2000 --enable-all-optimizations --enable-cpu-level=6 --enable-x86-64 --enable-vmx=2 --enable-pci --enable-usb --enable-usb-ohci --enable-e1000 --enable-debugger --enable-disasm --disable-debugger-gui --with-sdl --prefix=$HOME/opt/bochs make & make install export BXSHARE="$HOME/opt/bochs/share/bochs" export PATH="$PATH:$HOME/opt/bochs/bin" 就好了。

Continue

selenium安装 去官网下载一个jar包,然后运行:java -jar selenium-server-standalone-2.53.1.jar 然后写代码就行了,会打开一个浏览器窗口。看看有办法静默打开不,好像phantomjs模式可以,这个还要安装。    

# coding: utf-8

# from selenium import selenium
from selenium.webdriver.common.by import By

from selenium import webdriver

from selenium.webdriver.phantomjs.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Firefox()
# browser = WebDriver()

browser.get('http://baidu.com/')
print browser.title
f = browser.find_element_by_id('kw')
f.send_keys(u'谷歌')

f = browser.find_element_by_id('su')
f.click()
WebDriverWait(browser, 10).until(EC.title_contains(u"谷歌"))

print browser.title
# browser.quit()

Continue

这个开始的时候想解决的,查文档搜索都没有,就没搞。现在有时间了准备搞搞,发现就一行代码就行了。 sql-hint.js文件 CodeMirror.registerHelper("hint", "sql", function(editor, options) {这里边。 addMatches()结果都存在result了,然后对result进行排序就搞定了。 result = result.sort(); 一行代码。

Continue

之前没有这个错“Type Error: Network request failed”,然后之后有了,很纳闷。 通过查找发现是ios9之后请求必须走https不然系统就给你禁掉了。解决办法   Info.plist文件里修改 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>localhost</key> <dict> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict> 这个官方网站也有提,“Running On Device”这节。

Continue