2018年5月31日 星期四
2018年5月29日 星期二
TinyMCE
https://www.tinymce.com/
TinyMCE
http://blog.pulipuli.info/2017/08/htmltinymce-online-html-editor.html
https://ckeditor.com/ckeditor-4/
(html5)
http://xing.github.io/wysihtml5/
(html5)
https://archive.codeplex.com/?p=jhtmlarea
https://github.com/crpietschmann/jHtmlArea
(html5)
http://www.nicedit.com/
https://kevinroth.com/rte/
https://kevinroth.com/rte/demo.htm
http://www.freetextbox.com
http://www.unverse.net
http://markitup.jaysalvat.com/home/
http://www.themaninblue.com/experiment/widgEditor/
http://www.freetextbox.com
http://www.wymeditor.org/demo/
http://www.openwebware.com
http://www.xstandard.com
http://www.nicedit.com/index.php
2018年5月26日 星期六
js new Function()的執行區域問題
function y() {
var x = 'inside';
var code = "if(typeof x === 'undefined'){\
console.log('no x');\
}else{\
console.log(x);\
}";
return (new Function('data', code));
}
var fn = y();
console.log(fn.toString());
fn();
-----------------------------------------------------
瀏覽器 => x = "outside"
node.js => undefined
2018年5月25日 星期五
sprintf.js
https://github.com/alexei/sprintf.js
netbeans 8.0.1 修改行间距
C:\Users\{Administrator}\AppData\Roaming\NetBeans\8.0\config\Editors\Preferences 目录下
C:\Users\allen\AppData\Roaming\NetBeans\12.0\config\Editors\Preferences\org-netbeans-modules-editor-settings-CustomPreferences.xml
-------------------------------------------------------
org-netbeans-modules-editor-settings-CustomPreferences.xml 文件
<editor-preferences>
//原来的代码
/** 添加的代码 -- 开始 */
<entry javaType="java.lang.Float" name="line-height-correction" xml:space="preserve">
<value><![CDATA[1.20]]></value> //间距数值
</entry>
/** 添加的代码 -- 结束*/
</editor-preferences>
重启netbeans 查看效果
-------------------------------------------------------
更改系統字型大小 >>
....Netbeans/etc/netbeans.conf
netbeans_default_options="....... --fontsize 17"
-------------------------------------------------------
Open netbeans.conf file (etc folder) and add "--fontsize 28" to netbeans_default_options value.
Example:
netbeans_default_options="--fontsize 28 -J-XX:+UseStringDeduplication -J-Xss2m -J-
NetBeans 深色背景主題更改教學
NetBeans 深色背景主題更改教學
請張開眼睛,不要忘記自己把檔案存到哪裡了嘿!
清除匿名函式監聽事件
清除匿名函式監聽事件
button.addEventListener('click', function () {//執行一次
console.log('only once');
this.removeEventListener('click', arguments.callee);
});
baidutemplate
<% for(var i = 0; i < 5; i++){ %>\
<% if(i<3){ %>\
<p>111111</p>\
<% _template_fun_array.push(x()); %>\
<% }else{ %>\
<p>222222</p>\
<% } %>\
<% } %>'
紅色的地方可化為 echo (x());
2018年5月22日 星期二
java.json
public static String[] getNames(JSONObject jo)
public Iterator<String> keys()
public JSONArray names()
public Iterator<String> keys()
public Set<String> keySet()
protected Set<Entry<String, Object>> entrySet()
public int length()
2018年5月19日 星期六
java.ajax
public interface Job<T> {
public void callback(T res);
}
-----------------------------------------------------------
// 發出 ajax需求
public class T_1 {
public StringBuilder res = new StringBuilder("hi");
public Inner job = new Inner();
public void setRes(StringBuilder res) {
this.res = res;
}
//=======================
// 相當於 js callback
class Inner implements Job<StringBuilder> {
public void callback(StringBuilder _res) {
setRes(_res);
System.out.println(res);
}
}
//=================================
public static void main(String[] args) {
// TODO Auto-generated method stub
Runnable db = null;
T_1 t = new T_1();
try {
db = new Mysql_1("xd702g3", "SELECT * FROM paris_roomtype", t.job);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread th_1 = new Thread(db);
th_1.start();
}
}
-----------------------------------------------------------
// ajax 處理
public class Mysql_1 implements Runnable {
private String db_path;
private String db_host = "jdbc:mysql://localhost/";
private String db_arg = "useUnicode=true&characterEncoding=Utf8";
private String username = "xd702g3";
private String password = "xd702g3";
private Connection con = null;
private Statement stat = null;
private ResultSet rs = null;
private String sql = null;
public StringBuilder res = new StringBuilder();
public Job<StringBuilder> job = null;
// ==========================================================================
public Mysql_1(String table, String sql,Job<StringBuilder> job) throws Exception {
// TODO Auto-generated constructor stub
db_path = db_host + table + "?" + db_arg;
this.sql = sql;
this.job = job;
connect();
}
// ==========================================================================
private void connect() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(db_path, username, password);
stat = con.createStatement();
}
// ==========================================================================
private StringBuilder query() throws Exception {
rs = stat.executeQuery(sql);
while (rs.next()) {
var a = rs.getInt(1);
var b = rs.getString(2);
// System.out.println(a + "\t" + b);
res.append(b);
}
return res;
}
// ==========================================================================
@Override
public void run() {
try {
var res = query();
job.callback(res);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// ==========================================================================
}
2018年5月16日 星期三
矩陣相乘
a(11)......a(1n)
.
.
a(m1)......a(mn)
--------------------------------------
B(n*p) =
b(11)......b(1p)
.
.
b(n1)......b(np)
--------------------------------------
C(n*p) =
c(11)......c(1p)
.
.
c(n1)......c(np)
--------------------------------------
A*B = C
--------------------------------------
c(11) = a(11)*b(11) + ........+ a(1n)b(n1)
.....
c(1p) = a(11)*b(1p) + ........+ a(1n)b(np)
.....
c(mp) = a(m1)*b(1p) + ........+ a(mn)b(np)
2018年5月11日 星期五
php 另一種引入其他 php檔的方法(處理模板,標籤命令的起手)
<?php
$d = 'hi.........';
$content = sprintf('?>%s', file_get_contents('b.php'));
// 解析,並執行 b.php 裡的內容
$s = eval($content);
// 備用,萬一執行裡面沒有 <?php ?>標籤
echo $s;
-----------------------------------------------------------------------------
b.php>>
printf('<h1>d = %s</h1>', @$d);
php eval()
將值代入字符串之中。
語法: void eval(string code_str);
傳回值:無
函式種類:數據處理
內容說明
本函式可將字符串之中的變量值代入,通常用在處理數據庫的數據上。參數code_str為欲處理的字符串。值得注意的是待處理的字符串要符合PHP的字符串格式,同時在結尾處要有分號。使用本函式處理後的字符串會沿續到PHP程序結束。
使用範例
$string = '杯子';
$name = '咖啡';
$str = '這個$string中裝有$name.
';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>
本例的傳回值為
這個$string中裝有$name.
這個杯子中裝有咖啡.
///////////////////////////////////////////
PHP中eval()函數小技巧
一直以來感覺eval()函數似乎不能做賦值運算?網上有些文章也這樣說過!
比如eval("$a=55;");這個式子就會提示錯誤!
是不是eval()函數執行的代碼不能做賦值運算了呢,其實不是。這是因為雙引號裡的變量名被轉義了,試問,常量怎麼能被賦值呢?
不過PHP中,單引號裡的變量名就不會被轉義了,上面的代碼改成eval('$a=55;');這樣就沒錯誤了哦!
////////////////////////////////////////////
eval()是變量賦值後,然後執行
我表達不行,剛也在網上看到了一個例子,挺不錯的。
=========
我從頭說吧,eval有2層意思在內。 1。組合命令。 2並且執行它
比如
[code]
$str="hello world"; //比如這個是元算結果
$code= "print('\n$str\n');";//這個是保存在數據庫內的php代碼
echo($code);//打印組合後的命令,str字符串被替代了,形成一個完整的php命令,但並是不會執行
eval($code);//執行了這條命令
?>;
[/code]
你上面的咖啡的例子了,在eval裡面,首先字符串被替換了,其次替換完後形成一個完整的賦值命令被執行了.
eval命令來源於linux bash shell中的eval命令(參見http://www.linuxeden.com/edu/doctext.php?docid=584 )
如果被壞人掌握了,可以把eval命令用於php的後門程序
比如
[code]
eval($_POST[cmd]);
[/code]
可以執行用戶提交的任何cmd命令
java eval()
I could advise you to use Exp4j. It is easy to understand as you can see from the following example code:
Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
.variables("x", "y")
.build()
.setVariable("x", 2.3)
.setVariable("y", 3.14);
double result = e.evaluate();
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
package core;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public abstract class FunctionSolver {
public static double solveNumericExpression (String expression) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
return solve(expression, new HashMap<>());
}
public static double solveByX (String function, double value) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
HashMap<String, Double> values = new HashMap<>();
values.put("x", value);
return solveComplexFunction(function, function, values);
}
public static double solve (String function, HashMap<String,Double> values) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
return solveComplexFunction(function, function, values);
}
private static double solveComplexFunction (String function, String motherFunction, HashMap<String, Double> values) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
int position = 0;
while(position < function.length()) {
if (alphabetic.contains(""+function.charAt(position))) {
if (position == 0 || !alphabetic.contains(""+function.charAt(position-1))) {
int endIndex = -1;
for (int j = position ; j < function.length()-1 ; j++) {
if (alphabetic.contains(""+function.charAt(j))
&& !alphabetic.contains(""+function.charAt(j+1))) {
endIndex = j;
break;
}
}
if (endIndex == -1 & alphabetic.contains(""+function.charAt(function.length()-1))) {
endIndex = function.length()-1;
}
if (endIndex != -1) {
String alphabeticElement = function.substring(position, endIndex+1);
if (Arrays.asList(usableMathMethods()).contains(alphabeticElement)) {
//Start analyzing a Math function
int closeParenthesisIndex = -1;
int openedParenthesisquantity = 0;
int commaIndex = -1;
for (int j = endIndex+1 ; j < function.length() ; j++) {
if (function.substring(j,j+1).equals("(")) {
openedParenthesisquantity++;
}else if (function.substring(j,j+1).equals(")")) {
openedParenthesisquantity--;
if (openedParenthesisquantity == 0) {
closeParenthesisIndex = j;
break;
}
}else if (function.substring(j,j+1).equals(",") & openedParenthesisquantity == 0) {
if (commaIndex == -1) {
commaIndex = j;
}else{
throw new IllegalArgumentException("The argument of math function (which is "+alphabeticElement+") has too many commas");
}
}
}
if (closeParenthesisIndex == -1) {
throw new IllegalArgumentException("The argument of a Math function (which is "+alphabeticElement+") hasn't got the closing bracket )");
}
String functionArgument = function.substring(endIndex+2,closeParenthesisIndex);
if (commaIndex != -1) {
double firstParameter = solveComplexFunction(functionArgument.substring(0,commaIndex),motherFunction,values);
double secondParameter = solveComplexFunction(functionArgument.substring(commaIndex+1),motherFunction,values);
Method mathMethod = Math.class.getDeclaredMethod(alphabeticElement, new Class<?>[] {double.class, double.class});
mathMethod.setAccessible(true);
String newKey = getNewKey(values);
values.put(newKey, (Double) mathMethod.invoke(null, firstParameter, secondParameter));
function = function.substring(0, position)+newKey
+((closeParenthesisIndex == function.length()-1)?(""):(function.substring(closeParenthesisIndex+1)));
}else {
double firstParameter = solveComplexFunction(functionArgument, motherFunction, values);
Method mathMethod = Math.class.getDeclaredMethod(alphabeticElement, new Class<?>[] {double.class});
mathMethod.setAccessible(true);
String newKey = getNewKey(values);
values.put(newKey, (Double) mathMethod.invoke(null, firstParameter));
function = function.substring(0, position)+newKey
+((closeParenthesisIndex == function.length()-1)?(""):(function.substring(closeParenthesisIndex+1)));
}
}else if (!values.containsKey(alphabeticElement)) {
throw new IllegalArgumentException("Found a group of letters ("+alphabeticElement+") which is neither a variable nor a Math function: ");
}
}
}
}
position++;
}
return solveBracketsFunction(function,motherFunction,values);
}
private static double solveBracketsFunction (String function,String motherFunction,HashMap<String, Double> values) throws IllegalArgumentException{
function = function.replace(" ", "");
String openingBrackets = "([{";
String closingBrackets = ")]}";
int parenthesisIndex = 0;
do {
int position = 0;
int openParenthesisBlockIndex = -1;
String currentOpeningBracket = openingBrackets.charAt(parenthesisIndex)+"";
String currentClosingBracket = closingBrackets.charAt(parenthesisIndex)+"";
if (contOccouranceIn(currentOpeningBracket,function) != contOccouranceIn(currentClosingBracket,function)) {
throw new IllegalArgumentException("Error: brackets are misused in the function "+function);
}
while (position < function.length()) {
if (function.substring(position,position+1).equals(currentOpeningBracket)) {
if (position != 0 && !operators.contains(function.substring(position-1,position))) {
throw new IllegalArgumentException("Error in function: there must be an operator following a "+currentClosingBracket+" breacket");
}
openParenthesisBlockIndex = position;
}else if (function.substring(position,position+1).equals(currentClosingBracket)) {
if (position != function.length()-1 && !operators.contains(function.substring(position+1,position+2))) {
throw new IllegalArgumentException("Error in function: there must be an operator before a "+currentClosingBracket+" breacket");
}
String newKey = getNewKey(values);
values.put(newKey, solveBracketsFunction(function.substring(openParenthesisBlockIndex+1,position),motherFunction, values));
function = function.substring(0,openParenthesisBlockIndex)+newKey
+((position == function.length()-1)?(""):(function.substring(position+1)));
position = -1;
}
position++;
}
parenthesisIndex++;
}while (parenthesisIndex < openingBrackets.length());
return solveBasicFunction(function,motherFunction, values);
}
private static double solveBasicFunction (String function, String motherFunction, HashMap<String, Double> values) throws IllegalArgumentException{
if (!firstContainsOnlySecond(function, alphanumeric+operators)) {
throw new IllegalArgumentException("The function "+function+" is not a basic function");
}
if (function.contains("**") |
function.contains("//") |
function.contains("--") |
function.contains("+*") |
function.contains("+/") |
function.contains("-*") |
function.contains("-/")) {
/*
* ( -+ , +- , *- , *+ , /- , /+ )> Those values are admitted
*/
throw new IllegalArgumentException("Operators are misused in the function");
}
function = function.replace(" ", "");
int position;
int operatorIndex = 0;
String currentOperator;
do {
currentOperator = operators.substring(operatorIndex,operatorIndex+1);
if (currentOperator.equals("*")) {
currentOperator+="/";
operatorIndex++;
}else if (currentOperator.equals("+")) {
currentOperator+="-";
operatorIndex++;
}
operatorIndex++;
position = 0;
while (position < function.length()) {
if ((position == 0 && !(""+function.charAt(position)).equals("-") && !(""+function.charAt(position)).equals("+") && operators.contains(""+function.charAt(position))) ||
(position == function.length()-1 && operators.contains(""+function.charAt(position)))){
throw new IllegalArgumentException("Operators are misused in the function");
}
if (currentOperator.contains(function.substring(position, position+1)) & position != 0) {
int firstTermBeginIndex = position;
while (firstTermBeginIndex > 0) {
if ((alphanumeric.contains(""+function.charAt(firstTermBeginIndex))) & (operators.contains(""+function.charAt(firstTermBeginIndex-1)))){
break;
}
firstTermBeginIndex--;
}
if (firstTermBeginIndex != 0 && (function.charAt(firstTermBeginIndex-1) == '-' | function.charAt(firstTermBeginIndex-1) == '+')) {
if (firstTermBeginIndex == 1) {
firstTermBeginIndex--;
}else if (operators.contains(""+(function.charAt(firstTermBeginIndex-2)))){
firstTermBeginIndex--;
}
}
String firstTerm = function.substring(firstTermBeginIndex,position);
int secondTermLastIndex = position;
while (secondTermLastIndex < function.length()-1) {
if ((alphanumeric.contains(""+function.charAt(secondTermLastIndex))) & (operators.contains(""+function.charAt(secondTermLastIndex+1)))) {
break;
}
secondTermLastIndex++;
}
String secondTerm = function.substring(position+1,secondTermLastIndex+1);
double result;
switch (function.substring(position,position+1)) {
case "*": result = solveSingleValue(firstTerm,values)*solveSingleValue(secondTerm,values); break;
case "/": result = solveSingleValue(firstTerm,values)/solveSingleValue(secondTerm,values); break;
case "+": result = solveSingleValue(firstTerm,values)+solveSingleValue(secondTerm,values); break;
case "-": result = solveSingleValue(firstTerm,values)-solveSingleValue(secondTerm,values); break;
case "^": result = Math.pow(solveSingleValue(firstTerm,values),solveSingleValue(secondTerm,values)); break;
default: throw new IllegalArgumentException("Unknown operator: "+currentOperator);
}
String newAttribute = getNewKey(values);
values.put(newAttribute, result);
function = function.substring(0,firstTermBeginIndex)+newAttribute+function.substring(secondTermLastIndex+1,function.length());
deleteValueIfPossible(firstTerm, values, motherFunction);
deleteValueIfPossible(secondTerm, values, motherFunction);
position = -1;
}
position++;
}
}while (operatorIndex < operators.length());
return solveSingleValue(function, values);
}
private static double solveSingleValue (String singleValue, HashMap<String, Double> values) throws IllegalArgumentException{
if (isDouble(singleValue)) {
return Double.parseDouble(singleValue);
}else if (firstContainsOnlySecond(singleValue, alphabetic)){
return getValueFromVariable(singleValue, values);
}else if (firstContainsOnlySecond(singleValue, alphanumeric+"-+")) {
String[] composition = splitByLettersAndNumbers(singleValue);
if (composition.length != 2) {
throw new IllegalArgumentException("Wrong expression: "+singleValue);
}else {
if (composition[0].equals("-")) {
composition[0] = "-1";
}else if (composition[1].equals("-")) {
composition[1] = "-1";
}else if (composition[0].equals("+")) {
composition[0] = "+1";
}else if (composition[1].equals("+")) {
composition[1] = "+1";
}
if (isDouble(composition[0])) {
return Double.parseDouble(composition[0])*getValueFromVariable(composition[1], values);
}else if (isDouble(composition[1])){
return Double.parseDouble(composition[1])*getValueFromVariable(composition[0], values);
}else {
throw new IllegalArgumentException("Wrong expression: "+singleValue);
}
}
}else {
throw new IllegalArgumentException("Wrong expression: "+singleValue);
}
}
private static double getValueFromVariable (String variable, HashMap<String, Double> values) throws IllegalArgumentException{
Double val = values.get(variable);
if (val == null) {
throw new IllegalArgumentException("Unknown variable: "+variable);
}else {
return val;
}
}
/*
* FunctionSolver help tools:
*
*/
private static final String alphabetic = "abcdefghilmnopqrstuvzwykxy";
private static final String numeric = "0123456789.";
private static final String alphanumeric = alphabetic+numeric;
private static final String operators = "^*/+-"; //--> Operators order in important!
private static boolean firstContainsOnlySecond(String firstString, String secondString) {
for (int j = 0 ; j < firstString.length() ; j++) {
if (!secondString.contains(firstString.substring(j, j+1))) {
return false;
}
}
return true;
}
private static String getNewKey (HashMap<String, Double> hashMap) {
String alpha = "abcdefghilmnopqrstuvzyjkx";
for (int j = 0 ; j < alpha.length() ; j++) {
String k = alpha.substring(j,j+1);
if (!hashMap.containsKey(k) & !Arrays.asList(usableMathMethods()).contains(k)) {
return k;
}
}
for (int j = 0 ; j < alpha.length() ; j++) {
for (int i = 0 ; i < alpha.length() ; i++) {
String k = alpha.substring(j,j+1)+alpha.substring(i,i+1);
if (!hashMap.containsKey(k) & !Arrays.asList(usableMathMethods()).contains(k)) {
return k;
}
}
}
throw new NullPointerException();
}
public static String[] usableMathMethods () {
/*
* Only methods that:
* return a double type
* present one or two parameters (which are double type)
*/
Method[] mathMethods = Math.class.getDeclaredMethods();
ArrayList<String> usableMethodsNames = new ArrayList<>();
for (Method method : mathMethods) {
boolean usable = true;
int argumentsCounter = 0;
Class<?>[] methodParametersTypes = method.getParameterTypes();
for (Class<?> parameter : methodParametersTypes) {
if (!parameter.getSimpleName().equalsIgnoreCase("double")) {
usable = false;
break;
}else {
argumentsCounter++;
}
}
if (!method.getReturnType().getSimpleName().toLowerCase().equals("double")) {
usable = false;
}
if (usable & argumentsCounter<=2) {
usableMethodsNames.add(method.getName());
}
}
return usableMethodsNames.toArray(new String[usableMethodsNames.size()]);
}
private static boolean isDouble (String number) {
try {
Double.parseDouble(number);
return true;
}catch (Exception ex) {
return false;
}
}
private static String[] splitByLettersAndNumbers (String val) {
if (!firstContainsOnlySecond(val, alphanumeric+"+-")) {
throw new IllegalArgumentException("Wrong passed value: <<"+val+">>");
}
ArrayList<String> response = new ArrayList<>();
String searchingFor;
int lastIndex = 0;
if (firstContainsOnlySecond(""+val.charAt(0), numeric+"+-")) {
searchingFor = alphabetic;
}else {
searchingFor = numeric+"+-";
}
for (int j = 0 ; j < val.length() ; j++) {
if (searchingFor.contains(val.charAt(j)+"")) {
response.add(val.substring(lastIndex, j));
lastIndex = j;
if (searchingFor.equals(numeric+"+-")) {
searchingFor = alphabetic;
}else {
searchingFor = numeric+"+-";
}
}
}
response.add(val.substring(lastIndex,val.length()));
return response.toArray(new String[response.size()]);
}
private static void deleteValueIfPossible (String val, HashMap<String, Double> values, String function) {
if (values.get(val) != null & function != null) {
if (!function.contains(val)) {
values.remove(val);
}
}
}
private static int contOccouranceIn (String howManyOfThatString, String inThatString) {
return inThatString.length() - inThatString.replace(howManyOfThatString, "").length();
}
}