Antkillerfarm Hacking V7.5

language » Clojure, Groovy, Scala, VS Code, perl

2017-09-30 :: 6667 Words

Clojure

Clojure是Lisp语言在JVM上的实现。源代码以.clj为后缀。

官网:

http://clojure.org/

Clojure的安装主要有两种方法:

1.

sudo apt install clojure1.6

2.Clojure的全部功能都被放在clojure-1.8.0.jar中,因此实际上并不需要安装。所谓安装,不过是下载jar,然后让程序能够找到jar即可。因此,更好的办法是利用我们下面提到的leiningen,自动下载相关依赖。

leiningen

leiningen是Clojure的自动管理工具。

官网:

http://leiningen.org/

project.clj是Leigingen为项目添加的配置文件,类似于Maven的pom.xml。

project.clj中可以定义项目所需的Clojure的版本,并自动下载依赖。因此,很多Clojure项目在依赖上,往往只写leiningen和maven,根本就不提Clojure。这一点和其他编程语言,包括同为JVM语言的scala,还是差异挺大的。

Hello World

1.

lein new app hello

2.

cd hello

lein run

这里要注意路径,一定要在project.cl所在的路径下执行lein命令,否则会报如下错误:

No :main namespace specified in project.clj.

参见:

https://tonydeng.github.io/2016/07/19/leiningen-clojure-hello-world/

JavaFX

JavaFX和Clojure的结合,本来不是什么新鲜的东西,然而由于相关环境(JDK、leiningen)的演进,网上的demo已经大多不可用了。

这些变动主要包括:

1.由于JDK7的较新版本之后,JavaFX已经集成到JDK中,因此JavaFX的运行时jar不再需要了。相关依赖需要去除。

2.由于leiningen新版本的改变,现在main函数必须在源代码和工程文件中显式定义。

代码参见:

https://github.com/antkillerfarm/antkillerfarm_rubbish/tree/master/clojure/javafx

Hadopp生态圈的语言分布

项目 语言
Hadoop Java
Spark 主要scala,少量Java
Kafka 主要Java,少量scala
Storm 主要Java,少量Clojure

这里需要指出的是,Storm虽然被称为是Clojure语言的最知名作品,然而Clojure所占的代码比并不高,还是Java居多。

Groovy

Groovy是另一种JVM语言,也是与Java最兼容的语言。普通Java代码可以无修改的在Groovy中编译。Groovy源代码以.groovy为后缀。

Groovy使用Gradle或Grape作为自动管理工具,其中后者是Groovy原生支持的,但是现在已经不如前者流行了。

官网:

http://www.groovy-lang.org/

代码参见:

https://github.com/antkillerfarm/antkillerfarm_rubbish/tree/master/groovy/javafx

Scala

官网:

http://www.scala-lang.org/

教程:

http://www.runoob.com/scala/scala-tutorial.html

sbt

sbt是scala的构建工具,其作用类似于Java的Ant和Maven。

官网:

http://www.scala-sbt.org/

教程:

https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown

安装

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt update
sudo apt install sbt

参见:

http://www.scala-sbt.org/release/docs/Installing-sbt-on-Linux.html

常用命令

sbt有一个和scala类似的命令行交互界面,可以输入相关的命令。其中常用的有:

  • compile

  • package

  • run

GUI

scala的GUI方案和Java完全一致,只要Java能用的GUI,scala都能用。这里仅以JavaFX为例讨论scala的GUI开发。

方法一:采用一般的scala调用Java的方式。参见:

http://alvinalexander.com/scala/scala-javafx-hello-world-example

正如上面网页指出的,这里的main函数实际上是有一定技巧在里面的,写起来并不简洁,而且代码风格更像是Java,而不是scala。

方法二:ScalaFX

ScalaFX是对JavaFX的封装,风格更接近于scala。

官网:

http://www.scalafx.org/

sbt支持:

libraryDependencies += "org.scalafx" %% "scalafx" % "8.0.92-R10"

VS Code

VS Code(Visual Studio Code)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器。(首发于2015年)从文件来看应该是基于nodejs所做,据说脱胎于Atom。

目前我已经用VS Code替换了Source Insight。后者这么多年了,版本才4.0,而且由于收费的缘故,绝大多数人还是使用3.5版本,那可是我2009年刚接触时就有的版本。

官网:

https://code.visualstudio.com/

注:VS Code本身包含了部分闭源代码,社区开源版本叫做VSCodium。这点和Chrome与Chromium比较像。

安装:

umake ide visual-studio-code

可执行程序也叫visual-studio-code

在Ubuntu 18.04中,umake安装方法没有处理好依赖,需要:

sudo apt install libgconf-2-4

在Ubuntu 22.04中,没有umake,因此安装方法改为:

wget -O- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/vscode.gpg
echo deb [arch=amd64 signed-by=/usr/share/keyrings/vscode.gpg] https://packages.microsoft.com/repos/vscode stable main | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update
sudo apt install code

细节

Ctrl+P 文件名搜索

Ctrl+Shift+P 命令行

View–> Toggle Word Wrap 自动换行

"editor.rulers": []:在一定数量的等宽字符后显示垂直标尺。输入多个值,显示多个标尺。

格式化对齐快捷键:

Windows:Shift + Alt + F

Ubuntu:Ctrl + Shift + I

列选择:Shift + Alt + 鼠标左键拖动

注释代码:Ctrl + /

搜索框中可以用上下按键翻搜索历史。

查看数组内容:

*(int(*)[10])arr_name

terminal.integrated.scrollback:设置终端保存的最大行数。

# (.*)\+\+

文件标签栏多行显示: workbench.editor.wrapTabs

执行Task:F1 + .vscode/tasks.json

插件

filesize:在底部状态栏显示当前文件大小,点击后还可以看到详细创建、修改时间。

Beautify:格式化JS/CSS/HTML代码。

Clang-format: 格式化C/C++/Java/Objective-C代码。需要安装Clang-format:

sudo apt install clang-format

Diff Folders:文件夹比较。

调试

1.安装各个语言的插件。

2.按F5开始调试。首次调试时会让你设置调试配置。

3.调试python时,按下下方状态栏中的python版本信息,可以选择python环境,包括venv环境。

新版的空格显示问题

自2019.6之后,新版VS code在新版Ubuntu的默认显示总是很诡异,空格的宽度很小,总让人怀疑是否有空格。

解决办法:

首选项->设置->用户->Editor: Font Family

Consolas,’Courier New’,monospace

remote-ssh

remote-ssh是vscode远程编辑/调试的组件。它分为本地端和服务器端两部分,且两者版本必须一致才行。所以,这里主要的问题就是如何下载服务器端,尤其在后者不能联网的时候。

下载地址:

https://update.code.visualstudio.com/commit:<commit-id>/server-linux-x64/stable

or

https://update.code.visualstudio.com/commit:<commit-id>/server-linux-x64/insider

这里的commit-id可以在vscode的“About”上查到。

将下载的vscode-server-linux-x64.tar.gz解压到~/.vscode-server/bin/<commit-id>下。

使用:

Press F1 and run the Remote-SSH: Open SSH Host... command.


问题:

==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run '/home/danny/dev/tools/gdb' as the super user

解决:

sudo sysctl -w kernel.yama.ptrace_scope=0

gdb通过调用ptrace,可以向机器码中插入INT 3指令,从而实现断点。

yama是内核里的安全模块,专门用于管理ptrace的权限。

x86在硬件层面提供了一个特殊的处理器模式:单步调试模式,开启后,CPU接下来执行的每条指令都会触发1号中断。

x86还提供了断点地址寄存器(Debug Address Registers)、调试状态寄存器(Debug Status Register)、调试控制寄存器(Debug Control Register)。

ARM也有类似的东西叫Data Watchpoint and Trace(DWT)。

https://www.zhihu.com/question/578172542

Linux下常用的程序调试器gdb是什么原理?


问题:

客户端更新后连不上远程服务器,一直报错 waiting for server log…

解决:

/home//.vscode-server/bin/XXX/server.sh

$ROOT/node" ${INSPECT:-} "$ROOT/out/server-main.js" --compatibility=1.63 --accept-server-license-terms

参考:

https://blog.csdn.net/wyg1997/article/details/101460961

Remote-ssh服务器端vscode-server安装失败

https://mp.weixin.qq.com/s/n7zyDFOeHd9K5oSKz7Zg9Q

vsCode离线安装remote-ssh插件搭建远程开发环境

https://zhuanlan.zhihu.com/p/294933020

VS Code Server的离线安装过程

C/C++ IntelliSense失效

例如没有“转到定义”的菜单。

检查C_Cpp.IntelliSenseEngine是否打开。

卸载

最近遇到问题,某插件在某机器上失灵,最后彻底重装才解决。特记录之。

umake --remove ide visual-studio-code

程序安装路径:

~/.local/share/umake/ide/visual-studio-code/bin/code

插件路径:

~/.vscode~/.vscode-server

其他配置缓存数据:

~/.config/Code

有时插件出问题,当重启也无效的时候,可以试一下:

rm-rf ~/.config/Code/*Cache*

参考

https://blog.csdn.net/GossipHHH/article/details/78132398

VsCode插件安装及推荐

https://mp.weixin.qq.com/s/cw_Bww22sgPtOeNLKQ7HHA

如何使用Visual Studio Code进行Java开发?

https://mp.weixin.qq.com/s/7vG2b900eKfVrvm-fi6IZQ

开发一个爆款VS Code插件这么简单!

https://mp.weixin.qq.com/s/DMzJxeEWVTcPy0ShVFH8Qg

20个必知必会VSCode小技巧

https://mp.weixin.qq.com/s/1EKU6yUXMzhSl9zzgokkIA

VScode数据结构可视化

http://blog.haoji.me/vscode-plugin-overview.html

VSCode插件开发全攻略

http://blog.haoji.me/chrome-plugin-develop.html

Chrome插件(扩展)开发全攻略

perl

中文教程:

http://www.runoob.com/perl/perl-tutorial.html

perl的语法和C差别不算太大,好多语法大致上从关键字也可以猜出来。这里仅对一些符号做个简短的说明。

$name:变量name。

@name:数组name。

&name:函数name。这种情况下,name的定义在使用之后。如果name的定义在使用之前,&可省略。

%name:哈希数组name。

perl的包管理器叫做cpan。这实际上也是该工具网站的名字。

Fork me on GitHub