欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 为什么要编译nginx-clojure源码 作为《Java扩展Nginx》的第二篇,本想与大家一起开始nginx-clojure的深度之旅,但有个问题若不解决,会让大多数有兴趣的读者立即止步、关闭网页、再也不见 前文咱们使用的是nginx-clojure官方的安装包,这是个编译好的nginx可执行文件,开箱即用,当时我们还用命令查看过nginx版本是1.18.0
前言 一个cljs文件定义一个命名空间,通过命名空间可以有效组织代码,这是构建大型系统必备的基础设施。本篇我们就深入理解cljs中的命名空间吧! 好习惯从"头"开始 每个cljs文件首行非注释的内容必定如下 (ns my-project.core) 而当前的cljs文件路径为${project_dir}/src/my_project/core.cljs,很明显命名空间与源码文件路径是一一对应的,对应规则是-对应_,.对应/咯~ 引入其他命名空间 要使用其他命名空间下的成员,那么必须先将其引入到当前命名空
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 作为《Java扩展Nginx》系列的第七篇,咱们来了解一个实用工具共享内存,正式开始之前先来看一个问题 在一台电脑上,nginx开启了多个worker,如下图,如果此时我们用了nginx-clojure,就相当于有了四个jvm进程,彼此相互独立,对于同一个url的多次请求,可能被那四个jvm中的任何一个处理: 📷 现在有个需求:统计某个url被
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 《Java扩展Nginx之一:你好,nginx-clojure》 《Java扩展Nginx之二:编译nginx-clojure源码》 《Java扩展Nginx之三:基础配置项》 本篇概览 经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅 作为《Java扩展Nginx》系列的第三篇,本
我是一名热衷于函数式编程的Clojurian(Clojure粉),网络ID是lambeta(λβ),读作/‘læmeitə/,个人的博客网站是https://lambeta.com。俗话说,工欲善其事必先利其器,完善开发工具与我而言是一件愉快的事情,所以想把经验集结成文字,便有了这篇文章。这篇文章不会介绍太多花式或有深度的emacs配置,更多是摸索学习的过程,其中充满了乐趣。
- 下面就是一个完整的rewrite handler,这些内容都是写在http配置内的:
Lisp 是一种编程语言,以表达性和功能强大著称,但人们通常认为它不太适合应用于一般情况。Clojure 是一种运行在 Java™ 平台上的 Lisp 方言,它的出现彻底改变了这一现状。如今,在任何具备 Java 虚拟机的地方,都可以利用 Lisp 的强大功能。
2.带有/g的正则表达式作为参数:为了安全起见,应该设置lastIndex为0(test()和exec()时)
译者注:很多人误认为JVM是一个很重量级的框架,本文作者之前也是这么认为的,但是在这篇文章中,作者从几个层面分析了一下,可以看出JVM并不是我们想象中的那么“重”。以下为译文。 大多数情况下,我之所以反对Clojure,就是由于JVM。因为它实在是太重量级了。 这是几周前在ZA Tech科技公司的Slack团队中出现的声音。假期的时候观看了一些关于Clojure的讨论后发现演讲者们又一次又一次地提到了这个反对意见。 关于这一点,我在Slack中做过一段说明。现在,我为了更广泛的讨论而把它记录下来。 背景 我
Clojure 是JVM上的一个LISP语言变种,它比Common Lisp更强调纯函数式编程,但提供了一些STM工具以处理它所引入的状态问题。
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于Nginx扩展 以欣宸自己为例,对一个java程序员来说,nginx并不陌生,下图应该是最常见的使用场景了,反向代理: 📷 除了反向代理,nginx的模块化机制让nginx具备了更多丰富的特性,例如ngx_http_log_module(日志)、ngx_http_rewrite_module(重定向)等 除了官方模块,还有很多强大第三方模块可以选择,如下
前言 在项目中我们一般会为实际问题域定义领域数据模型,譬如开发VDOM时自然而言就会定义个VNode数据类型,用于打包存储、操作相关数据。clj/cljs不单内置了List、Vector、Set和Map等数据结构,还提供deftype和defrecord让我们可以自定义数据结构,以满足实际开发需求。 定义数据结构从Data Type和Record开始 提及数据结构很自然就想起C语言中的struct,结构中只有字段并没有定义任何方法,而这也是deftype和defrecord最基础的玩法。 示例 (de
◆平台无关性 ◆语言特性 ◆面向对象 ◆类库 ◆GC ◆异常处理
这里的 runtime 指的是 JVM,JVM 之初是为运行 Java 语言而设计,而现在已经发展成一重量级平台,除了 Clojure 之外,很多动态语言也都选择基于 JVM 去实现。 为了更加具体描述 Clojure 运行原理,会分两篇文章来介绍。 本文为第一篇,涉及到的主要内容有:编译器工作流程、Lisp 的宏机制。 第二篇将主要分析 Clojure 程序编译成的 bytecode 如何保证动态语言的特性以及如何加速 Clojure 程序执行速度,这会涉及到 JVM 的类加载机制、反射机制。
上一篇文章讲述了 Clojure 编译器工作的整体流程,主要涉及 LispReader 与 Compiler 这两个类,而且指出编译器并没有把 Clojure 转为相应的 Java 代码,而是直接使用 ASM 生成可运行在 JVM 中的 bytecode。本文将主要讨论 Clojure 编译成的 bytecode 如何实现动态运行时以及为什么 Clojure 程序启动慢,这会涉及到 JVM 的类加载机制。
最近,我在阅读 Steve Yegg 的文集《程序员的呐喊》。 这是一本非常有趣的书,里面甚至包含了一个小测试(原文),区分一个程序员到底是保守派还是自由派。 下面一共有十个问题,每个问题都有 A 和
最近在使用 Golang 的 regexp 对网络流量做正则匹配时,发现有些情况无法正确进行匹配,找到资料发现 regexp 内部以 UTF-8 编码的方式来处理正则表达式,而网络流量是字节序列,由其中的非 UTF-8 字符造成的问题。
最近我在实际工作中,接手了兄弟部门开发的一个模块,然后有部分用户提了一个问题到我这里。
关于clojure是什么东西就自行百度了,简单说就是用Lisp语言写的程序,编译成.class放在jvm上面跑,所以是需要jre的。独立的clojure可以从官方网站找到,目前稳定版本是1.8,官网https://clojure.org/index。下载后是一个zip,里面有个jar是clojure-1.8.0.jar,可以像常用的jar那样运行,这样会得到一个REPL交互环境,当然需要预先配置好jre(java8)。
今日推荐 今天推荐欧阳继超老师的新书——《前端函数式攻城指南》,本书获CrossEye重磅推荐,致力于教你用JavaScript编写出优雅的函数式代码,以不一样的方式思考和解决问题。 ?依然放猛料,我
主要资源来自TensorFlow中文社区,翻译借助谷歌翻译,仅用于资源分享。 以下是根据不同语言类型和应用领域收集的各类工具库,持续更新中。 C 通用机器学习 推荐人 -一个产品推荐的Ç语言库,利用了协同过滤。 计算机视觉 CCV – C / Cached /核心计算机视觉库,是一个现代化的计算机视觉库。 VLFeat – VLFeat是开源的计算机视觉算法库,有Matlab工具箱。 ---- C ++ 计算机视觉 OpenCV – 最常用的视觉库。有C ++,C,Python以及Java接口),支持Win
人们对函数式编程的兴趣不断增加,更具体地说,是在Clojure中对Web进行编程。许多关于如何构建基本应用程序的教程经常忽略部署细节。本文将向您展示如何将Clojure Web应用程序部署到Ubuntu 14.04 CVM。
Clojure(发音类似"closure",['kləʊʒə(r)])是一套现代的Lisp语言的动态语言版,它是一个函数式多用途的语言,其语法和其他的Lisp一样,都是建立在 S-expression 之上,即”全是括号,前缀表达式”的语言。
看七周七并发这本书,对Clojure产生了浓厚的兴趣。写篇日志记录下成长以及“成长的烦恼”。 使用Clojure,必须先准备好工具。首先,我们需要搭建Clojure的构建工具 - lein。Clojure一大特性就是REPL(Read-Evaluate-Print Loop),代码输入,立即执行,不用编译。可以通过lein repl来启动REPL。
(一) 在前几日的文章『软件随想录』里,我随性写了一句:「现在似乎已经不是lex/yacc 或 bison/flex的时代了。我亲眼看见一个同事在费力地用perl一行行解析某个系统的数据文件,却压根没想到写个BNF。BNF对他来说,不是一种选择。」 很多同学不解,问我:lex/yacc不是写编译器 [1] 的么?我又不发明新的语言,它们对我有什么用? 从这个问题里,我们可以见到国内本科教育荼毒之深。象牙塔里的讲编译原理的老师们,估计用lex/yacc也就是写过个毫无用处的toy language,然后把自己
在我过去十年开发的信息系统中,数据在前端应用程序、后端服务器和服务等程序之间流动。这些程序使用诸如 JSON 之类的交换格式进行网络通信。
一、前言 当使用CoffeeScript、ClojureScript编写前端脚本时,当使用Less、Sacc编写样式规则时,是否觉得调试时无法准确找到源码位置呢?当使用jquery.min.js等经压缩后的工具库时,是否觉得连调试的门都不不知道在哪呢? 针对上述问题,google为我们提供了Source Maps这一解决方案,以下内容为对Source Maps的学习记录,以便日后查阅。 由于篇幅较长,特设目录一坨! 二、示例 三、Sou
一、前言 当看到Lisp等函数式编程语言的语法是 (say (concat "hello" "world")) 这样的时候,我就有种深入学习的冲动,因为它的语法和自己一直使用的Java、C#都不同,酷比了!(我承认我是语法控^_^)又由于我主要玩的是JavaScript,恰好ClojureScript就是纯函数式的JS超集,于是决定以ClojureScript作为函数式编程的起点。(虽然JavaScript具有函数式语言的特点:函数为一等公民,
0. 前言 最近用到了 regexp 包,下面整理下正则表达式相关用法 参考 基础知识 - Golang 中的正则表达式 和 Golang regexp包中的函数和方法 做了汇总 1. 正则表达式 1.1 单一字符 . 匹配任意一个字符,如果设置 s = true,则可以匹配换行符 [字符类] 匹配“字符类”中的一个字符,“字符类”见后面的说明 [^字符类] 匹配“字符类”外的一个
前言 书接上一回,在了解cljs基本语法后并在clojurescript.net的奇特错误提示后,我们必须痛定思痛地搭建一个本地的开发环境,以便后续深入地学习cljs。 现有的构建工具 由于浏览器仅能运行JS,而无法直接运行cljs,因此我们需要搭建一个预编译环境将cljs编译成JS后再在浏览器中运行。预编译无非就是JVM和Nodejs两个环境,但具体使用时有如下几种构建工具。 直接JVM编译 Lein方案 Boot方案 Lumo方案 Shadow-cljs方案 cljs/tool方案 其中Lein
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《Java扩展Nginx》系列的第六篇,前文的五大handler形成了nginx-clojure开发的基本框架,初步评估已经可以支撑简单的需求开发了,但nginx-clojure并未止步于handler,还提供了丰富的扩展能力,本篇的两大filter就是比较常用的能力 filter一共有两种:header filter和body filter,n
程序人生之图穷匕见的podcast发了四期(三期正式的)后,有几个读者说在微信上听效果不好,又没法暂停(停下后再听又从头开始了),能不能在iTunes 播客里面听?程序君觉得这还真是个事,于是便考虑在iTunes里注册,一尝试才发现,iTunes不能帮你host你的episodes,它只是个聚合器,有点像已经死掉的google reader,你提交一个rss,iTunes审核后,就收录你的podcast了。所以,首先我得设置个站点放我的这些episodes。 在查阅了不少现有的static site gen
路由是web服务不可或缺的一部分,一个好的web框架必须具备一整套灵活且丰富的路由系统。Laravel自然也不例外,通过配置文件中一两行代码就可以实现一个具有完整的参数、属性及约束的路由,甚至可以免去写专门的controller。如此强大的功能是如何实现的呢?下面仍然从laravel框架的启动过程出发,探究一下源码中是如何一步步实现路由服务的。
Clojure —— 新世纪的 Lisp 方言,相信大多数同学多多少少都听过,毕竟有个杀手级应用 Storm,但是真正去写 Clojure 的同学估计不多,国内也罕见哪个公司招 Clojure 程序员。其实也好理解,Lisp 语言诞生这么久了,为什么一直那么小众?原因就在于 Lisp 语言过于强大,不必也不可能像 Java 那么普及。你能要求每个人都能为 CTO 吗?
本文链接较多,可点击本文https://liujiacai.net/blog/2017/11/22/create-firefox-chrome-extensions-in-clojurescript/去个人博客浏览。
Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号、函数、或者参数的数据类型。但是,所有的值仍然有一个类型。字符串时是字符串,数字是数字,列表是列表,等等。如果你尝试执行一个类型不支持的操作,将会在运行时产生错误。写代码时避免这种事情,是程序员的责任。对于有动态语言背景的人来说是很自然的事情,而那些只使用静态语言的人需要一些转变。
Go内置了(regexp包)对正则表达式的支持,这里是一般的正则表达式常规用法的例子。
**摘要: **Nathan Marz是分布式容错实时计算系统Storm的创始人。在2011年7月Twitter收购社交媒体数据分析公司BackType前,他是BackType首席工程师。2013年3月,他选择离开Twitter,创立了属于自己的公司。 关于个人经历 《程序员》:你何时开始学习编程,编写的第一个有趣的程序是什么? Nathan:我十岁那年开始在自己的TI-82图形计算器上写程序。原因是我想在它上面开发游戏,也是因为那时我在数学课上感到太无聊了。我在计算器上写出的头一个有趣的程序是款射箭游戏
前言 磨刀不误砍柴工,本篇将介绍如何搭建Chrome插件的ClojureScript开发环境。 具体工具栈:vim(paredit,tslime,vim-clojure-static,vim-fireplace) + leiningen(lein-cljsbuild,lein-doo,lein-ancient) + com.cemerick/piggieback 写得要爽 首先抛开将cljs编译为js、调试、测试和发布等问题,首先第一要务是写得爽~ cljs中最让人心烦的就是括号(),过去我想能否
😃我喜欢Clojure。原因有三。第一,我想通过学习Clojure来掌握函数式编程。第二,Clojure鼓励使用不可变数据和纯函数,语法相比Scala相对简单一些。第三,Bob大叔的新作《函数式设计》就是用Clojure来讲解如何把面向对象的SOLID原则和设计模式,与函数式风格相融合。
常常总有人问我,在现有的语言里面,有什么好的推荐?我说:“Java。” 他们很惊讶:“什么?Java!” 所以我现在来解释一下。 Java超越了所有咒骂它的“动态语言” 也许是因为年轻人的逆反心理,人们都不把自己的入门语言当回事。很早的时候,计算机系的学生用Scheme或者Pascal入门,现在大部分学校用Java。这也许就是为什么很多人恨Java,瞧不起用Java的人。提到Java,感觉就像是爷爷那辈人用的东西。大家都会用Java,怎么能显得我优秀出众呢?于是他们说:“Java老气,庞大,复杂,臃肿。我更
有些人问我,在现有的语言里面,有什么好的推荐?我说:“Java。” 他们很惊讶:“什么?Java!” 所以我现在来解释一下。
JVM我们并不陌生,现在我们就正式进入 JVM 的学习,如果你是一名软件开发工程师,在日常工作中除了 Java 这个关键词外,还有一个名词也一定经常被提及,那就是 JVM。提到 JVM 我们经常会在面试中遇到这样的问题:
JetBrains开源其Kotlin语言 基于JVM的新编程语言。 Kotlin,类似 Xtend 一样,旨在提供一种更好的 Java 而非重建整个新平台。这两种语言都向下编译为字节码(虽然 Xtend 是首先转换成相应的 Java 代码,再让 Java 编译器完成繁重的工作),而且两者都引入了函数和扩展函数(在某个有限范围内静态地增加一个新方法到某个已有类型的能力)。Xtend 是基于 Eclipse 的,而 Kotlin 是基于 IntelliJ 的,两者都提供无界面构建。能够首先演变到其他 IDE 的语言有可能成为最后的赢家。
在 Clojure 众多的 Web 框架中,Ring 以其简单统一的 HTTP 抽象模型脱颖而出。Ring 充分体现了函数式编程的思想——通过一系列函数的组合形成了一个易于理解、扩展的 HTTP 处理链。
我一般调试Go程序都是通过log日志,性能调试的话通过 pprof 、trace、flamegraph等,主要是Go没有一个很好的集成的debugger,前两年虽然关注了delve,但是在IDE中集成比较粗糙,调试也很慢,所以基本不使用debugger进行调试, 最近看到滴滴的工程师分享的使用debugger在调试Go程序,我觉得有必要在尝试一下这方面的技术了。
(一) 软件领域有个叫格林斯潘的哥们,估计大家都不怎么熟悉,但下面这句话写过代码可能没几个不知道: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp. 任何C或Fortran程序复杂到一定程度之后,都会包含一个临时开发的、不合规范的、充满程序错误的、运行速度很慢的、只
有些人问我,在现有的语言里面,有什么好的推荐?我说:“Java。” 他们很惊讶:“什么?Java!” 所以我现在来解释一下。 Java超越了所有咒骂它的“动态语言” 也许是因为年轻人的逆反心理,人们都
领取专属 10元无门槛券
手把手带您无忧上云