newlisp专题

newlisp 启动参数

写一个newlisp脚本,执行时有时需要传递参数,比如一个连接tcp server的测试程序,执行时需要指定服务器IP地址和端口号。 newlisp try.lsp localhost 9999newlisp中的mai-args代表了所有的传递参数,包括命令本身,因此: (println main-args) 显示结果如下: ("newlisp" "try.lsp" "

newlisp做git lab系统备份

下面的代码都是newlisp, 在crontab的帮助下实现定时备份git仓库和mysql数据库。因为git lab的数据存放在这里。 事实上,newlisp很适合做运维脚本。 git_backup.lsp文件: (set 'folder-name (date (date-value) 0 "%Y-%m-%d"))(println folder-name)(set 'folder-n

为Emacs 24.3配置newLISP开发环境

本文已经更新, 因为Emacs 24.3已经可以使用package system。所以配置变得简单许多: 首先用配置package system server,参考文章:Emacs package system 然后编辑~/.emacs.d/init.el 文件,加入: ;;newlisp(require 'newlisp-mode)(add-to-list 'auto-mode-a

newLISP window7 安装

1.从这里下载win32的安装包: http://www.newlisp.org/index.cgi?page=Downloads newlisp.exe默认会安装在C:\Program Files (x86)\newlisp\newlisp.exe 运行该程序,用下面的代码测试一下utf-8是否支持: (if utf8 (println "utf-8")) 返回nil,说明不支持。

newLISP TCP通信的一些技巧

如何发送字节数组 net-send仅仅接受string作为参数,也就是说只能发送字符串。 后来才发现,原来这只是这个API的接口,通过字符串仍然能够发送二进制数据,比如: > (net-send socket "\019\000")2只需要前面加上\转义符号即可。 如何发送16位整数,并按照big-endian顺序发送 答案是pack。看下面的例子: > (set '

将newlisp脚本安装成windows service

现在有一个需求,将一个newlisp脚本文件做成windows service,开机自动启动。每隔一段时间,检查一下系统环境,其他的进程是否还活着,等等。 由于在windows上面运行newlisp,需要执行类似这种命令: newlisp a.lsp 因此写成一个bat文件来执行上面的命令。这样问题就转化成如何将bat文件安装成windows service. 下面是详细的例子。

改进的newlisp编译脚本,只需要配置

前面有一篇Say bye to CMake and Makefile我开始用自己编写的newlisp脚本替代CMake,今天对前面的进行改进。 改进部分是: 1. newlisp armory模块的引入和初始化 部分可以重用 2. 将头文件所在目录,cpp或者cc文件所在目录以及依赖库名称等 作为配置单独抽出来,可以根据不同的项目进行配置 现在看改过后的代码: rebuild.lsp

在newlisp中使用table-driven模式

table-drvien,在代码大全中有专门一章介绍,大意是如果条件判断太多,根据不同的条件要执行不同的代码逻辑,用if/else很傻,用switch/case也是一样,用设计模式要写一大堆类。其实有一个更简单的做法,就是key/value类型的数据结构,key为条件,value为执行函数。如果key是整数的话,用一维或者多维数组也可以。 在newlisp中,提供了key/value的接口允许做

杀掉所有newlisp进程

在用newlisp创建多个进程模拟客户端进行测试的时候,关闭是个问题,下面的脚本很方便的杀掉所有newlisp进程 #!/usr/bin/newlisp(set 'r (exec "pidof newlisp"))(dolist (l r)(exec (append "kill " l)))

用newLisp开发网站五 日志

默认日志路径 默认日志在站点目录的dragonfly-framework目录下,这是dragonfly的根目录 默认日志级别 默认为LOG_INFO级别 以上两个都可在config.lsp中进行配置 官方文档在:http://dragonfly.neocortex.io/api 到目前位置,掌握的知识足够写一个网站了。因为是基于CGI的,所以推测不存在多线程同步的问题。

用newLisp开发网站四 REST API

URL中的$resource和lisp文件名对应 本节主要学习如何使用第二种路由方法来实现REST API。仍然阅读http://dragonfly.neocortex.io/dragonfly_routes 不过要看这一节: RESTful routing with Route.Resource 首先是URL请求格式有讲究, http://mysite.com/$resou

newLISP FOOP 类的方法以及实现

定义类的方法 创建类的方法和创建类的构造函数几乎一样,只是方法名称不再是类的名称而已。比如: ;; class methods for rectangles(define (Rectangle:area)(mul (self 3) (self 4)))(define (Rectangle:move dx dy)(inc (self 1) dx) (inc (self 2) dy))

在newLISP中使用正则表达式 二

反斜线(元字符之一) 因为元字符是特殊字符,正常使用时不会被作为普通字符用来搜索,而是使用其特殊含义,比如一对方括号表示字符集合。但是如果想对元字符本身进行搜索,就需要转义。比如 > (regex "\\[text\\]" "ab[text]cd")("[text]" 2 6)因为想要匹配的是[text]子串,所以前面用反斜线转义,在newlisp的regex规则中,双引号内必须用\\

在newLISP中使用正则表达式 一

因为老是忘记正则的规则,所以集中写在一个地方。 首先newLISP使用的正则表达式是PCRE风格,Perl Compatible Regular Expression ,官方文档在:http://www.pcre.org/ 查找语法可以参考:http://perldoc.perl.org/perlre.html 在newLISP中,主要使用regex来处理正则表达式,文档在http://

用newLISP开发网站一 基本使用

newLISP可以开发网站,有两个可以使用的framework,本文从其中一个开始Dragonfly  站点在:http://dragonfly.neocortex.io 为什么我用newlisp开发网站? 1. 并不是一定要高性能 因为很多应用都是网站的方式发布,易于升级,而并不是很多网站一定要具备高性能要求,一定要用C++写网站。 2. 脚本式编程容易理解和维护 Java, 太

newLISP中的字典类型

在之前一篇在newlisp中使用table-driven模式曾经用过这个类型做table-driver模式。 这里将专门描述Tree如何使用。 创建字典 首先Tree是一个namesapce(也就是context),如果想创建一个字典保存key/value结构,需要如下使用: (new Tree 'MyTable) (MyTable "/home/a.cc" "123:45") (

newlisp 监控Linux进程 四

用ps命令查看进程使用的cpu和内存 在前面用newlisp监控进程的时候,其实只是判断进程是否存活,如果不是,则重新启动。现在还要实现另一个功能,监控进程的cpu和memory占用情况。 如果用man ps查看ps命令,你会看到下面的参数: CODE HEADER DESCRIPTION%cpu %CPU cpu utilization of the p

newLISP 递归访问目录树

一个简单的递归函数,可以遍历目录树中的所有文件,传递另一个处理函数,该函数可以接受文件路径作为参数,从而决定如何处理。 下面是调用例子: #!/usr/bin/newlisp(load "file.lsp")(define (show-file file-path)(println (string file-path ": " (file-info file-path))))(FI

newLISP FOOP 对象模型

对象之间的关系 对象可以包含对象,就像一般面向对象的对象树一样。在lisp中,其实很简单, 因为对象就是list, 对象包含对象也就是list里面包含list,此嵌套关系可以有很多层。 下面这个例子同样来自manual ; create classes(new Class 'Person)(new Class 'Address)(new Class 'City)(new

mongodb newlisp driver v0.1.0 发布

一直以来,没有newlisp直接访问mongodb 的方式,今天发布了v0.1.0版本,可以让newlisp通过mongdb c driver访问mongodb server. 下面是例子代码: #!/usr/bin/newlisp(load "mongo.lsp")(mongo:init)(set 'client-ptr (mongo:connect "mongodb://127.0

最小二乘法数学原理和newlisp实现

最小二乘法 1 英文名称 least square method 2 用途 最小二乘法(又称最小平方法)是一种数学优化技术。通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。 最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。 3 原理

用newlisp做数学统计

标准函数 newlisp已经自带了一些统计函数 幂函数 (pow 100 2) → 10000(pow 100 0.5) → 10(pow 100 0.5 3) → 1000(pow 3) → 9 第一个是100^2 第二个是100^0.5 第三个是(100^0.5)^3 第四个是3^2 自定义函数 阶乘 ;;@n int